Nov 24, 2003Murali Mani SQL B term 2004: lecture 12.
-
date post
20-Dec-2015 -
Category
Documents
-
view
214 -
download
0
Transcript of Nov 24, 2003Murali Mani SQL B term 2004: lecture 12.
Nov 24, 2003 Murali Mani
SELECT-FROM-WHERE
SELECT *
FROM Student
WHERE sName=“Greg” AND address=“320 FL”
(sName=“Greg” AND address=“320 FL”) (Student)
Nov 24, 2003 Murali Mani
Extended ProjectionSELECT sNumber || sName AS infoFROM StudentWHERE address=“320 FL”
(sNumber||sNameinfo) ( (address=‘320 FL’) (Student))
In short, L ( C (R)) becomesSELECT LFROM RWHERE C
Nov 24, 2003 Murali Mani
Renaming
SELECT s1.sNumber as num
FROM Student S1
WHERE s1.sNumber >= 1;
(s1.sNumbernum) ( (s1.sNumber >= 1) ( S1 (Student)))
Nov 24, 2003 Murali 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, 2003 Murali 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, 2003 Murali Mani
Truth table with UNKNOWN
UNKNOWN AND TRUE = UNKNOWNUNKNOWN OR TRUE = TRUEUNKNOWN AND FALSE = FALSEUNKNOWN OR FALSE = UNKNOWNUNKNOWN AND UNKNOWN = UNKNOWNUNKNOWN OR UNKNOWN = UNKNOWNNOT UNKNOWN = UNKNOWN
A WHERE clause is satisfied only when it evaluates to TRUE.
Nov 24, 2003 Murali 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, 2003 Murali Mani
Joins
SELECT sName
FROM Student, Professor
WHERE pName=‘MM’ AND pName=professor;
(sName)(Student ⋈(pName=‘MM’ and pname=professor) Professor)
Nov 24, 2003 Murali 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, 2003 Murali 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, 2003 Murali Mani
Natural Join
SELECT *
FROM Student NATURAL JOIN Professor
Student ⋈ Professor
Nov 24, 2003 Murali Mani
Outer Joins
SELECT * FROM
Student NATURAL FULL OUTER JOIN Professor
Student ⋈o Professor
SELECT * FROM
Student NATURAL LEFT OUTER JOIN Professor
Student ⋈oL Professor
Nov 24, 2003 Murali Mani
Outer Joins
SELECT * FROM
Student NATURAL RIGHT OUTER JOIN Professor
Student ⋈oR Professor
Nov 24, 2003 Murali Mani
Sorting: ORDER BY clause
SELECT *
FROM Student
WHERE sNumber >= 1
ORDER BY sNumber, sName
(sNumber, sName) ( (sNumber >= 1) (Student))
Nov 24, 2003 Murali Mani
SubqueriesSELECT * FROM StudentWHERE professor =
(SELECT pnameFROM ProfessorWHERE 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, 2003 Murali 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, 2003 Murali Mani
Subqueries
SELECT * FROM Student
WHERE sNumber > ALL
(SELECT pNumber FROM Professor)
Nov 24, 2003 Murali Mani
Subqueries
SELECT * FROM Student
WHERE EXISTS
(SELECT pname FROM Professor
WHERE Student.professor=pName)
Nov 24, 2003 Murali 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, 2003 Murali Mani
Subqueries in FROM clause
SELECT sName, pName
FROM Student, (SELECT * FROM Professor
WHERE pNumber=1)
WHERE professor=pName;
Nov 24, 2003 Murali Mani
Duplicate Elimination
SELECT DISTINCT *
FROM Student;
(Student)
SELECT DISTINCT address
FROM Student
WHERE sNumber >= 1;
Nov 24, 2003 Murali Mani
AggregationSELECT 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, 2003 Murali 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, 2003 Murali 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.