58
Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz Objectives Nested queries Application of nested queries Conditions on nested queries Pair wise and non-pair wise comparison Union Minus intersection

Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

  • Upload
    thyra

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz. Objectives Nested queries Application of nested queries Conditions on nested queries Pair wise and non-pair wise comparison Union Minus intersection. Nested Queries:. SELECT …… FROM….. - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

Chapter ElevenData Manipulation Language (DML)

Nested QueriesDr. Chitsaz

Objectives• Nested queries• Application of nested queries• Conditions on nested queries• Pair wise and non-pair wise comparison• Union• Minus• intersection

Page 2: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

2

SELECT ……FROM …..WHERE operator

(SELECT …. FROM ….

);

Nested Queries:

Page 3: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

3

Rules:

• Inner query is executed first• Enclosed sub-queries in parentheses.• Sub-queries must be placed on the right side of the

comparison operator• Do not add an ORDER BY to a sub-query • Result is used by outer query• Sub-query can be placed in

WHEREHAVINGFROM

Page 4: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

4

Rules:

Operator:– Single row

= ,<>, > ,< , >= ,<=

– Multiple rowsANY IN ALL

• Use single row operators with a single row sub-query• Use multiple row operators with multiple rows

sub-query

Page 5: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

5

Example DataSELECT * FROM Student;NAME ID MAJOR MINOR GPA------------------------------- ---- ---- ----------------James 243 COSC MATH 3.21John 102234 COSC MATH 3.32Sarah 201241 MATH COSC 3.20Mary 341235 MATH ENGL 2.11Walter 1111 ENGL MATH 1.41Sally 2001 MATH ENGL 3.00Isaac 201248 MATH COSC 4.00

7 rows selected.

Page 6: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

6

Example DataSELECT * FROM Faculty;NAME ID SALARY DEPT AREA---------- ---------- -----------------------------------------------------Williams 191 34000 COSC DATA STRUCTURESJohnson 1234 30000 MATH CALCULUSJackson 413 45000 COSC NETWORKINGHook 103 25000 COSC DATABASEMorgan 127 32000 ENGL LITERATUREThomas 243 30000 MATH ALGEBRASmith 849 45000 COSC NETWORKINGAugustine 837 20000 COSC DATA STRUCTURES

8 rows selected.

Page 7: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

7

Example DataSELECT * FROM Department;DEPARTMENT_NAME ID---- -----------------------------------------------ENGL 2003MATH 4513PSYC 1113COSC 2001MUSC 1233HIST 42513PHSC 4542CHEM 4113IDIS 3543

9 rows selected.

Page 8: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

8

Example DataSELECT * FROM Student_course; ID C_NUM DEPT CREDITS NAME GRADE----------------------------------- ---------- ---- ---------- --------------

----------- 102234 360 MATH 3 MATH360 A 102234 100 MATH 3 MATH100 B 201241 310 COSC 3 COSC310 C 341235 250 COSC 3 COSC250 F 2001 120 ENGL 3 ENGL120 C 1111 360 ENGL 3 ENGL360 A 243 450 MATH 3 MATH450 B 2001 565 COSC 3 COSC565 C

8 rows selected.

Page 9: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

9

Nested Queries:

• Correlated sub-queries:

SELECT NameFROM Student WHERE GPA >

(SELECT GPA FROM Student WHERE ID= 243);

Page 10: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

10

Results

NAME---------JohnSarahIsaac

Page 11: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

11

*Nested Queries*:

• Scalar sub-queries:

SELECT Name, IDFROM Student_course SORDER BY

(SELECT Department_Name FROM Department D WHERE S.id=D.id);

Page 12: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

12

Results

NAME ID--------------------------------------ENGL120 2001COSC565 2001MATH360 102234MATH100 102234ENGL360 1111MATH450 243COSC310 201241COSC250 341235

Page 13: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

13

Using group function in a sub-query:

• SELECT Name FROM Faculty WHERE Salary =

(SELECT MIN(Salary )FROM Faculty );

Page 14: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

14

Results

NAME-------------Augustine

Page 15: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

15

Using HAVING with sub-queries:

SELECT Dept, MIN(salary)FROM Faculty GROUP BY DeptHAVING MIN(Salary) >

