SQL: Part 3 - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

SQL: Part 3

Description:

2 FROM emp outr. 3 WHERE sal (SELECT AVG(sal) 4 FROM emp innr ... 5 WHERE innr.mgr = outr.empno) 34. Find all departments that do not have any employees. ... – PowerPoint PPT presentation

Number of Views:162
Avg rating:3.0/5.0
Slides: 44
Provided by: laku
Category:
Tags: sql | outr | part

less

Transcript and Presenter's Notes

Title: SQL: Part 3


1
SQL Part 3

Original materials supplied by the Oracle
Academic Initiative (OAI). Edited for classroom
use by Professor Laku Chidambaram. Not for
commercial use. Do not redistribute.
2
OUTLINE
  • Group Functions
  • Sub-queries
  • Set Operations

3
Group Functions

Original materials supplied by the Oracle
Academic Initiative (OAI) edited for classroom
use by Professor Laku Chidambaram. Do not
redistribute.
4
What Are Group Functions?
  • Group functions operate on sets of rows to give
    one result per group.

EMP

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
maximum salary in the EMP table
5
Types of Group Functions
  • AVG
  • COUNT
  • MAX
  • MIN
  • STDDEV
  • SUM
  • VARIANCE

6
Using Group Functions

SELECT column, group_function(column) FROM tabl
e WHERE condition GROUP BY column ORDER
BY column
7
Using AVG and SUM Functions
  • You can use AVG and SUM for numeric data.

SQLgt SELECT AVG(sal), MAX(sal), 2 MIN(sal),
SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES'


AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) --------
--------- --------- --------- 1400 1600
1250 5600
8
Using MIN and MAX Functions
  • You can use MIN and MAX for any datatype.

SQLgt SELECT MIN(hiredate), MAX(hiredate) 2
FROM emp


