SQL Subqueries - Undergraduate Courses | Computer...
Transcript of SQL Subqueries - Undergraduate Courses | Computer...
![Page 1: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/1.jpg)
SQL Subqueries
T. M. Murali
September 1, 2010
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 2: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/2.jpg)
Linear Notation for Relational Algebra
I Relational algebra expressions can become very long.I Use linear notation to store results of intemediate expressions.
1. A relation name and a parenthesised list of attributes for that relation.Use Answer as the conventional name for the final result.
2. The assignment symbol :=.3. Any expression in relational algebra on the right.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 3: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/3.jpg)
Example of Linear Notation
I Name pairs of students who live at the same address.
I Normal expression:
πS1.Name,S2.Name(σS1.Address = S2.Address(ρS1(Students) × ρS2(Students)))
I Linear notation:
Pairs(P1, N1, A1, P2, N2, A2) := ρS1(Students) × ρS2(Students)
Matched(P1, N1, A1, P2, N2, A2) :=
σA1 = A2(Pairs(P1, N1, A1, P2, N2, A2))
Answer(Name1, Name2) := πN1,N2(Matched(P1, N1, A1, P2, N2, A2)).
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 4: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/4.jpg)
Example of Linear Notation
I Name pairs of students who live at the same address.
I Normal expression:
πS1.Name,S2.Name(σS1.Address = S2.Address(ρS1(Students) × ρS2(Students)))
I Linear notation:
Pairs(P1, N1, A1, P2, N2, A2) := ρS1(Students) × ρS2(Students)
Matched(P1, N1, A1, P2, N2, A2) :=
σA1 = A2(Pairs(P1, N1, A1, P2, N2, A2))
Answer(Name1, Name2) := πN1,N2(Matched(P1, N1, A1, P2, N2, A2)).
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 5: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/5.jpg)
Interpreting Queries Involving Multiple Relations
SELECT A, B FROM R, S WHERE C;
I Nested loops:
for each tuple t1 in Rfor each tuple t2 in S
if the attributes in t1 and t2 satisfy Coutput the tuples involving attributes A and B.
I Conversion to relational algebra: πA,B(σC (R × S)).
1. Compute R × S .2. Apply the selection operator σC () to R × S .3. Project the resulting tuples to attributes A and B.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 6: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/6.jpg)
Interpreting Queries Involving Multiple Relations
SELECT A, B FROM R, S WHERE C;
I Nested loops:
for each tuple t1 in Rfor each tuple t2 in S
if the attributes in t1 and t2 satisfy Coutput the tuples involving attributes A and B.
I Conversion to relational algebra: πA,B(σC (R × S)).
1. Compute R × S .2. Apply the selection operator σC () to R × S .3. Project the resulting tuples to attributes A and B.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 7: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/7.jpg)
Interpreting Queries Involving Multiple Relations
SELECT A, B FROM R, S WHERE C;
I Nested loops:
for each tuple t1 in Rfor each tuple t2 in S
if the attributes in t1 and t2 satisfy Coutput the tuples involving attributes A and B.
I Conversion to relational algebra: πA,B(σC (R × S)).
1. Compute R × S .2. Apply the selection operator σC () to R × S .3. Project the resulting tuples to attributes A and B.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 8: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/8.jpg)
Motivation for Subqueries
I Find the name of the professor who teaches “CS 4604.”
SELECT Name
FROM Professors, Teach
WHERE (PID = ProfessorPID) AND (Number = ’4604’) AND
(DeptName = ’CS’) ;
I Do we need to take the natural join of two big relations just to get arelation with one tuple?
I Can we rewrite the query without using a join?
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 9: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/9.jpg)
Motivation for Subqueries
I Find the name of the professor who teaches “CS 4604.”SELECT Name
FROM Professors, Teach
WHERE (PID = ProfessorPID) AND (Number = ’4604’) AND
(DeptName = ’CS’) ;
I Do we need to take the natural join of two big relations just to get arelation with one tuple?
I Can we rewrite the query without using a join?
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 10: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/10.jpg)
Motivation for Subqueries
I Find the name of the professor who teaches “CS 4604.”SELECT Name
FROM Professors, Teach
WHERE (PID = ProfessorPID) AND (Number = ’4604’) AND
(DeptName = ’CS’) ;
I Do we need to take the natural join of two big relations just to get arelation with one tuple?
I Can we rewrite the query without using a join?
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 11: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/11.jpg)
SQL Subquery For Example
I Find the name of the professor who teaches “CS 4604.”
SELECT Name
FROM Professors
WHERE PID =
(SELECT ProfessorPID
FROM Teach
WHERE (Number = 4604) AND (DeptName = ’CS’)
);
I When using =, the subquery must return a single tuple.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 12: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/12.jpg)
SQL Subquery For Example
I Find the name of the professor who teaches “CS 4604.”
SELECT Name
FROM Professors
WHERE PID =
(SELECT ProfessorPID
FROM Teach
WHERE (Number = 4604) AND (DeptName = ’CS’)
);
I When using =, the subquery must return a single tuple.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 13: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/13.jpg)
SQL Subquery For Example
I Find the name of the professor who teaches “CS 4604.”
SELECT Name
FROM Professors
WHERE PID =
(SELECT ProfessorPID
FROM Teach
WHERE (Number = 4604) AND (DeptName = ’CS’)
);
I When using =, the subquery must return a single tuple.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 14: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/14.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 15: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/15.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 16: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/16.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 17: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/17.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.
I t > ALL R is true if and only if R is unary (has one attribute) and tis greater than every value in R.
I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 18: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/18.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.
I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 19: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/19.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 20: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/20.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 21: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/21.jpg)
Conditions Involving Relations
I SQL includes a number of operators that apply to a relation andproduce a boolean result.
I These operators are very useful to apply on results of sub-queries.
I Let R be a relation and t be a tuple with the same set of attributes.
I EXISTS R is true if and only if R contains at least one tuple.
I t IN R is true if and only if t equals a tuple in R.I t > ALL R is true if and only if R is unary (has one attribute) and t
is greater than every value in R.I Can use any of the other five comparison operators.I If we use <>, R need not be unary.
I t > ANY R (which is unary) is true if and only if t is greater than atleast one value in R.
I We can use NOT to negate EXISTS, ALL, and ANY.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 22: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/22.jpg)
Subqueries Using Conditions
I Find the departments of the courses taken by the student with name’Suri’.
SELECT DeptName
FROM Take
WHERE StudentPID IN
(SELECT PID
FROM Students
WHERE (Name = ’Suri’)
);
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 23: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/23.jpg)
Subqueries Using Conditions
I Find the departments of the courses taken by the student with name’Suri’.
SELECT DeptName
FROM Take
WHERE StudentPID IN
(SELECT PID
FROM Students
WHERE (Name = ’Suri’)
);
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 24: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/24.jpg)
Correlated Subqueries
I Find course names that have been used for two or more courses.
SELECT CourseName
FROM Courses AS First
WHERE CourseName IN
(SELECT CourseName
FROM Courses
WHERE (Number <> First.Number)
OR (DeptName <> First.DeptName));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 25: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/25.jpg)
Correlated Subqueries
I Find course names that have been used for two or more courses.
SELECT CourseName
FROM Courses AS First
WHERE CourseName IN
(SELECT CourseName
FROM Courses
WHERE
(Number <> First.Number)
OR (DeptName <> First.DeptName));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 26: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/26.jpg)
Correlated Subqueries
I Find course names that have been used for two or more courses.
SELECT CourseName
FROM Courses AS First
WHERE CourseName IN
(SELECT CourseName
FROM Courses
WHERE (Number <> First.Number)
OR (DeptName <> First.DeptName));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 27: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/27.jpg)
Evaluating Correlated Subqueries
SELECT CourseName
FROM Courses AS First
WHERE CourseName IN
(SELECT CourseName
FROM Courses
WHERE (Number <> First.Number)
OR (DeptName <> First.DeptName));
I Evaluate query by looping over tuples of First and for each tuple,evaluate the subquery.
I Scoping rules: an attribute in a subquery belongs to one of the tuplevariables in that subquery’s FROM clause, or to the immediatelysurrounding subquery, and so on.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 28: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/28.jpg)
Evaluating Correlated Subqueries
SELECT CourseName
FROM Courses AS First
WHERE CourseName IN
(SELECT CourseName
FROM Courses
WHERE (Number <> First.Number)
OR (DeptName <> First.DeptName));
I Evaluate query by looping over tuples of First and for each tuple,evaluate the subquery.
I Scoping rules: an attribute in a subquery belongs to one of the tuplevariables in that subquery’s FROM clause, or to the immediatelysurrounding subquery, and so on.
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 29: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/29.jpg)
Subqueries in FROM clauses
I Can use a subquery as a relation in a FROM clause.
I We must give such a relation an alias using the AS keyword.
I Let us find different ways of writing the query “Find the names ofProfessors who have taught the student whose name is ’Suri’.”
I The old way:
SELECT Professors.Name
FROM Professors, Take, Teach, Students
WHERE (Professors.PID = Teach.ProfessorPID)
AND (Teach.CourseNumber = Take.CourseNumber)
AND (Teach.DeptName = Take.DeptName)
AND (Take.StudentPID = Student.PID)
AND (Student.Name = ’Suri’);
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 30: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/30.jpg)
Subqueries in FROM clauses
I Can use a subquery as a relation in a FROM clause.
I We must give such a relation an alias using the AS keyword.
I Let us find different ways of writing the query “Find the names ofProfessors who have taught the student whose name is ’Suri’.”
I The old way:
SELECT Professors.Name
FROM Professors, Take, Teach, Students
WHERE (Professors.PID = Teach.ProfessorPID)
AND (Teach.CourseNumber = Take.CourseNumber)
AND (Teach.DeptName = Take.DeptName)
AND (Take.StudentPID = Student.PID)
AND (Student.Name = ’Suri’);
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 31: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/31.jpg)
Professors who have Taught ’Suri’
I “Find the (names of (Professors who have taught (courses taken bystudent with name ’Suri’))).”
SELECT Name
FROM Professors
WHERE PID IN
(SELECT ProfessorPID
FROM Teach
WHERE (Number, DeptName) IN
(SELECT Number, DeptName
FROM Take, Students
WHERE (StudentPID = PID) AND
(Students.Name = ’Suri’)));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 32: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/32.jpg)
Professors who have Taught ’Suri’
I “Find the (names of (Professors who have taught (courses taken bystudent with name ’Suri’))).”
SELECT Name
FROM Professors
WHERE PID IN
(SELECT ProfessorPID
FROM Teach
WHERE (Number, DeptName) IN
(SELECT Number, DeptName
FROM Take, Students
WHERE (StudentPID = PID) AND
(Students.Name = ’Suri’)));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 33: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/33.jpg)
Professors who have Taught ’Suri’
I “Find the (names of (Professors who have taught (courses taken by(student with first name ’Suri’)))).”
SELECT Name
FROM Professors
WHERE PID IN
(SELECT ProfessorPID
FROM Teach
WHERE (Number, DeptName) IN
(SELECT Number, DeptName
FROM Take
WHERE StudentPID IN
(SELECT PID
FROM Students
WHERE Name = ’Suri’)));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries
![Page 34: SQL Subqueries - Undergraduate Courses | Computer …courses.cs.vt.edu/~cs4604/Fall10/lectures/lecture-04-sq… · · 2010-09-02SQL Subqueries T. M. Murali September 1, 2010 T.](https://reader031.fdocuments.us/reader031/viewer/2022030413/5a9e7d8d7f8b9a62178b6cfa/html5/thumbnails/34.jpg)
Professors who have Taught ’Suri’
I “Find the (names of (Professors who have taught (courses taken by(student with first name ’Suri’)))).”
SELECT Name
FROM Professors
WHERE PID IN
(SELECT ProfessorPID
FROM Teach
WHERE (Number, DeptName) IN
(SELECT Number, DeptName
FROM Take
WHERE StudentPID IN
(SELECT PID
FROM Students
WHERE Name = ’Suri’)));
T. M. Murali September 1, 2010 CS 4604: SQL Subqueries