sql - home | suanlabsuanlab.com/assets/lectures/dbe/04.pdf•interactive via gui or prompt, or...
TRANSCRIPT
SQL
Suan Lee
SQL - Suan Lee 2
Introduction to SQL
• “S.Q.L.” or “sequel”
• Supported by all major commercial database systems
• Standardized – many new features over time
• Interactive via GUI or prompt, or embedded in programs
• Declarative, based on relational algebra
SQL - Suan Lee 3
Data Definition Language (DDL)• CREATE TABLE …
• DROP TABLE …
Data Manipulation Language (DML)• SELECT …
• INSERT …
• DELETE …
• UPDATE …
Other Commands
indexes, constraints, views, triggers, transactions, authorization, …
SQL - Suan Lee 4
The Basic SELECT Statement
SQL - Suan Lee 5
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
The Basic SELECT Statement
ΠA1, …, An(σ condition(R1×…×Rm)
SQL - Suan Lee 6
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
• “S.Q.L.” or “sequel”
• Supported by all major commercial database systems
• Standardized – many new features over time
• Interactive via GUI or prompt, or embedded in programs
• Declarative, based on relational algebra
SQL - Suan Lee 7
SQL - Suan Lee 8
Basic SELECT Statement
SQL - Suan Lee 9
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Basic SELECT Statement
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 10
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
• Colleges
SQL - Suan Lee 11
• Students
SQL - Suan Lee 12
• Apply
SQL - Suan Lee 13
SQL Result
SQL - Suan Lee 14
SELECT sID, sName, GPAFROM StudentWHERE GPA > 3.6;
SQL Result
SQL - Suan Lee 15
SELECT sID, sNameFROM StudentWHERE GPA > 3.6;
SQL Result
SQL - Suan Lee 16
SELECT sName, majorFROM Student, ApplyWHERE Student.sID = Apply.sID;
SQL Result
SQL - Suan Lee 17
SELECT sName, majorFROM Student, ApplyWHERE Student.sID = Apply.sID;
duplicate values
duplicate valuesduplicate values
duplicate values
duplicate values
SQL Result
SQL - Suan Lee 18
SELECT DISTINCT sName, majorFROM Student, ApplyWHERE Student.sID = Apply.sID;
SQL Result
SQL - Suan Lee 19
SELECT sName, GPA, decisionFROM Student, ApplyWHERE Student.sID = Apply.sIDAND sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
SQL
SQL - Suan Lee 20
SELECT cNameFROM College, ApplyWHERE College.cName =
Apply.cNameAND enrollment > 20000AND major = 'CS';
SQL Result
SQL - Suan Lee 21
SELECT cNameFROM College, ApplyWHERE College.cName =
Apply.cNameAND enrollment > 20000AND major = 'CS';
SQL Result
SQL - Suan Lee 22
SELECT College.cNameFROM College, ApplyWHERE College.cName =
Apply.cNameAND enrollment > 20000AND major = 'CS';
SQL Result
SQL - Suan Lee 23
SELECT DISTINCT College.cNameFROM College, ApplyWHERE College.cName =
Apply.cNameAND enrollment > 20000AND major = 'CS';
SQL
SQL - Suan Lee 24
SELECT Student.sID, sName, GPA, Apply.cName, enrollment
FROM Student, College, ApplyWHERE Apply.sID = Student.sIDAND Apply.cName =
College.cName;
SQL Result
SQL - Suan Lee 25
SELECT Student.sID, sName, GPA, Apply.cName, enrollment
FROM Student, College, ApplyWHERE Apply.sID = Student.sIDAND Apply.cName =
College.cName;
SQL Result
SQL - Suan Lee 26
SELECT Student.sID, sName, GPA, Apply.cName, enrollment
FROM Student, College, ApplyWHERE Apply.sID = Student.sIDAND Apply.cName =
College.cNameORDER BY GPA DESC;
SQL Result
SQL - Suan Lee 27
SELECT Student.sID, sName, GPA, Apply.cName, enrollment
FROM Student, College, ApplyWHERE Apply.sID = Student.sIDAND Apply.cName =
College.cNameORDER BY GPA DESC, enrollment;
SQL Result
SQL - Suan Lee 28
SELECT sID, majorFROM ApplyWHERE major LIKE '%bio%';
SQL Result
SQL - Suan Lee 29
SELECT *FROM ApplyWHERE major LIKE '%bio%';
SQL
SQL - Suan Lee 30
SELECT *FROM Student, College;
SQL Result
SQL - Suan Lee 31
SELECT *FROM Student, College;
…
SQL
SQL - Suan Lee 32
SELECT sID, sName, GPA,sizeHS, GPA*(sizeHS/1000.0)
FROM Student;
SQL Result
SQL - Suan Lee 33
SELECT sID, sName, GPA,sizeHS, GPA*(sizeHS/1000.0)
FROM Student;
SQL Result
SQL - Suan Lee 34
SELECT sID, sName, GPA,sizeHS, GPA*(sizeHS/1000.0)AS scaledGPA
FROM Student;
SQL - Suan Lee 35
Table Variables and Set Operators
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 36
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Table variables
Set Operators: Union, Intersect, Except
SQL Result
SQL - Suan Lee 37
SELECT Student.sID, sName,GPA, Apply.cName,enrollment
FROM Student, College, Apply
WHERE Apply.sID = Student.sID
AND Apply.cName = College.cName;
SQL Result
SQL - Suan Lee 38
SELECT S.sID, sName,GPA, A.cName,enrollment
FROM Student S, College C, Apply A
WHERE A.sID = S.sIDAND A.cName = C.cName;
SQL
SQL - Suan Lee 39
SELECT S1.sID, S1.sName,S1.GPA, S2.sID, S2.sName,S2.GPA
FROM Student S1, Student S2WHERE S1.GPA = S2.GPA;
SQL Result
SQL - Suan Lee 40
SELECT S1.sID, S1.sName,S1.GPA, S2.sID, S2.sName,S2.GPA
FROM Student S1, Student S2WHERE S1.GPA = S2.GPA;
…
SQL Result
SQL - Suan Lee 41
SELECT S1.sID, S1.sName,S1.GPA, S2.sID, S2.sName,S2.GPA
FROM Student S1, Student S2WHERE S1.GPA = S2.GPAAND S1.sID <> S2.sID;
SQL Result
SQL - Suan Lee 42
SELECT S1.sID, S1.sName,S1.GPA, S2.sID, S2.sName,S2.GPA
FROM Student S1, Student S2WHERE S1.GPA = S2.GPAAND S1.sID < S2.sID;
SQL Result
SQL - Suan Lee 43
SELECT cNameFROM CollegeUNIONSELECT sNameFROM Student;
SQL Result
SQL - Suan Lee 44
SELECT cName AS nameFROM CollegeUNIONSELECT sName AS nameFROM Student;
SQL Result
SQL - Suan Lee 45
SELECT cName AS nameFROM CollegeUNION ALLSELECT sName AS nameFROM Student;
SQL Result
SQL - Suan Lee 46
SELECT cName AS nameFROM CollegeUNION ALLSELECT sName AS nameFROM StudentORDER BY name;
SQL Result
SQL - Suan Lee 47
SELECT sIDFROM ApplyWHERE major = 'CS'INTERSECTSELECT sIDFROM ApplyWHERE major = 'EE‘;
SQL Result
SQL - Suan Lee 48
SELECT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major = 'EE';
SQL Result
SQL - Suan Lee 49
SELECT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major = 'EE';
SQL Result
SQL - Suan Lee 50
SELECT DISTINCT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major = 'EE';
SQL
SQL - Suan Lee 51
SELECT sIDFROM ApplyWHERE major = 'CS'MINUSSELECT sIDFROM ApplyWHERE major = 'EE‘;
SQL Result
SQL - Suan Lee 52
SELECT sIDFROM ApplyWHERE major = 'CS'MINUSSELECT sIDFROM ApplyWHERE major = 'EE‘;
SQL
SQL - Suan Lee 53
SELECT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major <> 'EE';
SQL
SQL - Suan Lee 54
SELECT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major <> 'EE';
Result
SQL
SQL - Suan Lee 55
SELECT DISTINCT A1.sIDFROM Apply A1, Apply A2WHERE A1.sID = A2.sIDAND A1.major = 'CS'AND A2.major <> 'EE';
Result
SQL - Suan Lee 56
Subqueries in WHERE
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 57
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Expressions involving “subqueries”: nested
Select statements
SQL
SQL - Suan Lee 58
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
SQL
SQL - Suan Lee 59
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
Result
SQL
SQL - Suan Lee 60
SELECT sID, sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SQL
SQL - Suan Lee 61
SELECT sID, sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 62
SELECT Student.sID, sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 63
SELECT Student.sID, sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
SQL - Suan Lee 64
SQL
SQL - Suan Lee 65
SELECT Student.sID, sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 66
SELECT DISTINCT Student.sID,sName
FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 67
SELECT sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
Result
SQL
SQL - Suan Lee 68
SELECT sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SQL
SQL - Suan Lee 69
SELECT sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 70
SELECT DISTINCT sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 71
SELECT DISTINCT sNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SELECT DISTINCT Student.sID,sName
FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SQL
SQL - Suan Lee 72
SELECT GPAFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
Result
SQL
SQL - Suan Lee 73
SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 74
SELECT DISTINCT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SQL
SQL - Suan Lee 75
SELECT DISTINCT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
Result
SELECT GPAFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
);
SQL
SQL - Suan Lee 76
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND sID NOT IN(SELECT sIDFROM ApplyWHERE major = 'EE'
);
SQL
SQL - Suan Lee 77
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND sID NOT IN(SELECT sIDFROM ApplyWHERE major = 'EE'
);
Result
SQL
SQL - Suan Lee 78
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND NOT sID IN(SELECT sIDFROM ApplyWHERE major = 'EE'
);
Result
SQL
SQL - Suan Lee 79
SELECT cName, stateFROM College C1WHERE EXISTS(SELECT *FROM College C2WHERE C2.state = C1.state
);
SQL
SQL - Suan Lee 80
SELECT cName, stateFROM College C1WHERE EXISTS(SELECT *FROM College C2WHERE C2.state = C1.state
);
Result
SQL
SQL - Suan Lee 81
SELECT cName, stateFROM College C1WHERE EXISTS(SELECT *FROM College C2WHERE C2.state = C1.stateAND C1.cName <> C2.cName
);
SQL
SQL - Suan Lee 82
SELECT cName, stateFROM College C1WHERE EXISTS(SELECT *FROM College C2WHERE C2.state = C1.stateAND C1.cName <> C2.cName
);
Result
SQL
SQL - Suan Lee 83
SELECT cNameFROM College C1WHERE NOT EXISTS(SELECT *FROM College C2WHERE C2.enrollment >
C1.enrollment);
SQL
SQL - Suan Lee 84
SELECT cNameFROM College C1WHERE NOT EXISTS(SELECT *FROM College C2WHERE C2.enrollment >
C1.enrollment);
Result
SQL
SQL - Suan Lee 85
SELECT sNameFROM Student S1WHERE NOT EXISTS(SELECT *FROM Student S2WHERE S2.GPA > S1.GPA
);
SQL
SQL - Suan Lee 86
SELECT sNameFROM Student S1WHERE NOT EXISTS(SELECT *FROM Student S2WHERE S2.GPA > S1.GPA
);
Result
SQL
SQL - Suan Lee 87
SELECT sName, GPAFROM Student S1WHERE NOT EXISTS(SELECT *FROM Student S2WHERE S2.GPA > S1.GPA
);
Result
SQL
SQL - Suan Lee 88
SELECT S1.sName, S1.GPAFROM Student S1, Student S2WHERE S1.GPA > S2.GPA;
SQL
SQL - Suan Lee 89
SELECT S1.sName, S1.GPAFROM Student S1, Student S2WHERE S1.GPA > S2.GPA;
Result
…
SQL
SQL - Suan Lee 90
SELECT DISTINCT S1.sName, S1.GPAFROM Student S1, Student S2WHERE S1.GPA > S2.GPA;
Result
SQL
SQL - Suan Lee 91
SELECT sName, GPAFROM StudentWHERE GPA >= ALL(SELECT GPAFROM Student
);
SQL
SQL - Suan Lee 92
SELECT sName, GPAFROM StudentWHERE GPA >= ALL(SELECT GPAFROM Student
);
Result
SQL
SQL - Suan Lee 93
SELECT sNameFROM Student S1WHERE GPA > ALL(SELECT GPAFROM Student S2WHERE S2.sID <> S1.sID
);
SQL
SQL - Suan Lee 94
SELECT sNameFROM Student S1WHERE GPA > ALL(SELECT GPAFROM Student S2WHERE S2.sID <> S1.sID
);
Result
SQL
SQL - Suan Lee 95
SELECT cNameFROM College C1WHERE enrollment > ALL(SELECT enrollmentFROM College C2WHERE C2.cName <> C1.cName
);
Result
SQL
SQL - Suan Lee 96
SELECT cNameFROM College C1WHERE NOT enrollment <= ANY(SELECT enrollmentFROM College C2WHERE C2.cName <> C1.cName
);
SQL
SQL - Suan Lee 97
SELECT cNameFROM College C1WHERE NOT enrollment <= ANY(SELECT enrollmentFROM College C2WHERE C2.cName <> C1.cName
);
Result
SQL
SQL - Suan Lee 98
SELECT sID, sName, sizeHSFROM StudentWHERE sizeHS > ANY(SELECT sizeHSFROM Student
);
SQL
SQL - Suan Lee 99
SELECT sID, sName, sizeHSFROM StudentWHERE sizeHS > ANY(SELECT sizeHSFROM Student
);
Result
SQL
SQL - Suan Lee 100
SELECT sID, sName, sizeHSFROM Student S1WHERE EXISTS(SELECT *FROM Student S2WHERE S2.sizeHS <
S1.sizeHS);
SQL
SQL - Suan Lee 101
SELECT sID, sName, sizeHSFROM Student S1WHERE EXISTS(SELECT *FROM Student S2WHERE S2.sizeHS <
S1.sizeHS);
Result
SQL
SQL - Suan Lee 102
SELECT sID, sNameFROM StudentWHERE sID = ANY(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND sID <> ANY(SELECT sIDFROM ApplyWHERE major = 'EE'
);
SQL
SQL - Suan Lee 103
SELECT sID, sNameFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND NOT sID IN(SELECT sIDFROM ApplyWHERE major = 'EE'
);
Result
SQL
SQL - Suan Lee 104
SELECT sID, sNameFROM StudentWHERE sID = ANY(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND sID <> ANY(SELECT sIDFROM ApplyWHERE major = 'EE'
);
SQL
SQL - Suan Lee 105
SELECT sID, sNameFROM StudentWHERE sID = ANY(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND sID <> ANY(SELECT sIDFROM ApplyWHERE major = 'EE'
);
Result
SQL
SQL - Suan Lee 106
SELECT sID, sNameFROM StudentWHERE sID = ANY(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND NOT sID = ANY(SELECT sIDFROM ApplyWHERE major = 'EE'
);
SQL
SQL - Suan Lee 107
SELECT sID, sNameFROM StudentWHERE sID = ANY(SELECT sIDFROM ApplyWHERE major = 'CS'
)AND NOT sID = ANY(SELECT sIDFROM ApplyWHERE major = 'EE'
);
Result
SQL - Suan Lee 108
Subqueries in FROM and SELECT
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 109
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Expressions involving “subqueries”: nested
Select statements
SQL
SQL - Suan Lee 110
SELECT sID, sName, GPA, GPA*(sizeHS/1000.0)AS scaledGPA
FROM StudentWHERE GPA*(sizeHS/1000.0)
- GPA > 1.0OR GPA -
GPA*(sizeHS/1000.0) > 1.0;
SQL
SQL - Suan Lee 111
SELECT sID, sName, GPA, GPA*(sizeHS/1000.0)AS scaledGPA
FROM StudentWHERE GPA*(sizeHS/1000.0)
- GPA > 1.0OR GPA -
GPA*(sizeHS/1000.0) > 1.0;
Result
SQL
SQL - Suan Lee 112
SELECT sID, sName, GPA, GPA*(sizeHS/1000.0)AS scaledGPA
FROM StudentWHERE ABS(GPA*(sizeHS/1000.0)
- GPA) > 1.0;
Result
SQL
SQL - Suan Lee 113
SELECT *FROM (SELECT sID, sName, GPA,
GPA*(sizeHS/1000.0)AS scaledGPA
FROM Student) GWHERE ABS (G.scaledGPA - GPA)
> 1.0;
SQL
SQL - Suan Lee 114
SELECT *FROM (SELECT sID, sName, GPA,
GPA*(sizeHS/1000.0)AS scaledGPA
FROM Student) GWHERE ABS (G.scaledGPA - GPA)
> 1.0;
Result
SQL
SQL - Suan Lee 115
SELECT College.cName, state, GPA
FROM College, Apply, Student
WHERE College.cName = Apply.cName
AND Apply.sID = Student.sID
AND GPA >= ALL (SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND Apply.cName =
College.cName);
SQL
SQL - Suan Lee 116
SELECT College.cName, state, GPA
FROM College, Apply, Student
WHERE College.cName = Apply.cName
AND Apply.sID = Student.sID
AND GPA >= ALL (SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND Apply.cName =
College.cName);
Result
SQL
SQL - Suan Lee 117
SELECT DISTINCT College.cName, state, GPA
FROM College, Apply, Student
WHERE College.cName = Apply.cName
AND Apply.sID = Student.sID
AND GPA >= ALL (SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND Apply.cName =
College.cName);
Result
SQL
SQL - Suan Lee 118
SELECT cName, state,( SELECT DISTINCT GPAFROM Apply, StudentWHERE College.cName =
Apply.cNameAND Apply.sID =
Student.sIDAND GPA >= ALL (SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND Apply.cName =
College.cName )) AS GPAFROM College;
SQL
SQL - Suan Lee 119
SELECT cName, state,( SELECT DISTINCT GPAFROM Apply, StudentWHERE College.cName =
Apply.cNameAND Apply.sID =
Student.sIDAND GPA >= ALL (SELECT GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDAND Apply.cName =
College.cName )) AS GPAFROM College;
Result
SQL
SQL - Suan Lee 120
SELECT cName, state( SELECT DISTINCT sNameFROM Apply, StudentWHERE College.cName =
Apply.cNameAND Apply.sID =
Student.sID ) AS sName
FROM College;
SQL
SQL - Suan Lee 121
SELECT cName, state( SELECT DISTINCT sNameFROM Apply, StudentWHERE College.cName =
Apply.cNameAND Apply.sID =
Student.sID ) AS sName
FROM College;
Result
SQL - Suan Lee 122
Aggregation
SQL - Suan Lee 123
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
“Aggregation” functionsover values in multiple rows:min, max, sum, avg, count
Aggregation
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 124
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE conditionGROUP BY columnsHAVING condition
“Aggregation” functionsover values in multiple rows:min, max, sum, avg, count
New clauses
SQL
SQL - Suan Lee 125
SELECT * FROM Student;
SELECT AVG(GPA) FROM Student;
SQL
Result Result
SQL
SQL - Suan Lee 126
SELECT *FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SELECT MIN(GPA)FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SQL
Result Result
SQL
SQL - Suan Lee 127
SELECT *FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SELECT AVG(GPA)FROM Student, ApplyWHERE Student.sID =
Apply.sIDAND major = 'CS';
SQL
Result Result
SQL
SQL - Suan Lee 128
SELECT *FROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'CS'
);
SELECT AVG(GPA)FROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'CS'
);
SQL
Result Result
SQL
SQL - Suan Lee 129
SELECT *FROM CollegeWHERE enrollment > 15000;
SELECT COUNT(*)FROM CollegeWHERE enrollment > 15000;
SQL
Result Result
SQL
SQL - Suan Lee 130
SELECT COUNT(*)FROM ApplyWHERE cName = 'Cornell';
SELECT COUNT(DISTINCT sID)FROM ApplyWHERE cName = 'Cornell';
SQL
Result Result
SQL
SQL - Suan Lee 131
SELECT sIDFROM ApplyWHERE cName = 'Cornell';
Result
SQL
SQL - Suan Lee 132
SELECT *FROM Student S1WHERE( SELECT COUNT(*)FROM Student S2WHERE S2.sID <> S1.sIDAND S2.GPA = S1.GPA
) = ( SELECT COUNT(*)FROM Student S2WHERE S2.sID <> S1.sIDAND S2.sizeHS = S1.sizeHS
);
Result
SQL
SQL - Suan Lee 133
SELECT CS.avgGPA - NonCS.avgGPAFROM(SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS')) CS,
(SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID NOT IN(SELECT sIDFROM ApplyWHERE major = 'CS')) nonCS;
SQL
SQL - Suan Lee 134
SELECT CS.avgGPA - NonCS.avgGPAFROM(SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = 'CS')) CS,
(SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID NOT IN(SELECT sIDFROM ApplyWHERE major = 'CS')) nonCS;
Result
SQL
SQL - Suan Lee 135
SELECT( SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'CS' ) ) -
( SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID NOT IN( SELECT sIDFROM ApplyWHERE major = 'CS' ) ) D
FROM Student;
Result
SQL
SQL - Suan Lee 136
SELECT DISTINCT( SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'CS' ) ) -
( SELECT AVG(GPA) AS avgGPAFROM StudentWHERE sID NOT IN( SELECT sIDFROM ApplyWHERE major = 'CS' ) ) D
FROM Student;
Result
SQL
SQL - Suan Lee 137
SELECT cName, COUNT(*)FROM ApplyGROUP BY cName;
Result
SQL
SQL - Suan Lee 138
SELECT *FROM ApplyORDER BY cName;
Result
SQL
SQL - Suan Lee 139
SELECT cName, COUNT(*)FROM ApplyGROUP BY cName;
Result
SQL
SQL - Suan Lee 140
SELECT state, SUM(enrollment)FROM CollegeGROUP BY state;
Result
SQL
SQL - Suan Lee 141
SELECT cName, major, MIN(GPA), MAX(GPA)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY cName, major;
SQL
SQL - Suan Lee 142
SELECT cName, major, GPAFROM Student, ApplyWHERE Student.sID =
Apply.sIDORDER BY cName, major;
Result
SQL
SQL - Suan Lee 143
SELECT cName, major, MIN(GPA), MAX(GPA)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY cName, major;
Result
SQL
SQL - Suan Lee 144
SELECT MAX(mx-mn)FROM( SELECT cName, major,
MIN(GPA) AS mn, MAX(GPA) AS mx
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY cName, major
) M;
Result
SQL
SQL - Suan Lee 145
SELECT Student.sID, COUNT(DISTINCT cName)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY Student.sID;
SQL
SQL - Suan Lee 146
SELECT Student.sID, cNameFROM Student, ApplyWHERE Student.sID =
Apply.sIDORDER BY Student.sID;
Result
SQL
SQL - Suan Lee 147
SELECT Student.sID, COUNT(DISTINCT cName)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY Student.sID;
Result
SQL
SQL - Suan Lee 148
SELECT Student.sID, COUNT(DISTINCT cName)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY Student.sIDUNIONSELECT sID, 0FROM StudentWHERE sID NOT IN( SELECT sID FROM Apply );
SQL
SQL - Suan Lee 149
SELECT Student.sID, COUNT(DISTINCT cName)
FROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY Student.sIDUNIONSELECT sID, 0FROM StudentWHERE sID NOT IN( SELECT sID FROM Apply );
Result
SQL
SQL - Suan Lee 150
SELECT cNameFROM ApplyGROUP BY cNameHAVING COUNT(*) < 5;
SQL
SQL - Suan Lee 151
SELECT cNameFROM ApplyGROUP BY cNameHAVING COUNT(*) < 5;
Result
SQL
SQL - Suan Lee 152
SELECT cNameFROM Apply A1WHERE 5 >(SELECT COUNT(*)FROM Apply A2WHERE A2.cName = A1.cName
);
Result
SQL
SQL - Suan Lee 153
SELECT DISTINCT cNameFROM Apply A1WHERE 5 >(SELECT COUNT(*)FROM Apply A2WHERE A2.cName = A1.cName
);
Result
SQL
SQL - Suan Lee 154
SELECT cNameFROM ApplyGROUP BY cNameHAVING COUNT(DISTINCT sID) < 5;
Result
SQL
SELECT cNameFROM ApplyGROUP BY cNameHAVING COUNT(*) < 5;
Result
SQL
SQL - Suan Lee 155
SELECT majorFROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY majorHAVING MAX(GPA) < ( SELECT AVG(GPA) FROM Student );
SQL
SQL - Suan Lee 156
SELECT majorFROM Student, ApplyWHERE Student.sID =
Apply.sIDGROUP BY majorHAVING MAX(GPA) < ( SELECT AVG(GPA) FROM Student );
Result
SQL - Suan Lee 157
NULL Values
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 158
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
NULL values: undefined or unknown
SQL
SQL - Suan Lee 159
SELECT *FROM Student;
Result
SQL
SQL - Suan Lee 160
INSERT INTO Student VALUES (432, 'Kevin', null, 1500);INSERT INTO Student VALUES (321, 'Lori', null, 2500);
Result
SQL
SQL - Suan Lee 161
SELECT sID, sName, GPAFROM StudentWHERE GPA > 3.5;
Result
SQL
SQL - Suan Lee 162
SELECT sID, sName, GPAFROM StudentWHERE GPA <= 3.5;
Result
SQL
SQL - Suan Lee 163
SELECT sID, sName, GPAFROM StudentWHERE GPA > 3.5 OR
GPA <= 3.5;
Result
SQL
SQL - Suan Lee 164
SELECT sID, sName, GPAFROM StudentWHERE GPA > 3.5 OR
GPA <= 3.5 ORGPA IS NULL;
Result
SQL
SQL - Suan Lee 165
SELECT sID, sName, GPA, sizeHS
FROM StudentWHERE GPA > 3.5 OR
sizeHS < 1600;
Result
SQL
SQL - Suan Lee 166
SELECT sID, sName, GPA, sizeHS
FROM StudentWHERE GPA > 3.5 OR
sizeHS < 1600 ORsizeHS >= 1600;
Result
SQL
SQL - Suan Lee 167
SELECT COUNT(*)FROM StudentWHERE GPA IS NOT NULL;
Result
SQL
SQL - Suan Lee 168
SELECT COUNT(DISTINCT GPA)FROM StudentWHERE GPA IS NOT NULL;
Result
SQL
SQL - Suan Lee 169
SELECT DISTINCT GPAFROM Student;
Result
SQL - Suan Lee 170
Data Modification Statements
• Inserting new data (2 methods)
SQL - Suan Lee 171
INSERT INTO TABLEVALUES (A1,A2,…,An)
INSERT INTO TABLESelect-Statement
Data Modification Statements
• Deleting existing data
SQL - Suan Lee 172
DELETE FROM TABLEWHERE Condition
Data Modification Statements
• Updating existing data
SQL - Suan Lee 173
UPDATE TABLESET Attribute = ExpressionWHERE Condition
Data Modification Statements
• Updating existing data
Demo: simple college admissions databaseCollege(cName, state, enrollment)
Student(sID, sName, GPA, sizeHS)
Apply(sID, cName, major, decision)
SQL - Suan Lee 174
UPDATE TABLESET A1 = Expr1, A2 = Expr2, …,
A3 = Expr3, WHERE Condition
SQL
SQL - Suan Lee 175
INSERT INTO CollegeVALUES ('Carnegie Mellon',
'PA', 11500);
Result
SELECT * FROM College;
SQL
SQL - Suan Lee 176
SELECT *FROM StudentWHERE sID NOT IN(SELECT sIDFROM Apply
);
Result
SQL
SQL - Suan Lee 177
SELECT sID, 'Carnegie Mellon', 'CS', NULL
FROM StudentWHERE sID NOT IN(SELECT sIDFROM Apply
);
Result
SQL
SQL - Suan Lee 178
INSERT INTO ApplySELECT sID, 'Carnegie Mellon’,
‘CS’, NULLFROM StudentWHERE sID NOT IN(SELECT sIDFROM Apply
);
Result
SELECT * FROM Apply;
SQL
SQL - Suan Lee 179
SELECT *FROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = ‘EE’AND decision = ‘N’
);
Result
SQL
SQL - Suan Lee 180
SELECT sID, 'Carnegie Mellon','EE', 'Y'
FROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = ‘EE’AND decision = ‘N’
);
Result
SQL
SQL - Suan Lee 181
INSERT INTO ApplySELECT sID, 'Carnegie Mellon',
'EE', 'Y'FROM StudentWHERE sID IN(SELECT sIDFROM ApplyWHERE major = ‘EE’AND decision = ‘N’
);
Result
SELECT * FROM Apply;
SQL
SQL - Suan Lee 182
SELECT sID, COUNT(DISTINCT major)
FROM ApplyGROUP BY sIDHAVING COUNT(DISTINCT major)
> 2;
Result
SQL
SQL - Suan Lee 183
DELETEFROM StudentWHERE sID IN(SELECT sIDFROM ApplyGROUP BY sIDHAVING COUNT(DISTINCT major)
> 2);
Result
SELECT * FROM Student;
SQL
SQL - Suan Lee 184
DELETEFROM ApplyWHERE sID IN(SELECT sIDFROM ApplyGROUP BY sIDHAVING COUNT(DISTINCT major)
> 2);
Result
SELECT * FROM Apply;
SQL
SQL - Suan Lee 185
SELECT *FROM CollegeWHERE cName NOT IN(SELECT cNameFROM ApplyWHERE major = 'CS'
);
Result
SQL
SQL - Suan Lee 186
DELETEFROM CollegeWHERE cName NOT IN(SELECT cNameFROM ApplyWHERE major = 'CS'
);
Result
SELECT * FROM College;
SQL
SQL - Suan Lee 187
SELECT *FROM ApplyWHERE cName =
'Carnegie Mellon'AND sID IN
(SELECT sIDFROM StudentWHERE GPA < 3.6
);
Result
SQL
SQL - Suan Lee 188
UPDATE ApplySET decision = ‘Y’,
major = ‘economics’WHERE cName =
'Carnegie Mellon'AND sID IN
(SELECT sIDFROM StudentWHERE GPA < 3.6
);
Result
SQL
SQL - Suan Lee 189
SELECT *FROM ApplyWHERE major = 'EE'AND sID IN
( SELECT sIDFROM StudentWHERE GPA >= ALL( SELECT GPAFROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'EE‘
))
);
Result
SQL
SQL - Suan Lee 190
UPDATE ApplySET major = 'CSE'WHERE major = 'EE'AND sID IN
( SELECT sIDFROM StudentWHERE GPA >= ALL( SELECT GPAFROM StudentWHERE sID IN( SELECT sIDFROM ApplyWHERE major = 'EE‘
))
);
Result
SQL
SQL - Suan Lee 191
UPDATE StudentSETGPA = ( SELECT MAX(GPA)
FROM Student ),sizeHS = ( SELECT MIN(sizeHS)
FROM Student );
Result
SELECT * FROM Student;
SQL
SQL - Suan Lee 192
UPDATE ApplySET decision = 'Y';
Result
SELECT * FROM Apply;
SQL - Suan Lee 193
JOIN Operators
SQL - Suan Lee 194
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Explicit Join of tables
JOIN Operators
• Inner Join On Condition
SQL - Suan Lee 195
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Explicit Join of tables
⋈Θ
JOIN Operators
• Inner Join On Condition
• Natural Join
SQL - Suan Lee 196
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Explicit Join of tables
⋈
⋈Θ
JOIN Operators
• Inner Join On Condition
• Natural Join
• Inner Join Using(attributes)
SQL - Suan Lee 197
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Explicit Join of tables
⋈
⋈Θ
⋈
JOIN Operators
• Inner Join On Condition
• Natural Join
• Inner Join Using(attributes)
• Left | Right | Full Outer Join
SQL - Suan Lee 198
SELECT A1,A2,…,AnFROM R1,R2, …,RmWHERE condition
Explicit Join of tables
⋈
⋈Θ
⋈
SQL
SQL - Suan Lee 199
SELECT DISTINCT sName, majorFROM Student, ApplyWHERE Student.sID = Apply.sID;
Result
SQL
SQL - Suan Lee 200
SELECT DISTINCT sName, majorFROM Student INNER JOIN ApplyON Student.sID = Apply.sID;
Result
SQL
SQL - Suan Lee 201
SELECT DISTINCT sName, majorFROM Student JOIN ApplyON Student.sID = Apply.sID;
Result
SQL
SQL - Suan Lee 202
SELECT sName, GPAFROM Student, ApplyWHERE Student.sID = Apply.sIDAND sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 203
SELECT sName, GPAFROM Student JOIN ApplyON Student.sID = Apply.sIDWHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 204
SELECT sName, GPAFROM Student JOIN ApplyON Student.sID = Apply.sIDAND sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 205
SELECT sName, GPAFROM Student JOIN ApplyON Student.sID = Apply.sIDWHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 206
SELECT Apply.sID, sName, GPA, Apply.cName, enrollment
FROM Apply, Student, CollegeWHERE Apply.sID = Student.sIDAND Apply.cName =
College.cName;
Result
SQL
SQL - Suan Lee 207
SELECT Apply.sID, sName, GPA, Apply.cName, enrollment
FROM Apply JOIN Student JOIN College
ON Apply.sID = Student.sIDAND Apply.cName =
College.cName;
Result
SQL
SQL - Suan Lee 208
SELECT Apply.sID, sName, GPA, Apply.cName, enrollment
FROM (Apply JOIN Student ONApply.sID = Student.sID)
JOIN CollegeON Apply.cName =
College.cName;
SQL
SQL - Suan Lee 209
SELECT Apply.sID, sName, GPA, Apply.cName, enrollment
FROM (Apply JOIN Student ONApply.sID = Student.sID)
JOIN CollegeON Apply.cName =
College.cName;
Result
SQL
SQL - Suan Lee 210
SELECT DISTINCT sName, majorFROM Student INNER JOIN ApplyON Student.sID = Apply.sID;
Result
SQL
SQL - Suan Lee 211
SELECT DISTINCT sName, majorFROM StudentNATURAL JOIN Apply;
Result
SQL
SQL - Suan Lee 212
SELECT *FROM StudentNATURAL JOIN Apply;
Result
SQL
SQL - Suan Lee 213
SELECT DISTINCT sIDFROM StudentNATURAL JOIN Apply;
Result
SQL
SQL - Suan Lee 214
SELECT DISTINCT sIDFROM Student, Apply;
Result
SQL
SQL - Suan Lee 215
SELECT sName, GPAFROM Student JOIN ApplyON Student.sID = Apply.sIDWHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 216
SELECT sName, GPAFROM StudentNATURAL JOIN ApplyWHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 217
SELECT sName, GPAFROM StudentJOIN Apply USING(sID)WHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
SQL
SQL - Suan Lee 218
SELECT sName, GPAFROM StudentJOIN Apply USING(sID)WHERE sizeHS < 1000AND major = 'CS'AND cName = 'Stanford';
Result
SQL
SQL - Suan Lee 219
SELECT *FROM Student S1 NATURAL JOIN Student S2;
Result
SQL
SQL - Suan Lee 220
SELECT *FROM Student;
Result
SQL
SQL - Suan Lee 221
SELECT sName, sID, cName, majorFROM StudentINNER JOIN Apply USING(sID);
Result
SQL
SQL - Suan Lee 222
SELECT sName, sID, cName, majorFROM StudentOUTER JOIN Apply USING(sID);
Result
SQL
SQL - Suan Lee 223
SELECT sName, sID, cName, majorFROM StudentLEFT OUTER JOIN Apply USING(sID);
Result
SQL
SQL - Suan Lee 224
SELECT sName, sID, cName, majorFROM StudentLEFT JOIN Apply USING(sID);
Result
SQL
SQL - Suan Lee 225
SELECT sName, sID, cName, majorFROM StudentNATURAL LEFT OUTER JOIN Apply;
Result
SQL
SQL - Suan Lee 226
SELECT sName, Student.sID, cName, major
FROM Student, ApplyWHERE Student.sID = Apply.sIDUNIONSELECT sName, sID, NULL, NULLFROM StudentWHERE sID NOT IN( SELECT sID FROM Apply );
Result
SQL
SQL - Suan Lee 227
SELECT sName, sID, cName, majorFROM StudentNATURAL LEFT OUTER JOIN Apply;
Result
SQL
SQL - Suan Lee 228
INSERT INTO Apply VALUES (321, 'MIT', 'history', 'N');INSERT INTO Apply VALUES (321, 'MIT', 'psychology', 'Y');
SQL
SQL - Suan Lee 229
SELECT sName, sID, cName, majorFROM ApplyNATURAL LEFT OUTER JOIN Student;
Result
SQL
SQL - Suan Lee 230
SELECT sName, sID, cName, majorFROM StudentNATURAL RIGHT OUTER JOIN Apply;
Result
SQL
SQL - Suan Lee 231
SELECT sName, sID, cName, majorFROM StudentFULL OUTER JOIN Apply USING(sID);
Result
SQL
SQL - Suan Lee 232
SELECT sName, sID, cName, majorFROM StudentLEFT OUTER JOIN Apply USING(sID)UNIONSELECT sName, sID, cName, majorFROM StudentRIGHT OUTER JOIN Apply USING(sID)
Result
SQL
SQL - Suan Lee 233
SELECT sName, Student.sID, cName, major
FROM Student, ApplyWHERE Student.sID = Apply.sIDUNIONSELECT sName, sID, NULL, NULLFROM StudentWHERE sID NOT IN ( SELECT sID FROM Apply )UNIONSELECT NULL, sID, cName, majorFROM ApplyWHERE sID NOT IN( SELECT sID FROM Student );
Result
SQL - Suan Lee 234