MIN(HIRED MAX(HIRED --------- --------- 17-DEC-80
12-JAN-83
9
Using the COUNT Function
  • COUNT() returns the number of rows in a table.

SQLgt SELECT COUNT() 2 FROM emp 3
WHERE deptno 30


COUNT() --------- 6
10
Using the COUNT Function
  • COUNT(expr) returns the number of nonnull rows.

SQLgt SELECT COUNT(comm) 2 FROM emp 3
WHERE deptno 30


COUNT(COMM) ----------- 4
11
Group Functions and Null Values
  • Group functions ignore null values in the column.

SQLgt SELECT AVG(comm) 2 FROM emp


AVG(COMM) --------- 550
12
Using the ISNULL Function with Group Functions
  • The ISNULL function forces group functions to
    include null values.

SQLgt SELECT AVG(ISNULL(comm,0)) 2 FROM emp


AVG(ISNULL(COMM,0)) ----------------
157.14286
13
Creating Groups of Data
EMP

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
averagesalary in EMPtable for each
department

14
Creating Groups of Data GROUP BY Clause
SELECT column, group_function(column) FROM table
WHERE condition GROUP BY group_by_expression
ORDER BY column
  • Divide rows in a table into smaller groups by
    using the GROUP BY clause.

15
Using the GROUP BY Clause
  • All columns in the SELECT list that are not in
    group functions must be in the GROUP BY clause.

SQLgt SELECT deptno, AVG(sal) 2 FROM emp
3 GROUP BY deptno

DEPTNO AVG(SAL) --------- --------- 10
2916.6667 20 2175 30 1566.6667

16
Using the GROUP BY Clause
  • The GROUP BY column does not have to be in the
    SELECT list.

SQLgt SELECT AVG(sal) 2 FROM emp 3
GROUP BY deptno

AVG(SAL) --------- 2916.6667 2175 1566.6667

17
Grouping by More Than One Column
EMP
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

sum salaries in the EMP tablefor each job,
grouped by department
18
Using the GROUP BY Clause on Multiple Columns
SQLgt 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.

19
Illegal Queries Using Group Functions
  • Any column or expression in the SELECT list that
    is not an aggregate function must be in the GROUP
    BY clause.

SQLgt SELECT deptno, COUNT(ename) 2 FROM emp
Column missing in the GROUP BY clause
SELECT deptno, COUNT(ename) ERROR at
line 1 not a single-group group function
20
Illegal Queries Using Group Functions
  • You cannot use the WHERE clause to restrict
    groups.
  • You use the HAVING clause to restrict groups.

SQLgt SELECT deptno, AVG(sal) 2 FROM emp 3
WHERE AVG(sal) gt 2000 4 GROUP BY deptno
Cannot use the WHERE clause to
restrict groups
WHERE AVG(sal) gt 2000 ERROR at line 3
group function is not allowed here
21
Excluding Group Results
EMP
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

maximumsalaryper department greater than2900
DEPTNO MAX(SAL) --------- --------- 10
5000 20 3000

22
Excluding Group Results HAVING Clause
  • Use the HAVING clause to restrict groups
  • Rows are grouped.
  • The group function is applied.
  • Groups matching the HAVING clause are displayed.

SELECT column, group_function FROM table WHERE c
ondition GROUP BY group_by_expression HAVING g
roup_condition ORDER BY column

23
Using the HAVING Clause
SQLgt SELECT deptno, max(sal) 2 FROM emp
3 GROUP BY deptno 4 HAVING max(sal)gt2900

DEPTNO MAX(SAL) --------- --------- 10
5000 20 3000

24
Using the HAVING Clause

SQLgt SELECT job, SUM(sal) PAYROLL 2 FROM
emp 3 WHERE job NOT LIKE 'SALES' 4
GROUP BY job 5 HAVING SUM(sal)gt5000 6
ORDER BY SUM(sal)
JOB PAYROLL --------- --------- ANALYST
6000 MANAGER 8275

25
Sub-queries

26
What Is a Subquery?
  • A subquery is a SELECT statement embedded in a
    clause of another SQL statement.

27
Subqueries
  • The subquery (inner query) executes once before
    the main query.
  • The result of the subquery is used by the main
    query (outer query).


SELECT select_list FROM table WHERE expr operator
(SELECT select_list FROM table)
28
Using a Subquery
SQLgt SELECT ename 2 FROM emp 3 WHERE sal
gt 4 (SELECT sal 5 FROM
emp 6 WHERE empno 7566)

ENAME ---------- KING FORD SCOTT
29
Correlated Subqueries
  • Used to affect row-by-row processing, each
    subquery is executed once for every row of the
    outer query.

GET candidate row
EXECUTE inner query using candidate row value
USE value(s) from inner query to qualify
candidate row
30
Correlated Subqueries
SELECT outer1, outer2, ... FROM table1
alias1 WHERE outer1 operator (SELECT
inner1 FROM table2
alias2 WHERE
alias1.outer2 alias2.inner1)

The subquery references a column from a table in
the parent query.
31
Using Correlated Subqueries
  • Find all employees who make more than the average
    salary in their department.

SQLgt SELECT empno, sal, deptno 2 FROM emp
outr 3 WHERE sal gt (SELECT AVG(sal) 4
FROM emp innr 5 WHERE
outr.deptno innr.deptno)

EMPNO SAL DEPTNO -------- ---------
--------- 7839 5000 10 7698
2850 30 7566 2975 20
... 6 rows selected.
32
Using the EXISTS Operator
  • If a subquery row value is found
  • The search does not continue in the inner query.
  • The condition is flagged TRUE.
  • If a subquery row value is not found
  • The condition is flagged FALSE.
  • The search continues in the inner query.

33
Using the EXISTS Operator
Find employees who have at least one person
reporting to them.
SQLgt SELECT empno, ename, job, deptno 2 FROM
emp outr 3 WHERE EXISTS (SELECT empno 4
FROM emp innr 5
WHERE innr.mgr outr.empno)
EMPNO ENAME JOB
DEPTNO --------- ---------- --------- ---------
7839 KING PRESIDENT 10 7698
BLAKE MANAGER 30 7782 CLARK
MANAGER 10 7566 JONES
MANAGER 20 ... 6 rows selected.
34
Using the NOT EXISTS Operator
Find all departments that do not have any
employees.
SQLgt SELECT deptno, dname 2 FROM dept d 3
WHERE NOT EXISTS (SELECT 4
FROM emp e 5 WHERE
d.deptno e.deptno)
DEPTNO DNAME --------- ---------- 40
OPERATIONS
35
Correlated UPDATE
  • Use a correlated subquery to update rows in one
    table based on rows from another table.

UPDATE table1 alias1 SET column (SELECT
expression FROM table2 alias2
WHERE alias1.column
alias2.column)
36
Correlated DELETE
Use a correlated subquery to delete only
those rows that also exist in another table.
DELETE FROM table1 alias1 WHERE column
operator (SELECT expression
FROM table2 alias2 WHERE
alias1.column alias2.column)
37
Summary
  • Correlated subqueries are useful whenever a
    subquery must return a different result for each
    candidate row.
  • The EXISTS operator is a Boolean operator,
    testing the presence of a value.
  • Correlated subqueries can be used with SELECT,
    UPDATE, and DELETE statements.

38
Set Operations

39
UNION
A
B
40
Using the UNION Operator
  • Display the name, job title, and department of
    all employees.

SQLgt SELECT ename, job, deptno 2 FROM emp
3 UNION 4 SELECT name, title, deptid 5
FROM emp_history


ENAME JOB DEPTNO ---------- ---------
--------- ADAMS CLERK 30 ALLEN
SALESMAN 30 ALLEN SALESMAN
20 BALFORD CLERK 20 BLAKE
MANAGER 30 ... 20 rows selected.
41
UNION ALL
A
B
42
Using the UNION ALL Operator
  • Display the names, employee numbers, and job
    titles of all employees.

SQLgt SELECT ename, empno, job 2 FROM emp
3 UNION ALL 4 SELECT name, empid, title
5 FROM emp_history


ENAME EMPNO JOB ---------- ---------
--------- KING 7839 PRESIDENT BLAKE
7698 MANAGER CLARK 7782
MANAGER CLARK 7782 MANAGER MARTIN
7654 SALESMAN ... 23 rows selected.
43
SET Operator Rules
  • The expressions in the SELECT lists must match in
    number and datatype.
  • Duplicate rows are automatically eliminated
    except in UNION ALL.
  • Column names from the first query appear in the
    result.
  • The output is sorted in ascending order by
    default except in UNION ALL.
  • Parentheses can be used to alter the sequence of
    execution.
Write a Comment
User Comments (0)
About PowerShow.com