Upload
kenneth-cameron
View
225
Download
3
Embed Size (px)
Citation preview
1Eyad alshareef
Enhanced Guide to Enhanced Guide to Oracle 10gOracle 10g
Chapter 3:Using SQL Queries to Insert,Update, Delete, and View Data
2Eyad alshareef
Aggregating Data Aggregating Data Using Group Using Group
FunctionsFunctions((multiple row functionsmultiple row functions))
Aggregating Data Aggregating Data Using Group Using Group
FunctionsFunctions((multiple row functionsmultiple row functions))
3Eyad alshareef
ObjectivesObjectivesObjectivesObjectives
After completing this lesson, you After completing this lesson, you should be able to do the should be able to do the followingfollowing:: Identify the available group Identify the available group
functionsfunctions Describe the use of group functionsDescribe the use of group functions Group data using the GROUP BY Group data using the GROUP BY
clauseclause Include or exclude grouped rows Include or exclude grouped rows
by using the HAVING clauseby using the HAVING clause
After completing this lesson, you After completing this lesson, you should be able to do the should be able to do the followingfollowing:: Identify the available group Identify the available group
functionsfunctions Describe the use of group functionsDescribe the use of group functions Group data using the GROUP BY Group data using the GROUP BY
clauseclause Include or exclude grouped rows Include or exclude grouped rows
by using the HAVING clauseby using the HAVING clause
4Eyad alshareef
What Are Group What Are Group Functions?Functions?
What Are Group What Are Group Functions?Functions? Group functions operate on sets of Group functions operate on sets of
rows to give one result per grouprows to give one result per group.. Group functions operate on sets of Group functions operate on sets of
rows to give one result per grouprows to give one result per group..EMPEMP
““maximum maximum salary in salary in
the EMP table”the EMP table”
DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250
MAX(SAL)
---------
5000
5Eyad alshareef
Types of Group Types of Group FunctionsFunctions
Types of Group Types of Group FunctionsFunctions
AVG AVG COUNT COUNT COUNT(*)COUNT(*) MAXMAX MIN MIN SUMSUM
AVG AVG COUNT COUNT COUNT(*)COUNT(*) MAXMAX MIN MIN SUMSUM
6Eyad alshareef
Using Group FunctionsUsing Group FunctionsUsing Group FunctionsUsing Group Functions
SELECT [column,] group_function(column)FROM table[WHERE condition][GROUP BY column][ORDER BY column];
7Eyad alshareef
Using AVG and SUM Using AVG and SUM FunctionsFunctions
Using AVG and SUM Using AVG and SUM FunctionsFunctions
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)-------- --------- --------- --------- 1400 1600 1250 5600
You can use AVG and SUM for numeric You can use AVG and SUM for numeric datadata..
You can use AVG and SUM for numeric You can use AVG and SUM for numeric datadata..SQL> SELECT AVG(sal), MAX(sal),
2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';
8Eyad alshareef
Using MIN and MAX Using MIN and MAX FunctionsFunctions
Using MIN and MAX Using MIN and MAX FunctionsFunctions
You can use MIN and MAX for any You can use MIN and MAX for any datatypedatatype..
You can use MIN and MAX for any You can use MIN and MAX for any datatypedatatype..SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp;
MIN(HIRED MAX(HIRED--------- ---------17-DEC-80 12-JAN-83
9Eyad alshareef
Using the COUNT Using the COUNT FunctionFunction
Using the COUNT Using the COUNT FunctionFunction
COUNT(*)--------- 6
SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30;
COUNTCOUNT(*) (*) returns the number of returns the number of rows in a tablerows in a table..
COUNTCOUNT(*) (*) returns the number of returns the number of rows in a tablerows in a table..
10Eyad alshareef
Using the COUNT Using the COUNT FunctionFunction
Using the COUNT Using the COUNT FunctionFunction
COUNTCOUNT((exprexpr) ) returns the returns the number of nonnull rowsnumber of nonnull rows..
COUNTCOUNT((exprexpr) ) returns the returns the number of nonnull rowsnumber of nonnull rows..
SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30;
COUNT(COMM)----------- 4
11Eyad alshareef
Group Functions and Null Group Functions and Null ValuesValues
Group Functions and Null Group Functions and Null ValuesValues
Group functions ignore null Group functions ignore null values in the columnvalues in the column..
Group functions ignore null Group functions ignore null values in the columnvalues in the column..
SQL> SELECT AVG(comm) 2 FROM emp;
AVG(COMM)--------- 550
12Eyad alshareef
Using the NVL Function Using the NVL Function with Group Functionswith Group Functions
Using the NVL Function Using the NVL Function with Group Functionswith Group Functions
The NVL function forces group The NVL function forces group functions to include null valuesfunctions to include null values..
The NVL function forces group The NVL function forces group functions to include null valuesfunctions to include null values..
SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp;
AVG(NVL(COMM,0))---------------- 157.14286
13Eyad alshareef
Creating Groups of Creating Groups of Data Data
Creating Groups of Creating Groups of Data Data EMPEMP
““averageaveragesalary salary in EMPin EMPtable table
for each for each department”department”
2916.66672916.6667
21752175
1566.66671566.6667
DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250
DEPTNO AVG(SAL)
------- ---------
10 2916.6667
20 2175
30 1566.6667
14Eyad alshareef
Creating Groups of Creating Groups of DataData: :
GROUP BY ClauseGROUP BY Clause
Creating Groups of Creating Groups of DataData: :
GROUP BY ClauseGROUP BY ClauseSELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];
Divide rows in a table into Divide rows in a table into smaller groups by using the smaller groups by using the GROUP BY clauseGROUP BY clause..
Divide rows in a table into Divide rows in a table into smaller groups by using the smaller groups by using the GROUP BY clauseGROUP BY clause..
15Eyad alshareef
Using the GROUP BY Using the GROUP BY Clause Clause
Using the GROUP BY Using the GROUP BY Clause Clause
All columns in the SELECT list All columns in the SELECT list that are not in group functions that are not in group functions must be in the GROUP BY clausemust be in the GROUP BY clause..
All columns in the SELECT list All columns in the SELECT list that are not in group functions that are not in group functions must be in the GROUP BY clausemust be in the GROUP BY clause..
SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;
DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667
16Eyad alshareef
Using the GROUP BY Using the GROUP BY Clause Clause
Using the GROUP BY Using the GROUP BY Clause Clause
The GROUP BY column does not The GROUP BY column does not have to be in the SELECT listhave to be in the SELECT list..
The GROUP BY column does not The GROUP BY column does not have to be in the SELECT listhave to be in the SELECT list..
SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;
AVG(SAL)--------- 2916.6667 21751566.6667
17Eyad alshareef
Grouping by More Grouping by More Than One ColumnThan One ColumnGrouping by More Grouping by More Than One ColumnThan One Column
EMPEMP
““sum salaries in sum salaries in the EMP tablethe EMP tablefor each job, for each job, grouped by grouped by department”department”
DEPTNO JOB SAL
--------- --------- ---------
10 MANAGER 2450
10 PRESIDENT 5000
10 CLERK 1300
20 CLERK 800
20 CLERK 1100
20 ANALYST 3000
20 ANALYST 3000
20 MANAGER 2975
30 SALESMAN 1600
30 MANAGER 2850
30 SALESMAN 1250
30 CLERK 950
30 SALESMAN 1500
30 SALESMAN 1250
JOB SUM(SAL)
--------- ---------
CLERK 1300
MANAGER 2450
PRESIDENT 5000
ANALYST 6000
CLERK 1900
MANAGER 2975
CLERK 950
MANAGER 2850
SALESMAN 5600
DEPTNO
--------
10
10
10
20
20
20
30
30
30
18Eyad alshareef
Using the GROUP BY Using the GROUP BY Clause Clause
on Multiple Columnson Multiple Columns
Using the GROUP BY Using the GROUP BY Clause Clause
on Multiple Columnson Multiple ColumnsSQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job;
DEPTNO JOB SUM(SAL)--------- --------- --------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900...9 rows selected.
19Eyad alshareef
Illegal Queries Illegal Queries Using Group FunctionsUsing Group Functions
Illegal Queries Illegal Queries Using Group FunctionsUsing Group Functions Any column or expression in the Any column or expression in the
SELECT list that is not an SELECT list that is not an aggregate function must be in the aggregate function must be in the GROUP BY clauseGROUP BY clause..
Any column or expression in the Any column or expression in the SELECT list that is not an SELECT list that is not an aggregate function must be in the aggregate function must be in the GROUP BY clauseGROUP BY clause..SQL> SELECT deptno, COUNT(ename)
2 FROM emp;
SQL> SELECT deptno, COUNT(ename) 2 FROM emp;
SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function
SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function
Column missing in the GROUP BY clause
Column missing in the GROUP BY clause
Column missing in the GROUP BY clause
Column missing in the GROUP BY clause
20Eyad alshareef
Illegal Queries Illegal Queries Using Group FunctionsUsing Group Functions
Illegal Queries Illegal Queries Using Group FunctionsUsing Group Functions You cannot use the WHERE clause to You cannot use the WHERE clause to
restrict groupsrestrict groups.. You use the HAVING clause to restrict You use the HAVING clause to restrict
groupsgroups..
You cannot use the WHERE clause to You cannot use the WHERE clause to restrict groupsrestrict groups..
You use the HAVING clause to restrict You use the HAVING clause to restrict groupsgroups..
SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;
SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;
WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here
WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here
Cannot use the WHERE clause
Cannot use the WHERE clause
to
restrict groups
to restrict groups
Cannot use the WHERE clause
Cannot use the WHERE clause
to
restrict groups
to restrict groups
21Eyad alshareef
Excluding Group ResultsExcluding Group ResultsExcluding Group ResultsExcluding Group Results
““maximummaximumsalarysalary
per departmentper departmentgreater thangreater than
$2900”$2900”
EMPEMP
50005000
30003000
28502850
DEPTNO SAL
--------- ---------
10 2450
10 5000
10 1300
20 800
20 1100
20 3000
20 3000
20 2975
30 1600
30 2850
30 1250
30 950
30 1500
30 1250
DEPTNO MAX(SAL)
--------- ---------
10 5000
20 3000
22Eyad alshareef
Excluding Group ResultsExcluding Group Results: : HAVING ClauseHAVING Clause
Excluding Group ResultsExcluding Group Results: : HAVING ClauseHAVING Clause
Use the HAVING clause to restrict Use the HAVING clause to restrict groupsgroups Rows are groupedRows are grouped.. The group function is appliedThe group function is applied.. Groups matching the HAVING clause Groups matching the HAVING clause
are displayedare displayed..
Use the HAVING clause to restrict Use the HAVING clause to restrict groupsgroups Rows are groupedRows are grouped.. The group function is appliedThe group function is applied.. Groups matching the HAVING clause Groups matching the HAVING clause
are displayedare displayed..SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
23Eyad alshareef
Using the HAVING Using the HAVING ClauseClause
Using the HAVING Using the HAVING ClauseClause
SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;
DEPTNO MAX(SAL)--------- --------- 10 5000 20 3000
24Eyad alshareef
Using the HAVING Using the HAVING ClauseClause
Using the HAVING Using the HAVING ClauseClause
SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 6 ORDER BY SUM(sal);
JOB PAYROLL--------- ---------ANALYST 6000MANAGER 8275
5 HAVING SUM(sal)>5000
25Eyad alshareef
Nesting Group FunctionsNesting Group FunctionsNesting Group FunctionsNesting Group Functions
SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;
MAX(AVG(SAL))------------- 2916.6667
Display the maximum average Display the maximum average salarysalary. .
Display the maximum average Display the maximum average salarysalary. .
26Eyad alshareef
SummarySummarySummarySummarySELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];
Order of evaluation of the clausesOrder of evaluation of the clauses:: WHERE clauseWHERE clause GROUP BY clauseGROUP BY clause HAVING clause HAVING clause
Order of evaluation of the clausesOrder of evaluation of the clauses:: WHERE clauseWHERE clause GROUP BY clauseGROUP BY clause HAVING clause HAVING clause
27Eyad alshareef
Dynamic SQL QueriesDynamic SQL Queries
Queries that allow users to specify Queries that allow users to specify search conditions at runtimesearch conditions at runtime
ApproachesApproaches Substitution ValuesSubstitution Values Runtime VariablesRuntime Variables
28Eyad alshareef
Using Substitution Using Substitution ValuesValues
Created when search expression is Created when search expression is prefaced with an ampersand (&)prefaced with an ampersand (&)
System then prompts user for value System then prompts user for value
29Eyad alshareef
Using Runtime VariablesUsing Runtime Variables
Runtime variable: variable Runtime variable: variable defined in SQL*Plus environmentdefined in SQL*Plus environment Syntax: Syntax:
DEFINE variable_name = variable_value;DEFINE variable_name = variable_value;
You can then substitute the You can then substitute the variable name for a query search variable name for a query search condition valuecondition value