sql: structured query languageweb.cs.wpi.edu/~cs3431/c15/lectures/week 5/sqlqueries3.pdf · sql:...
TRANSCRIPT
![Page 2: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/2.jpg)
More in SELECT Statement
l Special handling for NULL values
l Queries inside Insert/Update/Delete
l Temp Tables
l Nested subqueries
2
![Page 3: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/3.jpg)
Null Values l Null means ‘unknown’ value
l Any expression containing Null returns Null l 5 + null à null l ‘ABC’ || null à null
l Null in predicates returns UNKNOWN l Predicates usually return TRUE or FALSE
3
![Page 4: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/4.jpg)
Example
4
sNumber sName address pNumber 1 Dave 320FL 1
2 Greg null 1
3 Matt null 2
4 Jan 500MA 2
Student
SELECT sNumber FROM Student WHERE address = ‘320FL’;
sNumber 1
2
3 May or may not appear
Having Null in the data is problematic and needs special care…
![Page 5: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/5.jpg)
Use of “IS NULL” or “IS NOT NULL”
l Check if a value is null or not
5
SELECT sNumber FROM Student WHERE address is not null AND address = ‘320FL’;
SELECT sNumber FROM Student WHERE address is null;
Select student numbers where the address is null
Remember: SELECT sNumber FROM Student WHERE address = null;
X
The returned value here is unknown
![Page 6: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/6.jpg)
Use of “NVL” Function l NVL( exp1, exp2)
l If exp1 is null return exp2, otherwise return expr1
l Can be used in projection list or in predicates
6
SELECT sNumber FROM Student WHERE nvl(address, ‘n/a’) <> ‘n/a’ AND address ‘320FL’;
SELECT sNumber, nvl(address, ‘N/A’) FROM Student;
sNumber address 1 320FL
2 N/A
3 N/A
4 500MA
![Page 7: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/7.jpg)
Null with Grouping & Aggregation
l Aggregation l Null is ignored with all aggregates, e.g., SUM, AVG, MIN,
MAX except COUNT()
l Grouping l Null is considered as a separate group
7
![Page 8: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/8.jpg)
Example
8
sNumber sName address pNumber 1 Dave 320FL 1
2 Greg null 1
3 Matt null null
4 Jan 500MA 2
Student
SELECT address, sum(pNumber) as sum, count(*) as cnt FROM Student GROUP BY address;
address sum cnt 320FL 1 1
null 1 2
500MA 2 1
![Page 9: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/9.jpg)
More in SELECT Statement
l Special handling for NULL values
l Queries inside Insert/Update/Delete
l Temp Tables
l Nested subqueries
9
![Page 10: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/10.jpg)
Reminder About: Insert, Update, Delete l This is performed using Data Manipulation
Language of SQL (DML)
l Insertion l Insert into Students values (‘1111’, …);!
l Deletion l Delete from Students;!l Delete from Students Where sid = ‘1111’;!
l Update l Update Students Set GPA = GPA + 0.4;!l Update Students Set GPA = GPA + 0.4 Where sid = ‘1111’;!
!10
![Page 11: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/11.jpg)
Use of Select Inside Insert l All records returned from the Select will be inserted
11
INSERT INTO suppliers (supplier_id, supplier_name) SELECT account_no, name FROM externals Where code = 1;
Notice that there is no keyword “values” in this case
Number of columns and data types should match
![Page 12: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/12.jpg)
Use of Select Inside Delete
12
Delete From Student Where sNumber in (Select sNumber from Registration Where grade = ‘F’);
sNumber sName address 1 Dave 320FL
2 Greg null
3 Matt null
4 Jan 500MA
sNumber courseID grade 4 DB1 A
2 DB1 F
3 DB2 A
4 DB2 F
Student Registration
l Delete from Student all those who have grade ‘F’
Students number 2 & 4 will be deleted…
![Page 13: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/13.jpg)
Use of Select Inside Delete
13
Delete From Student Where sNumber not in (Select sNumber from Registration);
sNumber sName address 1 Dave 320FL
2 Greg null
3 Matt null
4 Jan 500MA
sNumber courseID grade 4 DB1 A
2 DB1 F
3 DB2 A
4 DB2 F
Student Registration
l Delete from Student all those who do not have registration
Student number 1 will be deleted…
![Page 14: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/14.jpg)
Use of Select Inside Update
14
Update Registration Set grade = ‘B’ Where sNumber in (Select sNumber from Student Where sName =‘Matt’);
sNumber sName address 1 Dave 320FL
2 Greg null
3 Matt null
4 Jan 500MA
sNumber courseID grade 4 DB1 A
2 DB1 F
3 DB2 A
4 DB2 F
Student Registration
l Update the grades of student ‘Matt’ to B
![Page 15: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/15.jpg)
Remember…
15
Delete From Student Where sNumber not in (Select sNumber from Registration);
Update Registration Set grade = ‘B’ Where sNumber in (Select sNumber from Student Where sName =‘Matt’);
In Delete and Update - The ‘From’ clause always has one table - The subquery can be only added in the ‘Where’ clause
![Page 16: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/16.jpg)
More in SELECT Statement
l Special handling for NULL values
l Queries inside Insert/Update/Delete
l Temp Tables
l Nested subqueries
16
![Page 17: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/17.jpg)
Temp Tables
l If a query is very complex, divide it into sub-queries
l Store the intermediate results in “Temp Tables”
l The got deleted automatically at the end of the session
17
![Page 18: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/18.jpg)
Example
18
Create Global Temporary Table temp123 (x int, y varchar2(10));
Insert into temp123 Select …;
Temp table. Its data will be deleted at log out
Inserting some intermediate data
More selects that may reference temp123 …
Exit; intermediate data is automatically deleted
Reuse the intermediate data
![Page 19: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/19.jpg)
More in SELECT Statement
l Special handling for NULL values
l Queries inside Insert/Update/Delete
l Nested subqueries
19
![Page 20: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/20.jpg)
Nested Subquery l SQL provides a mechanism for the nesting of
subqueries.
l A subquery is a SELECT statement expression that is nested within another query
l Subquery can appear in FROM or WHERE
clauses
20
![Page 21: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/21.jpg)
Nested Subquery in FROM Clause
l Use the inner SELECT like any other table l It is just built on the fly
l Inner SELECT can be a full statement with all clauses l ORDER BY clause does not make sense in the inner select
21
SELECT * FROM Student, (inner SELECT) AS q WHERE … Table built on the fly
![Page 22: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/22.jpg)
Back to this Example
22
Report the output relation O(CustomerName, Num_Loans, Num_Accounts) only for customers who have loans and accounts
SELECT customer_name, count(Distinct loan_number), count(Distinct account_number) FROM Depositor D, Borrower B WHERE D.customer_name = B.customer_name GROUP BY customer_name;
Find another way ??
![Page 23: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/23.jpg)
Back to this Example
23
Report the output relation O(CustomerName, Num_Loans, Num_Accounts) only for customers who have loans and accounts
SELECT D.customer_name, Num_Loan, Num_Acc FROM ( Select customer_name, count(*) As Num_Acc From Depositor Group By customer_name) As D,
( Select customer_name, count(*) As Num_Loan From Borrower Group By customer_name) As B WHERE D.customer_name = B.customer_name;
![Page 24: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/24.jpg)
Nested Subquery in WHERE Clause
l Since the predicates has = : l The inner statement must return one record with one column l In this case, DBMS will automatically convert the relation to a
single scalar value l Otherwise an error is generated
24
SELECT * FROM Student WHERE pNumber =
(SELECT pNumber FROM Professor WHERE pName = ‘Mike’);
1- Execute this statement first to get the pNumber (inner SELECT)
2- Then, execute this statement once pNumber from the first step is known (outer SELECT)
![Page 25: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/25.jpg)
CS3431
Example: Subqueries Retuning Scalar Value
sNumber sName address pNum
1 Dave 320FL 1
2 Greg 320FL 1
3 Matt 320FL 2
Student pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName 1 Dave 2 Greg
Select students of professor ‘MM’ SELECT sNumber, sName FROM Student WHERE pNum =
(SELECT pNumber FROM Professor WHERE pName=‘MM’);
![Page 26: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/26.jpg)
SubQuery Returning a Relation (General Case)
l Predicates may include any of (OP above) : l s in R à True if tuple s appears in R l s not in R à True if tuple s does not appear in R l s = R à R must return a single value (otherwise invalid op)
26
SELECT sNumber, sName FROM Student WHERE pNum OP
(SELECT pNumber FROM Professor WHERE pName=‘MM’);
Inner Select (R)
Outer Select (S)
![Page 27: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/27.jpg)
CS3431
Example 1: Subqueries Returning Relations
sNumber sName address pNum
1 Dave 320FL 1
2 Greg 320FL 1
3 Matt 320FL 2
4 Sam 30IN 3
Student pNumber pName address
1 MM 141FL
2 ER 201FL
3 XY 30WA
Professor
sNumber sName 1 Dave 2 Greg 3 Matt
Select students of professors with address like ‘%FL’ SELECT sNumber, sName FROM Student WHERE pNum IN
(SELECT pNumber FROM Professor WHERE address Like ‘%FL’);
![Page 28: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/28.jpg)
CS3431
Example 3: Subqueries
sID courseID … …
1 CS101
2 CS300
1 CS202
4 CS500
4 CS203
1 CS303
Registration è R Q: Find the student ID taking the largest number of courses
sID CNT
1 3
2 1
4 2
SELECT sID, count(courseID) as CNT FROM R Group By sID;
Step 1
![Page 29: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/29.jpg)
CS3431
Example 3: Subqueries
sID courseID … …
1 CS101
2 CS300
1 CS202
4 CS500
4 CS203
1 CS303
Registration è R Q: Find the student ID taking the largest number of courses
SELECT sID, count(courseID) as CNT FROM R Group By sID Having count(courseID) =
( SELECT Max(CNT) As Max From (SELECT count(courseID) As CNT
FROM R Group By sID) q
) CNT
3
1
2
Step 2
Max
3
sID CNT
1 3
sID CNT
1 3
2 1
4 2
![Page 30: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/30.jpg)
Comparison Using ALL and ANY
l We took: Exists, IN, NOT IN
l s > ALL R à True if s > all values in R l s > ANY R à True if s > any value in R l ‘>’ can be any of the other comparison operators, e.g., <, <=, >=, =, <> l R must be relation with single column
30
SELECT sNumber, sName FROM Student WHERE pNum OP
(SELECT pNumber FROM Professor WHERE pName=‘MM’);
Inner Select (R)
Outer Select (S)
![Page 31: SQL: Structured Query Languageweb.cs.wpi.edu/~cs3431/c15/lectures/Week 5/sqlQueries3.pdf · SQL: Structured Query Language Instructor: Mohamed Eltabakh meltabakh@cs.wpi.edu 1 Part](https://reader036.vdocuments.net/reader036/viewer/2022063016/5fd429acd9a6f77ac205ca0c/html5/thumbnails/31.jpg)
Example
sNumber sName address pNum
1 Dave 320FL 1
2 Greg 320FL 1
3 Matt 320FL 2
4 Sam 30IN 3
Student pNumber pName address
1 MM 141FL
2 ER 201FL
3 XY 30WA
Professor
sNumber sName 3 Matt 4 Sam
SELECT sNumber, sName FROM Student WHERE pNum >= ALL
(SELECT pNumber FROM Professor WHERE address Like ‘%FL’);
This inner select returns 1 , 2