Upload
kipling
View
88
Download
0
Embed Size (px)
DESCRIPTION
SQL : Query Language. Part II. Sorting: ORDER BY clause. SELECT * FROM Student WHERE sNumber >= 1 ORDER BY sNumber, sName. (sNumber, sName) ( (sNumber >= 1) (Student)). Subqueries. Subquery returns a relation Nest subqueries into WHERE clause Nest subqueries into FROM clause. - PowerPoint PPT Presentation
Citation preview
CS3431
SQL : Query Language
Part II
CS3431
Sorting: ORDER BY clause
SELECT *
FROM Student
WHERE sNumber >= 1
ORDER BY sNumber, sName
(sNumber, sName) ( (sNumber >= 1) (Student))
CS3431
Subqueries
Subquery returns a relation
Nest subqueries into WHERE clause
Nest subqueries into FROM clause
CS3431
SubqueriesSELECT * FROM Student
WHERE professor =
(SELECT pName
FROM Professor
WHERE pNumber=1)
Note: The inner subquery returns a relation, but SQL runtime ensures that subquery returns a relation with one column and with one row, otherwise it is a run-time error.
CS3431
Subqueries - Example
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
SELECT * FROM StudentWHERE professor =
(SELECT pNameFROM ProfessorWHERE pNumber=1)
CS3431
Subqueries
We can use IN, EXISTS, NOT IN, and NOT EXISTS
ALL, ANY can be used with comparisons
SELECT * FROM Student
WHERE (sNumber, professor) IN
(SELECT pNumber, pName
FROM Professor)
CS3431
Subqueries - Example
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
SELECT * FROM Student
WHERE (sNumber, professor) IN
(SELECT pNumber, pName
FROM Professor)
sNumber sName address professor
1 Dave 320FL MM
CS3431
Subqueries: EXISTS
SELECT * FROM Student
WHERE EXISTS
(SELECT pName FROM Professor
WHERE Student.professor=pName)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address
professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
CS3431
Subqueries with negation
SELECT * FROM Student
WHERE (sNumber, professor) NOT IN
(SELECT pNumber, pName
FROM Professor)
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
sNumber sName address professor
2 Greg 320FL MM
3 Matt 320FL ER
CS3431
Subqueries with negation
SELECT * FROM Student
WHERE NOT EXISTS
(SELECT pName FROM Professor
WHERE Student.professor=pName)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
CS3431
Subqueries: ALL, ANY
CS3431
Subqueries: ALL - Example
SELECT * FROM Student
WHERE sNumber > ALL
(SELECT pNumber
FROM Professor)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
3 Matt 320FL ER
CS3431
Subqueries: ANY - Example
SELECT * FROM Student
WHERE sNumber = ANY
(SELECT pNumber
FROM Professor)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
CS3431
Subqueries: NOT ALL - Example
SELECT * FROM Student
WHERE NOT sNumber > ALL
(SELECT pNumber
FROM Professor)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
CS3431
Subqueries: NOT ANY - Example
SELECT * FROM Student
WHERE NOT sNumber = ANY
(SELECT pNumber
FROM Professor)
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
3 Matt 320FL ER
CS3431
Subqueries: Correlation
CS3431
Subqueries in FROM clause
SELECT sName, pNameFROM Student,
(SELECT * FROM Professor WHERE pNumber=1)
WHERE professor=pName;
pNumber pName address
1 MM 141FL
2 ER 201FL
Professor
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
sName pName
Dave MM
Greg MM
CS3431
Duplicate Elimination
SELECT DISTINCT *
FROM Student;
(Student)
SELECT DISTINCT address
FROM Student
WHERE sNumber >= 1;
( (address) ( (sNumber >= 1) (Student)))
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
address
320FL
CS3431
Aggregation + GroupBy
CS3431
Aggregation Functions
SELECT COUNT (*) FROM Student;
SELECT COUNT (sNumber) FROM Student;
SELECT MIN (sNumber) FROM Student;
SELECT MAX (sNumber) FROM Student;
SELECT SUM (sNumber) FROM Student;
SELECT AVG (sNumber) FROM Student;
We can have distinct such as:SELECT COUNT (DISTINCT sNumber) FROM Student
CS3431
GroupingSELECT COUNT (sName) as cnum FROM Student GROUP BY address;
(COUNT (sName) as snum) ( (address, COUNT (sName)) (Student))
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
Student
COUNT (sName)
3
CS3431
GroupingSELECT address, COUNT (sNumber)
FROM Student
WHERE sNumber > 1
GROUP BY address
HAVING COUNT (sNumber) > 1;
sNumber sName address professor
1 Dave 320FL MM
2 Greg 320FL MM
3 Matt 320FL ER
4 Ben 300FL ER
Student
address COUNT (sNumber)
320FL 2
CS3431
Aggregation and NULLs
NULLs are ignored in any aggregation; except COUNT (*)
However if the set of attributes to be grouped on has null values, then grouping is done on the null values as well.
CS3431
SQL Queries - Summary
SELECT [DISTINCT] a1, a2, …, an
FROM R1, R2, …, Rm
[WHERE C1]
[GROUP BY g1, g2, …, gl [HAVING C2]]
[ORDER BY o1, o2, …, oj]