(SELECT MIN(Salary ) FROM FacultyWHERE

Dept='COSC');

Page 16: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

16

Results

DEPT MIN(SALARY)------------------------------ENGL 32000MATH 30000

Page 17: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

17

Incorrect Statements:

SELECT NameFROM Faculty WHERE Salary =

(SELECT MIN(Salary )FROM Faculty GROUP BY Dept);

Page 18: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

18

No Value

SELECT Name FROM Student WHERE GPA =

(SELECT GPA FROM Student WHERE Name=‘NOHN');

Page 19: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

19

Multiple Row Sub-query:

• Name of students having Grade A:SELECT NameFROM Student WHERE ID IN

(SELECT ID FROM Student_Course

WHERE Grade='A' ); WHERE EXISTSWHERE NOT IN …. WHERE NOT EXISTS

Page 20: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

20

Results

NAME-------Walter John

Page 21: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

21

Multiple Row Sub-query:

SELECT Name, IDFROM StudentWHERE ID IN

(SELECT ID FROM Faculty WHERE Dept IN

(SELECT Department_Name FROM Department WHERE ID = 2001) );

Page 22: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

22

Multiple Row Sub-query:

SELECT NameFROM Student WHERE GPA < ANY

(SELECT GPAFROM StudentWHERE Major='COSC'

);

Page 23: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

23

Results

NAME--------JamesSarahMaryWalterSally

Page 24: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

24

*Multiple Row Sub-query*:

SELECT Name FROM Student WHERE ID > ALL

(SELECT ID FROM

Student_CourseWHERE

Major='COSC' );

Page 25: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

25

Results

NAME--------SarahMaryWalterSallyIsaac

Page 26: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

26

Multiple Row Sub-query:

SELECT NameFROM FacultyWHERE Salary < (SELECT Salary

FROM Faculty WHERE Faculty.ID =1234)AND Dept =

(SELECT DeptFROM Faculty

WHERE Area='DATABASE');

Page 27: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

27

Results

NAME------------HookAugustine

Page 28: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

28

Multiple Row Sub-query:

• Name of Faculty who took coursesSELECT NameFROM FacultyWHERE EXISTS // IN

(SELECT * FROM Student_Course WHERE Faculty.ID =

Student_Course.ID);

Page 29: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

29

Results

NAME---------Thomas

Page 30: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

30

Multiple Row Sub-query:

• Name of Faculty who did not take coursesSELECT NameFROM FacultyWHERE NOT EXISTS

(SELECT * FROM Student_Course WHERE Faculty.ID =

Student_Course.ID);

Page 31: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

31

Results

NAME------------WilliamsJohnsonJacksonHookMorganSmithAugustine

Page 32: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

32

How to write this query?

– Find the department name and faculty name of the department with more than one faculty member.

Page 33: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

33

How to write this query?

– Find Departments with more than one Faculty

SELECT Dept, COUNT(*)FROM FacultyGROUP BY DeptHAVING COUNT(*) > 1;

Result: DEPT COUNT(*)

----------------------------COSC 5MATH 2

Page 34: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

34

How to write this query?

– Find department and name of faculty that are in each department with more than one faculty:

SELECT Dept, Name, COUNT(*)FROM FacultyGROUP BY Dept, NameHAVING COUNT(*) > 1;

Page 35: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

35

How to write this query?

– SELECT Dept, NameFROM Faculty aWHERE EXISTS(SELECT * FROM Faculty b WHERE a.Dept = b.Dept GROUP BY b.Dept HAVING COUNT(b.ID) > 1);

Page 36: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

36

Results

DEPT NAME--------------------------COSC Williams

MATH Johnson

COSC Jackson

COSC Hook

MATH Thomas

COSC Smith

COSC Augustine

Page 37: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

37

Multiple Column Sub-queries:

SELECT col1,col2, col3,…FROM table WHERE (col1,col2, ….) IN

(SELECT (col1,col2, ….)

FROM tableWHERE

condition );

Page 38: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

38

(Pair-wise Comparison)

• Name of students who have the same major and minor as Mary:

SELECT Name, ID, GPAFROM Student WHERE (major, minor) IN

(SELECT Major, MinorFROM Student

WHERE Name='MARY');

Page 39: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

39

Results

NAME ID GPA---------- ---------------------------Mary 341235 2.11Sally 2001 3.00

Page 40: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

40

(Non-pair-wise Comparison)

SELECT Name, ID, SalaryFROM FacultyWHERE Salary IN

(SELECT SalaryFROM FacultyWHERE Dept='COSC') OR Area IN

(SELECT Area FROM Faculty

WHERE name =‘Williams');

Page 41: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

41

Results

NAME ID SALARY-------------------------------------------------Williams 191 34000Jackson 413 45000Hook 103 25000Smith 849 45000Augustine 837 20000

Page 42: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

42

Using a sub-query in the FROM clause

SELECT a.Dept, avgsalaryFROM Faculty a ,

(SELECT Dept , AVG(Salary) avgsalary FROM Faculty

GROUP BY Dept) b WHERE a.Dept = b.Dept;

Page 43: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

43

Results

DEPT AVGSALARY----------------------------COSC 33800COSC 33800COSC 33800COSC 33800COSC 33800ENGL 32000MATH 30000MATH 30000

Page 44: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

44

Correlated Subquery

SELECT *FROM StudentWHERE EXISTS (SELECT NULL

FROM Faculty WHERE Faculty.Dept =

Student.Major);

Page 45: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

45

ResultsNAME ID MAJOR MINOR GPA--------------------------------------------------------------------------

James 243 COSC MATH 3.21

John 102234 COSC MATH 3.32

Sarah 201241 MATH COSC 3.2

Mary 341235 MATH ENGL 2.11

Walter 1111 ENGL MATH 1.41

Sally 2001 MATH ENGL 3.0

Isaac 201248 MATH COSC 4.0

Page 46: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

46

SELECT IDFROM StudentWHERE ID NOT IN

(SELECT ID FROM Faculty WHERE ID IS NOT NULL);

Note: If Faculty ID is nullable

Page 47: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

47

Results

ID----------

102234 201241 341235 1111 2001 201248

Page 48: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

48

Inline View

SELECT S.IDFROM Student S, (SELECT ID

FROM Faculty) F

WHERE S.ID < > F.ID;

Page 49: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

49

Manipulating Data

• UNION:List of students and faculty.

SELECT NameFROM Student

UNION

SELECT NameFROM Faculty;

Page 50: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

50

ResultsNAME------------AugustineHookIsaacJacksonJamesJohnJohnsonMaryMorganSallySarahSmithThomasWalterWilliams

Page 51: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

51

Manipulating Data

• UNION:List of students and faculty.

SELECT NameFROM Student

UNION ALL

SELECT NameFROM Faculty;

Page 52: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

52

ResultsNAME----------JamesJohnSarahMaryWalterSallyIsaacWilliamsJohnsonJacksonHookMorganThomasSmithAugustine

Page 53: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

53

Manipulating Data

• INTERSECT: List of students who are also a faculty member.

SELECT NameFROM Student

INTERSECT

SELECT NameFROM Faculty;

Page 54: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

54

Manipulating Data

• MINUS:

SELECT NameFROM Student

MINUSSELECT NameFROM Faculty;

Page 55: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

55

Results

NAME-----------IsaacJamesJohnMarySallySarahWalter

Page 56: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

56

Question:How many times will the subquery run?

SELECT a.ID, a.NameFROM Student aWHERE a.Major = (SELECT Name

From Department---------------------);

DELETE FROM StudentWHERE ID = (SELECT MIN(ID)

FROM MyTable);

Page 57: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

57

Question:

How does this query proceed?

SELECT ID, Name, GPA, MajorFROM Student sWHERE GPA = (SELECT MAX(GPA)

FROM Student WHERE Major = s.Major);

Page 58: Chapter Eleven Data Manipulation Language (DML) Nested Queries Dr. Chitsaz

58

Question:Which query will run faster?

SELECT s.NameFROM Student sWHERE s.GPA = (SELECT MAX(GPA)

FROM Student);

SELECT *FROM (SELECT s.Name, GPA,

DENSE_RANK OVER (ORDER BY GPA DESC) d

FROM Student s)WHERE d = 1;