24
CS3431 SQL : Query Language Part II

SQL : Query Language

  • Upload
    kipling

  • View
    88

  • Download
    0

Embed Size (px)

DESCRIPTION

SQL : Query Language. Part II. Sorting: ORDER BY clause. SELECT * FROM Student WHERE sNumber >= 1 ORDER BY sNumber, sName.  (sNumber, sName) ( (sNumber >= 1) (Student)). Subqueries. Subquery returns a relation Nest subqueries into WHERE clause Nest subqueries into FROM clause. - PowerPoint PPT Presentation

Citation preview

Page 1: SQL : Query Language

CS3431

SQL : Query Language

Part II

Page 2: SQL : Query Language

CS3431

Sorting: ORDER BY clause

SELECT *

FROM Student

WHERE sNumber >= 1

ORDER BY sNumber, sName

(sNumber, sName) ( (sNumber >= 1) (Student))

Page 3: SQL : Query Language

CS3431

Subqueries

Subquery returns a relation

Nest subqueries into WHERE clause

Nest subqueries into FROM clause

Page 4: SQL : Query Language

CS3431

SubqueriesSELECT * 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.

Page 5: SQL : Query Language

CS3431

Subqueries - Example

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

SELECT * FROM StudentWHERE professor =

(SELECT pNameFROM ProfessorWHERE pNumber=1)

Page 6: SQL : Query Language

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)

Page 7: SQL : Query Language

CS3431

Subqueries - Example

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

SELECT * FROM Student

WHERE (sNumber, professor) IN

(SELECT pNumber, pName

FROM Professor)

sNumber sName address professor

1 Dave 320FL MM

Page 8: SQL : Query Language

CS3431

Subqueries: EXISTS

SELECT * FROM Student

WHERE EXISTS

(SELECT pName FROM Professor

WHERE Student.professor=pName)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address

professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Page 9: SQL : Query Language

CS3431

Subqueries with negation

SELECT * FROM Student

WHERE (sNumber, professor) NOT IN

(SELECT pNumber, pName

FROM Professor)

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

sNumber sName address professor

2 Greg 320FL MM

3 Matt 320FL ER

Page 10: SQL : Query Language

CS3431

Subqueries with negation

SELECT * FROM Student

WHERE NOT EXISTS

(SELECT pName FROM Professor

WHERE Student.professor=pName)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

Page 11: SQL : Query Language

CS3431

Subqueries: ALL, ANY

Page 12: SQL : Query Language

CS3431

Subqueries: ALL - Example

SELECT * FROM Student

WHERE sNumber > ALL

(SELECT pNumber

FROM Professor)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

3 Matt 320FL ER

Page 13: SQL : Query Language

CS3431

Subqueries: ANY - Example

SELECT * FROM Student

WHERE sNumber = ANY

(SELECT pNumber

FROM Professor)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

Page 14: SQL : Query Language

CS3431

Subqueries: NOT ALL - Example

SELECT * FROM Student

WHERE NOT sNumber > ALL

(SELECT pNumber

FROM Professor)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

Page 15: SQL : Query Language

CS3431

Subqueries: NOT ANY - Example

SELECT * FROM Student

WHERE NOT sNumber = ANY

(SELECT pNumber

FROM Professor)

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

3 Matt 320FL ER

Page 16: SQL : Query Language

CS3431

Subqueries: Correlation

Page 17: SQL : Query Language

CS3431

Subqueries in FROM clause

SELECT sName, pNameFROM Student,

(SELECT * FROM Professor WHERE pNumber=1)

WHERE professor=pName;

pNumber pName address

1 MM 141FL

2 ER 201FL

Professor

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

sName pName

Dave MM

Greg MM

Page 18: SQL : Query Language

CS3431

Duplicate Elimination

SELECT DISTINCT *

FROM Student;

(Student)

SELECT DISTINCT address

FROM Student

WHERE sNumber >= 1;

( (address) ( (sNumber >= 1) (Student)))

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

address

320FL

Page 19: SQL : Query Language

CS3431

Aggregation + GroupBy

Page 20: SQL : Query Language

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

Page 21: SQL : Query Language

CS3431

GroupingSELECT COUNT (sName) as cnum FROM Student GROUP BY address;

(COUNT (sName) as snum) ( (address, COUNT (sName)) (Student))

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

Student

COUNT (sName)

3

Page 22: SQL : Query Language

CS3431

GroupingSELECT address, COUNT (sNumber)

FROM Student

WHERE sNumber > 1

GROUP BY address

HAVING COUNT (sNumber) > 1;

sNumber sName address professor

1 Dave 320FL MM

2 Greg 320FL MM

3 Matt 320FL ER

4 Ben 300FL ER

Student

address COUNT (sNumber)

320FL 2

Page 23: SQL : Query Language

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.

Page 24: SQL : Query Language

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]