240 likes | 384 Views
Dive into the complexities of SQL with this comprehensive guide covering sorting using the ORDER BY clause, the intricacies of subqueries within WHERE and FROM clauses, and various aggregation techniques. Learn to effectively use IN, EXISTS, NOT IN, and NOT EXISTS while handling duplicate elimination and NULL values in aggregations. Explore practical examples and queries involving students and professors to enhance your SQL skills and prepare for advanced database management concepts.
E N D
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
Subqueries SELECT * 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 Student SELECT * FROM Student WHERE professor = (SELECT pName FROM Professor WHERE pNumber=1) Professor 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 Student Professor SELECT * FROM Student WHERE (sNumber, professor) IN (SELECT pNumber, pName FROM Professor) CS3431
Subqueries: EXISTS Professor SELECT * FROM Student WHERE EXISTS (SELECT pName FROM Professor WHERE Student.professor=pName) Student CS3431
Subqueries with negation Professor SELECT * FROM Student WHERE (sNumber, professor) NOT IN (SELECT pNumber, pName FROM Professor) Student CS3431
Subqueries with negation Student Professor SELECT * FROM Student WHERE NOT EXISTS (SELECT pName FROM Professor WHERE Student.professor=pName) CS3431
Subqueries: ALL, ANY CS3431
Subqueries: ALL - Example Student Professor SELECT * FROM Student WHERE sNumber > ALL (SELECT pNumber FROM Professor) CS3431
Subqueries: ANY - Example Student Professor SELECT * FROM Student WHERE sNumber = ANY (SELECT pNumber FROM Professor) CS3431
Subqueries: NOT ALL - Example Student Professor SELECT * FROM Student WHERE NOT sNumber > ALL (SELECT pNumber FROM Professor) CS3431
Subqueries: NOT ANY - Example Student Professor SELECT * FROM Student WHERE NOT sNumber = ANY (SELECT pNumber FROM Professor) CS3431
Subqueries: Correlation CS3431
Subqueries in FROM clause Professor SELECT sName, pName FROM Student, (SELECT * FROM Professor WHERE pNumber=1) WHERE professor=pName; Student CS3431
Duplicate Elimination SELECT DISTINCT address FROM Student WHERE sNumber >= 1; SELECT DISTINCT * FROM Student; • (Student) • ( (address) ( (sNumber >= 1) (Student))) Student 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
Grouping SELECT COUNT (sName) as cnum FROM Student GROUP BY address; • (COUNT (sName) as snum) ( (address, COUNT (sName)) (Student)) Student CS3431
Grouping SELECT address, COUNT (sNumber) FROM Student WHERE sNumber > 1 GROUP BY address HAVING COUNT (sNumber) > 1; Student 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] CS3431