ppt

advertisement
SQL
Murali Mani
SELECT-FROM-WHERE
SELECT *
FROM Student
WHERE sName=“Greg”
AND address=“320 FL”
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
sNumber
sName
address
professor
2
Greg
320FL
MM
 (sName=“Greg” AND address=“320 FL”) (Student)
Murali Mani
Project
SELECT sNumber, sName
FROM Student
Student
sNumber
sName
address
professor
sNumber
sName
1
Dave
320FL
MM
1
Dave
2
Greg
320FL
MM
2
Greg
3
Matt
320FL
ER
3
Matt
 (sNumber, sName) (Student)
Murali Mani
Extended Projection
SELECT sNumber || sName AS info
FROM Student
WHERE address=“320 FL”
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
info
1Dave
2Greg
3Matt
 (sNumber||sNameinfo) ( (address=“320 FL”) (Student))
Murali Mani
SQL and Relational Algebra
In short,  L ( C (R)) becomes
SELECT L
FROM R
WHERE C
Murali Mani
Renaming
SELECT s1.sNumber AS num
FROM Student S1
WHERE s1.sNumber >= 1;
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
num
1
2
3
 (s1.sNumbernum) ( (s1.sNumber >= 1) ( S1 (Student)))
Murali Mani
String operators




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’
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.
Murali 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.
Murali Mani
UNION, INTERSECT, EXCEPT
(SELECT sName FROM Student)
EXCEPT
(SELECT sName FROM Student
WHERE address=‘320 FL’)


UNION, INTERSECT, EXCEPT have set
semantics.
For bag semantics, use UNION ALL,
INTERSECT ALL, EXCEPT ALL
Murali Mani
EXCEPT - Example
(SELECT sName FROM Student)
EXCEPT
(SELECT sName FROM Student
WHERE address=‘320 FL’)
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
4
Matt
300FL
ER
sNumber
Murali Mani
sName
address professor
Joins
SELECT sName
FROM Student, Professor
WHERE pName=‘MM’ AND pNumber=professor;
(sName)(Student ⋈(pName=‘MM’ and pNumber=professor) Professor)
Murali Mani
Joins - example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
1
2
Greg
320FL
1
3
Matt
320FL
2
SELECT sName
FROM Student, Professor
WHERE pName=‘MM’
AND pNumber=professor;
Murali Mani
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sName
Dave
Greg
Cross Product (Cartesian
Product)
SELECT *
FROM Student CROSS JOIN Professor;
Student X Professor
can also be written as:
SELECT *
FROM Student, Professor
Murali Mani
Cross Product - Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
1
2
Greg
320FL
1
3
Matt
320FL
2
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
professor
pNumber
pName
address
1
Dave
320FL
1
1
MM
141FL
1
Dave
320FL
1
2
ER
201FL
2
Greg
320FL
1
1
MM
141FL
2
Greg
320FL
1
2
ER
201FL
3
Matt
320FL
2
1
MM
141FL
3
Matt
320FL
2
2
ER
201FL
Murali Mani
Theta Join
SELECT *
FROM Student JOIN Professor
ON professor=pNumber;
Student ⋈(professor=pNumber) Professor
SELECT *
FROM Student, Professor
WHERE professor=pNumber;
Murali Mani
Theta Join Example
sNumber
sName
address
professor
pNumber
pName
address
1
Dave
320FL
1
1
MM
141FL
2
Greg
320FL
1
1
MM
141FL
3
Matt
320FL
2
2
ER
201FL
Murali Mani
Natural Join
SELECT *
FROM Student NATURAL JOIN Professor
(Note: This requires the columns on which
the join should be done should have the
same names for Student and Professor).
Student ⋈ Professor
Murali Mani
Natural Join - Example
Student
Professor
sNumber
sName
address
pNumber
1
Dave
320FL
1
2
Greg
320FL
1
3
Matt
320FL
2
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
pNumber
pName
address
1
Dave
320FL
1
MM
141FL
2
Greg
320FL
1
MM
141FL
3
Matt
320FL
2
ER
201FL
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
Murali Mani
Outer Joins
SELECT * FROM
Student NATURAL RIGHT OUTER JOIN Professor
Student ⋈oR Professor
Murali Mani
Outer Joins - Example
Student
Professor
sNumber
sName
address
pNumber
1
Dave
320FL
1
2
Greg
320FL
1
3
Matt
320FL
2
4
Ben
320FL
4
pNumber
pName
address
1
MM
141FL
2
ER
201FL
3
MW
168FL
sNumber
sName
address
pNumber
pName
address
1
Dave
320FL
1
MM
141FL
2
Greg
320FL
1
MM
141FL
3
Matt
320FL
2
ER
201FL
4
Ben
320FL
4
Null
Null
Null
Null
Null
3
MW
168FL
Murali Mani
Sorting: ORDER BY clause
SELECT *
FROM Student
WHERE sNumber >= 1
ORDER BY sNumber, sName
 (sNumber, sName) ( (sNumber >= 1) (Student))
