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
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
2
SELECT ……FROM …..WHERE operator
(SELECT …. FROM ….
);
Nested Queries:
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
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
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.
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.
7
Example DataSELECT * FROM Department;DEPARTMENT_NAME ID---- -----------------------------------------------ENGL 2003MATH 4513PSYC 1113COSC 2001MUSC 1233HIST 42513PHSC 4542CHEM 4113IDIS 3543
9 rows selected.
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.
9
Nested Queries:
• Correlated sub-queries:
SELECT NameFROM Student WHERE GPA >
(SELECT GPA FROM Student WHERE ID= 243);
10
Results
NAME---------JohnSarahIsaac
11
*Nested Queries*:
• Scalar sub-queries:
SELECT Name, IDFROM Student_course SORDER BY
(SELECT Department_Name FROM Department D WHERE S.id=D.id);
12
Results
NAME ID--------------------------------------ENGL120 2001COSC565 2001MATH360 102234MATH100 102234ENGL360 1111MATH450 243COSC310 201241COSC250 341235
13
Using group function in a sub-query:
• SELECT Name FROM Faculty WHERE Salary =
(SELECT MIN(Salary )FROM Faculty );
14
Results
NAME-------------Augustine
15
Using HAVING with sub-queries:
SELECT Dept, MIN(salary)FROM Faculty GROUP BY DeptHAVING MIN(Salary) >
(SELECT MIN(Salary ) FROM FacultyWHERE
Dept='COSC');
16
Results
DEPT MIN(SALARY)------------------------------ENGL 32000MATH 30000
17
Incorrect Statements:
SELECT NameFROM Faculty WHERE Salary =
(SELECT MIN(Salary )FROM Faculty GROUP BY Dept);
18
No Value
SELECT Name FROM Student WHERE GPA =
(SELECT GPA FROM Student WHERE Name=‘NOHN');
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
20
Results
NAME-------Walter John
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) );
22
Multiple Row Sub-query:
SELECT NameFROM Student WHERE GPA < ANY
(SELECT GPAFROM StudentWHERE Major='COSC'
);
23
Results
NAME--------JamesSarahMaryWalterSally
24
*Multiple Row Sub-query*:
SELECT Name FROM Student WHERE ID > ALL
(SELECT ID FROM
Student_CourseWHERE
Major='COSC' );
25
Results
NAME--------SarahMaryWalterSallyIsaac
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');
27
Results
NAME------------HookAugustine
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);
29
Results
NAME---------Thomas
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);
31
Results
NAME------------WilliamsJohnsonJacksonHookMorganSmithAugustine
32
How to write this query?
– Find the department name and faculty name of the department with more than one faculty member.
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
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;
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);
36
Results
DEPT NAME--------------------------COSC Williams
MATH Johnson
COSC Jackson
COSC Hook
MATH Thomas
COSC Smith
COSC Augustine
37
Multiple Column Sub-queries:
SELECT col1,col2, col3,…FROM table WHERE (col1,col2, ….) IN
(SELECT (col1,col2, ….)
FROM tableWHERE
condition );
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');
39
Results
NAME ID GPA---------- ---------------------------Mary 341235 2.11Sally 2001 3.00
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');
41
Results
NAME ID SALARY-------------------------------------------------Williams 191 34000Jackson 413 45000Hook 103 25000Smith 849 45000Augustine 837 20000
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;
43
Results
DEPT AVGSALARY----------------------------COSC 33800COSC 33800COSC 33800COSC 33800COSC 33800ENGL 32000MATH 30000MATH 30000
44
Correlated Subquery
SELECT *FROM StudentWHERE EXISTS (SELECT NULL
FROM Faculty WHERE Faculty.Dept =
Student.Major);
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
46
SELECT IDFROM StudentWHERE ID NOT IN
(SELECT ID FROM Faculty WHERE ID IS NOT NULL);
Note: If Faculty ID is nullable
47
Results
ID----------
102234 201241 341235 1111 2001 201248
48
Inline View
SELECT S.IDFROM Student S, (SELECT ID
FROM Faculty) F
WHERE S.ID < > F.ID;
49
Manipulating Data
• UNION:List of students and faculty.
SELECT NameFROM Student
UNION
SELECT NameFROM Faculty;
50
ResultsNAME------------AugustineHookIsaacJacksonJamesJohnJohnsonMaryMorganSallySarahSmithThomasWalterWilliams
51
Manipulating Data
• UNION:List of students and faculty.
SELECT NameFROM Student
UNION ALL
SELECT NameFROM Faculty;
52
ResultsNAME----------JamesJohnSarahMaryWalterSallyIsaacWilliamsJohnsonJacksonHookMorganThomasSmithAugustine
53
Manipulating Data
• INTERSECT: List of students who are also a faculty member.
SELECT NameFROM Student
INTERSECT
SELECT NameFROM Faculty;
54
Manipulating Data
• MINUS:
SELECT NameFROM Student
MINUSSELECT NameFROM Faculty;
55
Results
NAME-----------IsaacJamesJohnMarySallySarahWalter
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);
57
Question:
How does this query proceed?
SELECT ID, Name, GPA, MajorFROM Student sWHERE GPA = (SELECT MAX(GPA)
FROM Student WHERE Major = s.Major);
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;