CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon...

58

Transcript of CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon...

Page 9: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

student(sid,name,login,gpa) enrolled(sid,cid,grade)

course(cid,name)

sid name login age gpa53666 Kanye kayne@cs 39 4.053688 Bieber jbieber@cs 22 3.953655 Tupac shakur@cs 26 3.5

sid cid grade53666 15-445 C53688 15-721 A53688 15-826 B53655 15-445 B53666 15-721 C

cid name15-445 Database Systems15-721 Advanced Database Systems15-826 Data Mining15-823 Advanced Topics in Databases

Page 10: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

→ AVG(col)→ MIN(col)→ MAX(col)→ SUM(col)→ COUNT(col)

Page 11: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT

SELECT COUNT(login) AS cntFROM student WHERE login LIKE '%@cs'

Page 12: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT

SELECT COUNT(login) AS cntFROM student WHERE login LIKE '%@cs'SELECT COUNT(*) AS cnt

FROM student WHERE login LIKE '%@cs'

Page 13: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT

SELECT COUNT(login) AS cntFROM student WHERE login LIKE '%@cs'SELECT COUNT(*) AS cnt

FROM student WHERE login LIKE '%@cs'SELECT COUNT(1) AS cnt

FROM student WHERE login LIKE '%@cs'

Page 14: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT AVG(gpa), COUNT(sid)FROM student WHERE login LIKE '%@cs'

AVG(gpa) COUNT(sid)

3.25 12

Page 15: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

COUNT SUM AVG DISTINCT

SELECT COUNT(DISTINCT login)FROM student WHERE login LIKE '%@cs'

COUNT(DISTINCT login)

10

Page 16: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT AVG(s.gpa), e.cidFROM enrolled AS e, student AS sWHERE e.sid = s.sid

AVG(s.gpa) e.cid

3.5 ???

Page 17: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT AVG(s.gpa), e.cidFROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cid

e.sid s.sid s.gpa e.cid

53435 53435 2.25 15-721

53439 53439 2.70 15-721

56023 56023 2.75 15-826

59439 59439 3.90 15-826

53961 53961 3.50 15-826

58345 58345 1.89 15-445

Page 18: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

AVG(s.gpa) e.cid

2.46 15-721

3.39 15-826

1.89 15-445

SELECT AVG(s.gpa), e.cidFROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cid

e.sid s.sid s.gpa e.cid

53435 53435 2.25 15-721

53439 53439 2.70 15-721

56023 56023 2.75 15-826

59439 59439 3.90 15-826

53961 53961 3.50 15-826

58345 58345 1.89 15-445

Page 19: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT

GROUP BY

SELECT AVG(s.gpa), e.cid, s.nameFROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cid X

Page 20: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT

GROUP BY

SELECT AVG(s.gpa), e.cid, s.nameFROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cid X

SELECT AVG(s.gpa), e.cid, s.nameFROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cid, s.name

Page 21: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WHERE GROUP BY

SELECT AVG(s.gpa) AS avg_gpa, e.cidFROM enrolled AS e, student AS sWHERE e.sid = s.sidAND avg_gpa > 3.9

GROUP BY e.cidX

Page 22: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WHERE GROUP BY

SELECT AVG(s.gpa) AS avg_gpa, e.cidFROM enrolled AS e, student AS sWHERE e.sid = s.sidAND avg_gpa > 3.9

GROUP BY e.cid

AVG(s.gpa) e.cid

3.75 15-4153.950000 15-7213.900000 15-826

avg_gpa e.cid

3.950000 15-721

XSELECT AVG(s.gpa) AS avg_gpa, e.cid

FROM enrolled AS e, student AS sWHERE e.sid = s.sidGROUP BY e.cidHAVING avg_gpa > 3.9;

Page 23: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WHERE UPPER(name) = UPPER('KaNyE')

WHERE name = "KaNyE"

Page 24: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

LIKE

→ "%"

→ "_"

SELECT * FROM enrolled AS eWHERE e.cid LIKE '15-%'

SELECT * FROM student AS sWHERE s.login LIKE '%@c_'

Page 25: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT SUBSTRING(name,0,5) AS abbrv_nameFROM student WHERE sid = 53688

SELECT * FROM student AS sWHERE UPPER(e.name) LIKE 'KAN%'

Page 26: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

||

SELECT name FROM studentWHERE login = LOWER(name) + '@cs'

SELECT name FROM studentWHERE login = LOWER(name) || '@cs'

SELECT name FROM studentWHERE login = CONCAT(LOWER(name), '@cs')

Page 28: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

→→

CREATE TABLE CourseIds (SELECT DISTINCT cid FROM enrolled);

SELECT DISTINCT cid INTO CourseIdsFROM enrolled;

Page 29: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

→ SELECT

INSERT INTO CourseIds(SELECT DISTINCT cid FROM enrolled);

Page 30: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

ORDER BY <column*> [ASC|DESC]→

SELECT sid, grade FROM enrolledWHERE cid = '15-721'ORDER BY grade

SELECT sid FROM enrolledWHERE cid = '15-721'ORDER BY grade DESC, sid ASC

sid grade

53123 A53334 A53650 B53666 D

sid

