1Eyad alshareef Enhanced Guide to Oracle 10g Chapter 3: Using SQL Queries to Insert, Update, Delete,...

30
1 Eyad alshareef Enhanced Guide to Oracle Enhanced Guide to Oracle 10g 10g hapter 3: sing SQL Queries to Insert, pdate, Delete, and View Data

Transcript of 1Eyad alshareef Enhanced Guide to Oracle 10g Chapter 3: Using SQL Queries to Insert, Update, Delete,...

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

30Eyad alshareef

Using Runtime VariablesUsing Runtime Variables

Example:Example: