Nov 24, 2003Murali Mani SQL B term 2004: lecture 12.

27
Nov 24, 2003 Murali 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

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

Project

SELECT sNumber, sName

FROM Student

(sNumber, sName) (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.

Nov 24, 2003 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]