Session 3: SQL B: Parts 3 - PowerPoint PPT Presentation

1 / 49
About This Presentation
Title:

Session 3: SQL B: Parts 3

Description:

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

Number of Views:56
Avg rating:3.0/5.0
Slides: 50
Provided by: ora35
Category:
Tags: sql | outr | parts | session

less

Transcript and Presenter's Notes

Title: Session 3: SQL B: Parts 3


1
Session 3 SQL (B) Parts 3 4

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
Using JOINs
3
Types of Joins
Equijoin
Non-equijoin
Outer join
Self join
4
What Is an Equijoin?
EMP
DEPT
EMPNO ENAME DEPTNO ------ ------- -------
7839 KING 10 7698 BLAKE 30
7782 CLARK 10 7566 JONES 20
7654 MARTIN 30 7499 ALLEN 30
7844 TURNER 30 7900 JAMES 30
7521 WARD 30 7902 FORD 20
7369 SMITH 20 ... 14 rows selected.


DEPTNO DNAME LOC ------- ----------
-------- 10 ACCOUNTING NEW YORK 30
SALES CHICAGO 10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS 30 SALES
CHICAGO 30 SALES CHICAGO 30
SALES CHICAGO 30 SALES CHICAGO
30 SALES CHICAGO 20 RESEARCH DALLAS
20 RESEARCH DALLAS ... 14 rows selected.
5
Using Table Aliases
  • Simplify queries by using table aliases.

SQLgt SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc 3 FROM emp, dept
4 WHERE emp.deptnodept.deptno

SQLgt SELECT e.empno, e.ename, e.deptno, 2
d.deptno, d.loc 3 FROM emp e, dept d
4 WHERE e.deptnod.deptno

6
Joining More Than Two Tables
CUSTOMER
NAME CUSTID ----------- ------ JOCKSPORTS
100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST
TENNIS 103 KT SPORTS 105 SHAPE UP
106 WOMENS SPORTS 107 ... ... 9 rows selected.
7
Non-Equijoins
EMP
SALGRADE


EMPNO ENAME SAL ------ ------- ------
7839 KING 5000 7698 BLAKE 2850 7782
CLARK 2450 7566 JONES 2975 7654
MARTIN 1250 7499 ALLEN 1600 7844
TURNER 1500 7900 JAMES 950 ... 14 rows
selected.
GRADE LOSAL HISAL ----- ----- ------ 1
700 1200 2 1201 1400 3
1401 2000 4 2001 3000 5 3001 9999
8
Retrieving Records with Non-Equijoins
SQLgt SELECT e.ename, e.sal, s.grade
2 FROM emp e, salgrade s 3 WHERE e.sal
4 BETWEEN s.losal AND s.hisal


ENAME SAL GRADE ----------
--------- --------- JAMES 950
1 SMITH 800 1 ADAMS
1100 1 ... 14 rows selected.
9
Outer Joins
EMP
DEPT


ENAME DEPTNO----- ------KING 10 BLAKE 30 CLARK 1
0 JONES 20 ...
DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30
SALES 10 ACCOUNTING 20 RESEARCH ... 40 OPERATIO
NS
10
Outer Joins
  • You use an outer join to also see rows that do
    not usually meet the join condition
  • Here are two updated examples

SELECT table1.column, table2.column FROM table1
LEFT JOIN table2 ON table1.column table2.column
SELECT table1.column, table2.column FROM table1
RIGHT JOIN table2 ON table1.column table2.column
11
Using Outer Joins
SQLgt SELECT e.ename, d.deptno, d.dname 2
FROM emp e RIGHT JOIN dept d 3 ON e.deptno
d.deptno 4 ORDER BY e.deptno


ENAME DEPTNO DNAME ---------- ---------
------------- KING 10
ACCOUNTING CLARK 10 ACCOUNTING ...
40 OPERATIONS 15 rows selected.
12
Self Joins
EMP (WORKER)
EMP (MANAGER)