Murali 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.
Murali Mani
Subqueries - Example
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE professor =
(SELECT pName
FROM Professor
WHERE pNumber=1)
Professor
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
Murali Mani
Subqueries


We can use IN, EXISTS (also NOT IN, NOT
EXISTS)
ALL, ANY can be used with comparisons
SELECT * FROM Student
WHERE (sNumber, professor) IN
(SELECT pNumber, pName
FROM Professor)
Murali Mani
Subqueries - Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE (sNumber, professor) IN
(SELECT pNumber, pName
FROM Professor)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
professor
1
Dave
320FL
MM
Murali Mani
Subqueries: EXISTS
Professor
SELECT * FROM Student
WHERE EXISTS
(SELECT pName FROM Professor
WHERE Student.professor=pName)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
sNumber
sName
address
professor
2
Greg
320FL
MM
1
Dave
320FL
MM
3
Matt
320FL
ER
2
Greg
320FL
MM
3
Matt
320FL
ER
Murali Mani
Subqueries with negation
SELECT * FROM Student
WHERE (sNumber, professor) NOT IN
(SELECT pNumber, pName
FROM Professor)
Professor
pNumber
pName
address
1
MM
141FL
2
ER
201FL
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
sNumber
sName
2
Greg
320FL
MM
3
Matt
320FL
ER
Murali Mani
address professor
Subqueries with negation
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
pNumber
pName
address
1
MM
141FL
2
ER
201FL
SELECT * FROM Student
WHERE NOT EXISTS
(SELECT pName FROM Professor
WHERE Student.professor=pName)
sNumber
sName
Murali Mani
address
professor
Subqueries: ALL, ANY
SELECT * FROM Student
WHERE sNumber > ALL
(SELECT pNumber FROM Professor)
SELECT * FROM Student
WHERE sNumber = ANY
(SELECT pNumber FROM Professor)
Murali Mani
Subqueries: ALL - Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE sNumber > ALL
(SELECT pNumber
FROM Professor)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
3
Matt
Murali Mani
address professor
320FL
ER
Subqueries: ANY - Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE sNumber = ANY
(SELECT pNumber
FROM Professor)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
Murali Mani
Subqueries: NOT ALL Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE NOT sNumber > ALL
(SELECT pNumber
FROM Professor)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
Murali Mani
Subqueries: NOT ANY Example
Student
Professor
sNumber
sName
address
professor
1
Dave
320FL
MM
2
Greg
320FL
MM
3
Matt
320FL
ER
SELECT * FROM Student
WHERE NOT sNumber = ANY
(SELECT pNumber
FROM Professor)
pNumber
pName
address
1
MM
141FL
2
ER
201FL
sNumber
sName
3
Matt
Murali Mani
address professor
320FL
ER
Subqueries: Tip
Murali Mani
Subqueries in FROM clause
SELECT sName, pName
FROM Student,
(SELECT * FROM Professor
WHERE pNumber=1)
WHERE professor=pName;
Professor
pNumber
pName
address
1
MM
141FL
2
ER
201FL
Student
sNumber
sName
address
professor
1
Dave
320FL
MM
sName
pName
2
Greg
320FL
MM
Dave
MM
3
Matt
320FL
ER
Greg
MM
Murali Mani
Duplicate Elimination
SELECT DISTINCT address
FROM Student
WHERE sNumber >= 1;
SELECT DISTINCT *
FROM Student;

(Student)

( (address) ( (sNumber >= 1) (Student)))
Student
sNumber
sName
address
professor
address
1
Dave
320FL
MM
320FL
2
Greg
320FL
MM
3
Matt
320FL
ER
Murali 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
Murali Mani
Grouping
SELECT COUNT (sName)
FROM Student
GROUP BY address;
(COUNT (sName))
( (address, COUNT (sName)) (Student))
Student
sNumber
sName
address
professor
COUNT (sName)
1
Dave
320FL
MM
3
2
Greg
320FL
MM
3
Matt
320FL
ER
Murali Mani
Grouping
SELECT address, COUNT (sNumber)
FROM Student
WHERE sNumber > 1
GROUP BY address
HAVING COUNT (sNumber) > 1;
Student
sNumber
sName
address
professor
address
COUNT (sNumber)
1
Dave
320FL
MM
320FL
2
2
Greg
320FL
MM
3
Matt
320FL
ER
4
Ben
300FL
ER
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.
Murali 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]
Murali Mani
Download