53666536505312353334

Page 31: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

LIMIT <count> [offset]→

SELECT sid, name FROM studentWHERE login LIKE '%@cs'LIMIT 10

SELECT sid, name FROM studentWHERE login LIKE '%@cs'LIMIT 20 OFFSET 10

Page 32: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM student WHEREsid IN (SELECT sid FROM enrolled)

Page 33: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM studentWHERE ...

Page 34: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM studentWHERE ...

SELECT name FROM studentWHERE ...SELECT sid FROM enrolledWHERE cid = '15-445'

Page 35: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM studentWHERE ...

SELECT name FROM studentWHERE ...SELECT sid FROM enrolledWHERE cid = '15-445'

SELECT name FROM studentWHERE sid IN (SELECT sid FROM enrolledWHERE cid = '15-445'

)

Page 37: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM studentWHERE sid = ANY(SELECT sid FROM enrolledWHERE cid = '15-445'

)

Page 38: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT name FROM studentWHERE sid = ANY(SELECT sid FROM enrolledWHERE cid = '15-445'

)

SELECT (SELECT S.name FROM student AS SWHERE S.sid = E.sid) AS sname

FROM enrolled AS EWHERE cid = '15-445'

Page 39: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT MAX(e.sid), s.nameFROM enrolled AS e, student AS sWHERE e.sid = s.sid; X

Page 40: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT sid, name FROM studentWHERE ...

Page 41: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT sid, name FROM studentWHERE ...

SELECT sid, name FROM studentWHERE sidSELECT sid FROM enrolled

Page 42: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT sid, name FROM studentWHERE ...

SELECT sid, name FROM studentWHERE sidSELECT sid FROM enrolled

SELECT sid, name FROM studentWHERE sid => ALL(SELECT sid FROM enrolled

)

sid name

53688 Bieber

Page 43: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT sid, name FROM studentWHERE ...

SELECT sid, name FROM studentWHERE sidSELECT sid FROM enrolled

SELECT sid, name FROM studentWHERE sid => ALL(SELECT sid FROM enrolled

)

SELECT sid, name FROM studentWHERE sid IN (SELECT MAX(sid) FROM enrolled

)

Page 44: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT sid, name FROM studentWHERE ...

SELECT sid, name FROM studentWHERE sidSELECT sid FROM enrolled

SELECT sid, name FROM studentWHERE sid => ALL(SELECT sid FROM enrolled

)

SELECT sid, name FROM studentWHERE sid IN (SELECT MAX(sid) FROM enrolled

)

SELECT sid, name FROM studentWHERE sid IN (SELECT sid FROM enrolledORDER BY sid DESC LIMIT 1

)

Page 45: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT * FROM courseWHERE ...

sid cid grade

53666 15-445 C

53688 15-721 A

53688 15-826 B

53655 15-445 B

53666 15-721 C

cid name

15-445 Database Systems15-721 Advanced Database Systems15-826 Data Mining15-823 Advanced Topics in Databases

Page 46: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT * FROM courseWHERE ...

SELECT * FROM courseWHERE NOT EXISTS(

)

Page 47: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT * FROM courseWHERE ...

SELECT * FROM courseWHERE NOT EXISTS(

)

SELECT * FROM courseWHERE NOT EXISTS(SELECT * FROM enrolledWHERE course.cid = enrolled.cid

)

cid name

15-823 Advanced Topics in Databases

Page 48: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT ... FUNC-NAME(...) OVER (...)FROM tableName

Page 49: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

→ ROW_NUMBER()

→ RANK()

SELECT *, ROW_NUMBER() OVER () AS row_numFROM enrolled

sid cid grade row_num53666 15-445 C 153688 15-721 A 253688 15-826 B 353655 15-445 B 453666 15-721 C 5

Page 50: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

OVER

PARTITION BY

SELECT cid, sid,ROW_NUMBER() OVER (PARTITION BY cid)

FROM enrolledORDER BY cid

cid sid row_number15-445 53666 115-445 53655 215-721 53688 115-721 53666 215-826 53688 1

Page 51: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

ORDER BY

SELECT *,ROW_NUMBER() OVER (ORDER BY cid)

FROM enrolledORDER BY cid

Page 52: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

SELECT * FROM (SELECT *,

RANK() OVER (PARTITION BY cidORDER BY grade ASC)

AS rankFROM enrolled) AS ranking

WHERE ranking.rank = 1

Page 53: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WITH cteName AS (SELECT 1

) SELECT * FROM cteName

Page 54: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

AS

WITH cteName (col1, col2) AS (SELECT 1, 2

) SELECT col1 + col2 FROM cteName

Page 55: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WITH cteSource (maxId) AS (SELECT MAX(sid) FROM enrolled

) SELECT name FROM student, cteSourceWHERE student.sid = cteSource.maxId

Page 56: CMU 15-445/645 Database Systems (Fall 2017) :: Advanced SQL · Keywords: Databases, Carnegie Mellon University Created Date: 9/7/2017 7:47:48 PM ...

WITH RECURSIVE cteSource (counter) AS ((SELECT 1)UNION ALL(SELECT counter + 1 FROM cteSource

WHERE counter < 10)) SELECT * FROM cteSource