EMPNO ENAME MGR----- ------ ---- 7839 KING
7698 BLAKE 7839 7782 CLARK 7839
7566 JONES 7839 7654 MARTIN 7698 7499 ALLEN 7698
EMPNO ENAME----- -------- 7839 KING
7839 KING 7839 KING 7698 BLAKE 7698 BLAKE
13
Joining a Table to Itself
SQLgt SELECT worker.ename ' works for '
manager.ename 2 FROM emp worker, emp manager
3 WHERE worker.mgr manager.empno

WORKER.ENAME WORKS FOR MANAGER.ENAME -------------
----------------------- BLAKE works for
KING CLARK works for KING JONES works for
KING MARTIN works for BLAKE ... 13 rows selected.
14
Group Functions

15
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
16
Types of Group Functions
  • AVG
  • COUNT
  • MAX
  • MIN
  • STDDEV
  • SUM
  • VARIANCE

17
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
18
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
19
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
20
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
21
Group Functions and Null Values
  • Group functions ignore null values in the column.

SQLgt SELECT AVG(comm) 2 FROM emp


AVG(COMM) --------- 550
22
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
23
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

24
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

25
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

26
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
27
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.

28
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
29
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
30
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

31
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

32
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

33
Sub-queries

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

35
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)
36
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
37
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
38
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.
39
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.
40
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.

41
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.
42
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
43
Views

44
What Is a View?
EMP Table
EMPNO ENAME JOB MGR HIREDATE SAL
COMM DEPTNO ----- ------- --------- -----
--------- ----- ----- ------- 7839 KING
PRESIDENT 17-NOV-81 5000 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850
30 7782 CLARK MANAGER 7839 09-JUN-81
2450 10 7566 JONES MANAGER 7839
02-APR-81 2975 20 7654 MARTIN
SALESMAN 7698 28-SEP-81 1250 1400 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600
300 30 7844 TURNER SALESMAN 7698
08-SEP-81 1500 0 30 7900 JAMES CLERK
7698 03-DEC-81 950 30 7521
WARD SALESMAN 7698 22-FEB-81 1250 500
30 7902 FORD ANALYST 7566 03-DEC-81 3000
20 7369 SMITH CLERK 7902
17-DEC-80 800 20 7788 SCOTT
ANALYST 7566 09-DEC-82 3000 20
7876 ADAMS CLERK 7788 12-JAN-83 1100
20 7934 MILLER CLERK 7782 23-JAN-82
1300 10
45
Creating a View
  • Create a view, EMPVU10, that contains details of
    employees in department 10.

SQLgt CREATE VIEW empvu10 2 AS SELECT empno,
ename, job 3 FROM emp 4 WHERE deptno
10 View created.

46
Retrieving Data from a View
SQLgt SELECT 2 FROM salvu30

EMPLOYEE_NUMBER NAME SALARY -------------
-- ---------- --------- 7698 BLAKE
2850 7654 MARTIN 1250
7499 ALLEN 1600
7844 TURNER 1500 7900 JAMES
950 7521 WARD
1250 6 rows selected.
47
Creating a Complex View
  • Create a complex view that contains group
    functions to display values from two tables.

SQLgt CREATE VIEW dept_sum_vu 2 (name,
minsal, maxsal, avgsal) 3 AS SELECT d.dname,
MIN(e.sal), MAX(e.sal), 4 AVG(e.sal) 5
FROM emp e, dept d 6 WHERE e.deptno
d.deptno 7 GROUP BY d.dname View created.

48
Removing a View
  • Remove a view without losing data because a view
    is based on underlying tables in the database.

DROP VIEW view
SQLgt DROP VIEW empvu10 View dropped.

49
Summary
  • A view is derived from data in other tables or
    other views.
  • A view provides the following advantages
  • Restricts database access
  • Simplifies queries
  • Provides data independence
  • Allows multiple views of the same data
  • Can be dropped without removing the underlying
    data
Write a Comment
User Comments (0)
About PowerShow.com