Nov 24, 2003Murali Mani SQL B term 2004: lecture 12
Nov 24, 2003Murali Mani SELECT-FROM-WHERE SELECT * FROM Student WHERE sName=“Greg” AND address=“320 FL” (sName=“Greg” AND address=“320 FL”) (Student)
Nov 24, 2003Murali Mani Project SELECT sNumber, sName FROM Student (sNumber, sName) (Student)
Nov 24, 2003Murali Mani Extended Projection SELECT sNumber || sName AS info FROM Student WHERE address=“320 FL” (sNumber||sName info) ( (address=‘320 FL’) (Student)) In short, L ( C (R)) becomes SELECT L FROM R WHERE C
Nov 24, 2003Murali Mani Renaming SELECT s1.sNumber as num FROM Student S1 WHERE s1.sNumber >= 1; (s1.sNumber num) ( (s1.sNumber >= 1) ( S1 (Student)))
Nov 24, 2003Murali Mani String comparison operators =,, <>, >=, <=: Based on lexicographic ordering. Concatenation operator: || ‘ represented in strings with two consecutive ‘ Pattern match: s LIKE p p = pattern % : any sequence of 0 or more characters - : matches 1 character Patterns can explicitly declare escape characters as: s LIKE ‘x%am%’ ESCAPE ‘x’
Nov 24, 2003Murali Mani Comparison with NULL values Arithmetic operations on NULL return NULL. Comparison operators on NULL return UNKNOWN. We can explicitly check whether a value is null or not, by IS NULL, IS NOT NULL.
Nov 24, 2003Murali Mani Truth table with UNKNOWN UNKNOWN AND TRUE = UNKNOWN UNKNOWN OR TRUE = TRUE UNKNOWN AND FALSE = FALSE UNKNOWN OR FALSE = UNKNOWN UNKNOWN AND UNKNOWN = UNKNOWN UNKNOWN OR UNKNOWN = UNKNOWN NOT UNKNOWN = UNKNOWN A WHERE clause is satisfied only when it evaluates to TRUE.
Nov 24, 2003Murali Mani UNION, INTERSECT, EXCEPT (SELECT sName FROM Student) EXCEPT (SELECT sName FROM Student WHERE address=‘320 FL’) UNION, INTERSECT, EXCEPT have set sematics. For bag semantics, use UNION ALL, INTERSECT ALL, EXCEPT ALL
Nov 24, 2003Murali Mani Joins SELECT sName FROM Student, Professor WHERE pName=‘MM’ AND pName=professor; (sName) (Student ⋈ (pName=‘MM’ and pname=professor) Professor)
Nov 24, 2003Murali Mani Cross Product (Cartesian Product) SELECT * FROM Student CROSS JOIN Professor; Student X Professor can also be written as: SELECT sNumber, sName, pNumber, pName FROM Student, Professor
Nov 24, 2003Murali Mani Theta Join SELECT * FROM Student JOIN Professor ON professor=pname; Student ⋈ (professor=pname) Professor SELECT sNumber, sName, pNumber, pName FROM Student, Professor WHERE professor=pName;
Nov 24, 2003Murali Mani Natural Join SELECT * FROM Student NATURAL JOIN Professor Student ⋈ Professor
Nov 24, 2003Murali Mani Outer Joins SELECT * FROM Student NATURAL FULL OUTER JOIN Professor Student ⋈ o Professor SELECT * FROM Student NATURAL LEFT OUTER JOIN Professor Student ⋈ o L Professor
Nov 24, 2003Murali Mani Outer Joins SELECT * FROM Student NATURAL RIGHT OUTER JOIN Professor Student ⋈ o R Professor
Nov 24, 2003Murali Mani Sorting: ORDER BY clause SELECT * FROM Student WHERE sNumber >= 1 ORDER BY sNumber, sName (sNumber, sName) ( (sNumber >= 1) (Student))
Nov 24, 2003Murali Mani 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 the subquery returns a relation with one column and with one row, otherwise it is a run-time error.
Nov 24, 2003Murali Mani Subqueries We can use IN, EXISTS, ALL, ANY can be used with comparisons SELECT * FROM Student WHERE (sNumber, professor) IN (SELECT pNumber, pName FROM Professor)
Nov 24, 2003Murali Mani Subqueries SELECT * FROM Student WHERE sNumber > ALL (SELECT pNumber FROM Professor)
Nov 24, 2003Murali Mani Subqueries SELECT * FROM Student WHERE EXISTS (SELECT pname FROM Professor WHERE Student.professor=pName)
Nov 24, 2003Murali Mani Subqueries with negation SELECT * FROM Student WHERE (sNumber, professor) NOT IN (SELECT pNumber, pName FROM Professor) For ALL, ANY, EXISTS, we can do SELECT * FROM Student WHERE NOT sNumber > ALL (SELECT pNumber FROM Professor)
Nov 24, 2003Murali Mani Subqueries in FROM clause SELECT sName, pName FROM Student, (SELECT * FROM Professor WHERE pNumber=1) WHERE professor=pName;
Nov 24, 2003Murali Mani Duplicate Elimination SELECT DISTINCT * FROM Student; (Student) SELECT DISTINCT address FROM Student WHERE sNumber >= 1;
Nov 24, 2003Murali Mani Aggregation 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
Nov 24, 2003Murali Mani Grouping SELECT COUNT (sName) FROM Student GROUP BY address; (COUNT (sName)) ( (address, COUNT (sName)) (Student)) SELECT COUNT (sName) FROM Student GROUP BY address HAVING COUNT (sNumber) >= 1;
Nov 24, 2003Murali Mani 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.
Nov 24, 2003Murali Mani 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]