1 it420: database management and organization sql part 3 7 february 2006 adina crăiniceanu adina
TRANSCRIPT
![Page 1: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/1.jpg)
1
IT420: Database Management and Organization
SQL part 37 February 2006
Adina Crăiniceanuwww.cs.usna.edu/~adina
![Page 2: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/2.jpg)
2
Announcements
Exam next Tuesday 2 hours Closed book/closed notes No computers Covers all material
Labs returned on Friday
![Page 3: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/3.jpg)
3
Previously
SQL DDL: Data Definition Language CREATE, DROP, ALTER
DML: Data Manipulation Language INSERT DELETE UPDATE SELECT
![Page 4: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/4.jpg)
4
Today
More about SELECT
![Page 5: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/5.jpg)
5
The SQL SELECT Statement
Basic SQL Query: SELECT [DISTINCT] column_name(s)
FROM table_name(s)
[WHERE conditions]
[ORDER BY some_column_names [ASC/DESC] ]
*Terms between [ ] are optional
![Page 6: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/6.jpg)
6
WHERE Clause Options
AND, OR IN, NOT IN, BETWEEN =, >, <, <>, >=
SELECT SNbFROM Students S, Enrolled EWHERE S.SNb = E.Nb AND
E.Cid NOT IN (‘ComSci’, ‘Math’)
![Page 7: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/7.jpg)
7
Calculations in SQL
Simple arithmetic Five SQL aggregate operators:
COUNT SUM AVG MIN MAX
![Page 8: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/8.jpg)
8
Find the age of the youngest student Students(Alpha, LName, FName, Class,
Age)
SELECT MIN(Age)
FROM Students
![Page 9: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/9.jpg)
9
Aggregate Operators
So far, aggregate operations applied to all (qualifying) rows
We want to apply them to each of several groups of rows
Students(Alpha, LName, SName, Class, Age) Find the age of the youngest student for each
class
![Page 10: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/10.jpg)
10
Example
Students(Alpha, LName, FName, Class, Age) Find the age of the youngest student for each
class
If class values go from 1 to 4 we can write 4 queries that look like this:
SELECT MIN (S.Age)
FROM Students S
WHERE S.Class = i
![Page 11: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/11.jpg)
11
GROUP-BY Clause
SELECT grouping_columns(s), aggregates
FROM table_name(s)
[WHERE conditions]
GROUP BY grouping_columns
SELECT Class, MIN(Age)
FROM Students
GROUP BY Class
![Page 12: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/12.jpg)
12
Conceptual Evaluation
SQL query semantics: Compute the cross-product of table_names Discard resulting rows if they fail conditions Delete columns that are not specified in SELECT Remaining rows are partitioned into groups by the
value of the columns in grouping-columns One answer row is generated per group
Note: Does not imply query will actually be evaluated this way!
![Page 13: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/13.jpg)
13
GROUP BY Exercise
Students(Alpha, LName, FName, Class, Age)
For each last name, find the number of students with same last name
![Page 14: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/14.jpg)
14
HAVING Clause
SELECT [grouping_columns(s), aggregates
FROM table_name(s)
[WHERE conditions]
GROUP BY grouping_columns
HAVING group_conditions
HAVING restricts the groups presented in the result
![Page 15: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/15.jpg)
15
Example
SELECT Class, MIN(Age)
FROM Students
WHERE MajDeptName = ‘ComSci’
GROUP BY Class
HAVING Class > 2
What does the query compute?
![Page 16: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/16.jpg)
16
Another GROUP BY Example
SKU_DATA(SKU, SKU_description, Buyer, Department)
SELECT Department, COUNT(*) AS
Dept_SKU_Count
FROM SKU_DATA
WHERE SKU <> 302000
GROUP BY Department
HAVING COUNT (*) > 1
ORDER BY Dept_SKU_Count;
![Page 17: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/17.jpg)
17
Select students with age higher than average SELECT *
FROM Students
WHERE Age > AVG(Age)
Illegal!
![Page 18: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/18.jpg)
18
Subqueries
SELECT *
FROM Students
WHERE Age > (SELECT AVG(Age)
FROM Students)
Second select is a subquery (or nested query) You can have subqueries in FROM or HAVING
clause also
![Page 19: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/19.jpg)
19
Subqueries Exercise
Students(Alpha, LName, FName, Class, Age) Enroll(Alpha, CourseID, Semester, Grade)
1. Find alpha for students enrolled in both ‘IT420’ and ‘IT334’
2. Find name of students enrolled in both ‘IT420’ and ‘IT334’
![Page 20: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/20.jpg)
20
Class Exercise
Students(Alpha, LName, FName, Class, Age)
Enroll(Alpha, CourseID, Semester, Grade)
Find the name of students enrolled in ‘IT420’ Usual way Use subqueries
![Page 21: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/21.jpg)
21
SELECT FName, LName
FROM Students S
WHERE S.Alpha IN
(SELECT Alpha
FROM Enroll E
WHERE E.CourseID = ‘IT420’)
![Page 22: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/22.jpg)
22
Correlated Subqueries
SELECT FName, LName
FROM Students S
WHERE EXISTS
(SELECT *
FROM Enroll E
WHERE E.CourseID = ‘IT420’
AND E.Alpha = S.Alpha)
![Page 23: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/23.jpg)
23
Subqueries versus Joins
Subqueries and joins both process multiple tables.
Subquery can only be used to retrieve data from the top table.
Join can be used to obtain data from any number of tables
Correlated subquery can do work that is not possible with joins.
![Page 24: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/24.jpg)
24
Class Exercise
What does this query compute: SELECT FName, LName
FROM Students S, Enroll E1, Enroll E2WHERE S.Alpha = E1.Alpha
AND S.Alpha = E2.AlphaAND E1.CourseID = ‘IT420’AND E2.CourseID = ‘IT344’
![Page 25: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/25.jpg)
25
JOIN ON Syntax Students(Alpha, LName, FName, Class, Age) Courses(CourseID, Description, Textbook) Enroll(Alpha, CourseID, Semester, Grade)
Find the names of students enrolled in ‘IT420’
SELECT LName, FNameFROM Students S JOIN Enroll C
ON S.Alpha = C.AlphaWHERE CourseID = ‘IT420’
Find the names of students enrolled in ‘Database Management’
![Page 26: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/26.jpg)
26
Multiple JOIN ON
Find the names of students enrolled in ‘Database Management’
SELECT LName, FNameFROMEnroll E JOIN Courses C
ON E.CourseID = C.CourseIDJOIN Students ON E.Alpha = S.Alpha
WHERE C.Description = ‘Database Management’
![Page 27: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/27.jpg)
27
Outer Joins
Find all students and courses in which they are enrolled
SELECT S.Alpha, S.LName, S.FName, E.CourseID
FROM Students S LEFT JOIN Enrolled E
ON S.Alpha = E.Alpha
![Page 28: 1 IT420: Database Management and Organization SQL part 3 7 February 2006 Adina Crăiniceanu adina](https://reader035.vdocuments.site/reader035/viewer/2022062314/5697bf751a28abf838c80732/html5/thumbnails/28.jpg)
28
Class Exercise
Students(Alpha, LName, FName, Class, Age)
Courses(CourseID, Description, Textbook) Enroll(Alpha, CourseID, Semester, Grade)
Find the age of youngest student older than 18, for each course with at least one such student enrolled in it