Tsch csdl 01 - dhcntt

124
1 Trường Đihc Công nghthông tin Ôn thi cao hcnăm 2009 Đạisquan hvà ngôn ngSQL Relational Algebra & SQL PGS.TS. ĐPhúc Khoa Hthng thông tin

description

Ôn tập cơ sở dữ liệu tuyển sinh cao học ĐHCNTT. Giáo trình của thầy PGS.TS. Đỗ Phúc. Khoa Hệ thống thông tin Phần 1: Đại số quan hệ và ngôn ngữ SQL (Relational Algebra & SQL) 2009

Transcript of Tsch csdl 01 - dhcntt

Page 1: Tsch   csdl 01 - dhcntt

1

Trường Đại học Công nghệ thông tin

Ôn thi cao học năm 2009

Đại số quan hệ và ngôn ngữ SQLRelational Algebra & SQL

PGS.TS. Đỗ PhúcKhoa Hệ thống thông tin

Page 2: Tsch   csdl 01 - dhcntt

2

Năm phép toán cơ bản

• Selection ( σ ) : chọn.

• Projection ( π ) : chiếu.

• Descartes-product ( × ) tích Descartes.• Set-difference ( — ) hiệu• Union ( ∪ ) hợp.

Page 3: Tsch   csdl 01 - dhcntt

3

sname ratingyuppy 9lubber 8guppy 5rusty 10

Chiếu (projection)sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

)2(, Sratingsnameπ

S2age35.055.5Ví dụ:

Chỉ giữ lại các thuộc tính đượcchỉ định trong danh sách chiếu. πage S( )2

Page 4: Tsch   csdl 01 - dhcntt

4

Chọn -selection (σ)

• Chọn các dòng thỏa điều kiện.

σ rating S>8 2( )

sname ratingyuppy 9rusty 10

π σsname rating rating S, ( ( ))>8 2

sid sname rating age 28 yuppy 9 35.0 31 lubber 8 55.5 44 guppy 5 35.0 58 rusty 10 35.0

Page 5: Tsch   csdl 01 - dhcntt

5

Hợp và hiệu

• Các phép toán này yêu cầu 2 quan hệ nhập phảitương thích– Cùng số thuộc tính.– Cùng tên và kiểu.

Page 6: Tsch   csdl 01 - dhcntt

6

Hợp- Unionsid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.044 guppy 5 35.028 yuppy 9 35.0

S S1 2∪

sid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

S1

S2

Page 7: Tsch   csdl 01 - dhcntt

7

Hiệu- Set Differencesid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

S1

S2

sid sname rating age22 dustin 7 45.0

S S1 2−

S2 – S1

sid sname rating age28 yuppy 9 35.044 guppy 5 35.0

Page 8: Tsch   csdl 01 - dhcntt

8

Toán tử giao ( Intersection)

• các quan hệ phải tương thích

• Có thể biểu diễn qua phép hợp và phép hiệu

R ∩ S = R − (R − S)

Page 9: Tsch   csdl 01 - dhcntt

9

Giao - Intersectionsid sname rating age22 dustin 7 45.031 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

S1

S2

sid sname rating age31 lubber 8 55.558 rusty 10 35.0

S S1 2∩

Page 10: Tsch   csdl 01 - dhcntt

10

Tích Descartes

• Kết từng dòng của quan hệ đầu ( R ) với từngdòng của quan hệ thứ hai (S):

R X S

Page 11: Tsch   csdl 01 - dhcntt

11

Ví dụ về tích Descartes

Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing300 Bob CM

Students X Courses =

stud# Students.name course course# Courses.name100 Fred PH PH Pharmacy100 Fred PH CM Computing200 Dave CM PH Pharmacy200 Dave CM CM Computing300 Bob CM PH Pharmacy300 Bob CM CM Computing

Page 12: Tsch   csdl 01 - dhcntt

12

Theta kết

• Tích Descartes có áp dụng điều kiện:

R ⋈ <condition> S

Page 13: Tsch   csdl 01 - dhcntt

13

Ví dụ về Theta kết

Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing300 Bob CM

Students ⋈ stud# = 200 Courses

stud# Students.name course course# Courses.name200 Dave CM PH Pharmacy200 Dave CM CM Computing

Page 14: Tsch   csdl 01 - dhcntt

14

Phép kết trong :Inner Join (Equijoin)

• Phép kết Theta với điều kiện <condition> làbằng nhau (=) giữa khóa chính và khóa ngoại.

R ⋈ <R.primary_key = S.foreign_key> S

Page 15: Tsch   csdl 01 - dhcntt

15

Ví dụ về Inner Join

Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing300 Bob CM

Students ⋈ course = course# Courses

stud# Students.name course course# Courses.name100 Fred PH PH Pharmacy200 Dave CM CM Computing300 Bob CM CM Computing

Page 16: Tsch   csdl 01 - dhcntt

16

Phép kết tự nhiên ( natural join)

• Phép kết trong (inner join) sinh ra dữ liệu dư (trong ví dụ trướcta có: course và course#). Để loại bỏ trường hợp trùng này, tadùng:

π < stud#, Students.name, course, Courses.name >

(Students ⋈ <course = course#> Courses)hayR1= Students ⋈ <course = course#> Courses

R2= π < stud#, Students.name, course, Courses.name > R1Kết quả này được gọi là kết tự nhiên (natural join) giữa Students

và Courses

Page 17: Tsch   csdl 01 - dhcntt

17

Ví dụ về kết tự nhiên (Natural Join)

Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing300 Bob CM

R1= Students ⋈ <course = course#> CoursesR2= π < stud#, Students.name, course, Courses.name > R1stud# Students.name course Courses.name100 Fred PH Pharmacy200 Dave CM Computing300 Bob CM Computing

Page 18: Tsch   csdl 01 - dhcntt

18

Phép kết ngoài (Outer Joins)

• Phép kết trong + các dòng của bảng không thỏa<condition>.

• Phép kết ngoài trái: R <R.primary_key = S.foreign_key> STất cả các dòng trong R được giữ lại và các dòng không thỏa của

S được dồn các trị NULL

• Phép kết ngoài phải: R <R.primary_key = S.foreign_key> STất cả các dòng trong S được giữ lại và các dòng không thỏa của

R được dồn các trị NULL

Page 19: Tsch   csdl 01 - dhcntt

19

Ví dụ về phép kết ngoài tráiLeft Outer Join

Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing400 Peter EN CH Chemistry

Students <course = course#> Courses

stud# Students.name course course# Courses.name100 Fred PH PH Pharmacy200 Dave CM CM Computing400 Peter EN NULL NULL

Page 20: Tsch   csdl 01 - dhcntt

20

Ví dụ về phép kết ngoài phảiRight Outer Join Students Coursesstud# name course course# name100 Fred PH PH Pharmacy200 Dave CM CM Computing400 Peter EN CH Chemistry

Students <course = course#> Courses

stud# Students.name course course# Courses.name100 Fred PH PH Pharmacy200 Dave CM CM ComputingNULL NULL NULL CH Chemistry

Page 21: Tsch   csdl 01 - dhcntt

21

Phép chia: Division

• Dùng cho biểu thức “tất cả ” trong truy vấn sau: Tìm mã thủy thủ (sids) đặt tất cả (all) các thuyền(boats).

• Vd: cho A có 2 thuộc tính x và y; B chỉ có mộtthuộc tính y:

A/B (chia) chứa tất cả các bộ (x) sao cho mọibộ y trong B đều có bộ xy trong A.

{ }),( AyxByxBA ∈∃∈∀=

Page 22: Tsch   csdl 01 - dhcntt

22

Ví dụ phép chia A/B

sno pnos1 p1s1 p2s1 p3s1 p4s2 p1s2 p2s3 p2s4 p2s4 p4

pnop2

pnop2p4

pnop1p2p4

snos1s2s3s4

snos1s4

A

B1B2

A/B1 A/B2

B3

snos1A/B3

Page 23: Tsch   csdl 01 - dhcntt

23

Ví dụ về phép chia• Tìm tất cả khách hàng có tài khoản tại tất cả chi

nhánh nằm ở ChVille

– Branch (bname, assets, bcity)– Account (bname, acct#, cname, balance)

Page 24: Tsch   csdl 01 - dhcntt

24

Ví dụ về phép chiaR1: Tìm tất cả các chi nhánh tại ChvilleR2: Tìm cặp (bname, cname) từ AccountR3: Các khách của r2 có tài khoản tại tất cả chi nhánh có

tên trong r1

123)(2

)(1

,

''

rrrAccountr

r

cnamebname

BranchChvillebcitybname

÷=

=

==

π

σπ

Page 25: Tsch   csdl 01 - dhcntt

25

Biểu diễn phép chia A/B dùng các toán tử cơbản

)))((( ABAxx −×ππ

Page 26: Tsch   csdl 01 - dhcntt

26

Cơ sở dữ liệu

• Cho CSDL câu lạc bộ thuyền buồm

• Sailors(Sid,Sname, rating, age):thủy thủ• Boat(Bid,color): thuyền• Reserves(Sid,Bid,ReservedDate):đặt chỗ

Page 27: Tsch   csdl 01 - dhcntt

27

Tìm tên thủy thủ (sailors) đặt thuyền có mã(bid) #103

π σsname bid serves Sailors(( Re ) )=103 ><• Solution 1:

• Solution 2: π σsname bid serves Sailors( (Re ))=103 ><

Sailors(Sid,Sname, rating, age):thủy thủBoat(Bid,color): thuyềnReserves(Sid,Bid,ReservedDate):đặt chỗ

Page 28: Tsch   csdl 01 - dhcntt

28

Tìm tên thủy thủ (sailors) đặt thuyền màuđỏ ( red boat)

• Thông tin về màu đỏ chỉ có trong quan hệBoats, ta cần thêm một phép kết:

π σsname color red Boats serves Sailors(( ' ' ) Re )=

>< ><

Giải pháp tốt hơn ( tối ưu truy vấn):

π π π σsname sid bid color red Boats s Sailors( (( ' ' ) Re ) )=

>< ><

Sailors(Sid,Sname, rating, age):thủy thủBoat(Bid,color): thuyềnReserves(Sid,Bid,ReservedDate):đặt chỗ

Page 29: Tsch   csdl 01 - dhcntt

29

Tìm tên thủy thủ (sailors) đặt thuyền màu đỏvà màu xanh lục

ρ π σ( , (( ' ' ) Re ))Tempred sid color red Boats serves=

><

π sname Tempred Tempgreen Sailors(( ) )∩ ><

ρ π σ( , (( ' ' ) Re ))Tempgreen sid color green Boats serves=

><

Page 30: Tsch   csdl 01 - dhcntt

30

Tìm tên thủy thủ (sailors) đặt tất cả cácthuyền

• Phép chia:

ρ π π( , ( , Re ) / ( ))Tempsids sid bid serves bid Boats

π sname Tempsids Sailors( )><

Sailors(Sid,Sname, rating, age):thủy thủBoat(Bid,color): thuyềnReserves(Sid,Bid,ReservedDate):đặt chỗ

Page 31: Tsch   csdl 01 - dhcntt

31

Chứng minh biểu thức đại số quan hệ

Cho q là quan hệ trên tập thuộc tính RS ( R∪S), chứngminh: q ⊆ ∏R( q) ∏S(q)

Chứng minh:Cho t ∈ q, theo đ/n của phép chiếu t[R] ∈ ∏R( q) và

t[S] ∈ ∏S(q)Ta có theo định nghĩa của phép kết:

t[RS] ∈ ∏R( q) ∏S(q)Do vậy t =t[RS] ∈ ∏R( q) ∏S(q)

Page 32: Tsch   csdl 01 - dhcntt

32

Chứng minh biểu thức đại số quan hệ

• Cho quan hệ r(R) , A và B là hai thuộc tính củaquan hệ R, chứng minh:

σ A=a (σ B=b(r) ) = σ B=b (σ A=a(r) )• Chứng minh:

σ A=a (σ B=b(r) ) = σ A=a ({t ∈r | t[B]=b})={t’ ∈ {t ∈ r | t[B]=b}| t’[A]=a }={t ∈r| t[A]=a ∧ t[B]=b }={t’ ∈ {t ∈ r | t[A]=a}| t’[B]=b }=σ B=b (σ A=a(r) )

Page 33: Tsch   csdl 01 - dhcntt

33

Chứng minh biểu thức đại số quan hệ

• Cho 2 quan hệ r, s , A là thuộc tính của quan hệR,S. Chứng minh:

σ A=a (r ∩ s) = σ A=a ( r) ∩ σ A=a(s) )• Chứng minh:

σ A=a (r ∩ s) =σ A=a (t ∈ r ∧ t ∈ s) = { t’ ∈ {t|t ∈ r ∧ t ∈ s}| t[A]=a}={t|t ∈ r và t[A]=a} ∩ {t|t ∈ s và t[A]=a }σ A=a ( r ) ∩ σ A=a ( s )

Page 34: Tsch   csdl 01 - dhcntt

34

Đại số quan hệ và ngôn ngữ SQL

Page 35: Tsch   csdl 01 - dhcntt

35

Toán tử một ngôi (unary operations)

Selectionσ course = ‘Computing’ StudentsIn SQL:Select *From StudentsWhere course = ‘Computing’;

Projectionπ stud#, name Students In SQL:Select stud#, nameFrom Students;

Selection & Projectionπ stud#, name (σ course = ‘Computing’ Students)In SQL:Select stud#, nameFrom studentsWhere course = ‘Computing’;

Page 36: Tsch   csdl 01 - dhcntt

36

Toán tử hai ngôi/kếtBinary Operations/Joins

Tích Descartes: Students X CoursesIn SQL:Select * From Students, Courses;

Theta kết: Students ⋈ <stud# =200> CoursesIn SQL:Select * From Students, CoursesWhere stud# = 200;

Page 37: Tsch   csdl 01 - dhcntt

37

Toán tử hai ngôi/kết

Inner Join (Equijoin): Students ⋈ <course=course#> CoursesIn SQL:Select * From Students, CoursesWhere course=course#;

Natural Join:R1= Students ⋈ <course = course#> CoursesR2= π < stud#, Students.name, course, Courses.name > R1In SQL:Select stud#, Students.name, course, Courses.nameFrom Students, CoursesWhere course=course#;

Page 38: Tsch   csdl 01 - dhcntt

38

Phép kết ngoài (Outer Joins)

Left Outer JoinStudents <course = course#> CoursesIn SQL:Select * From Students, CoursesWhere course = course#(+)

Right Outer JoinStudents <course = course#> CoursesIn SQL:Select * From Students, CoursesWhere course(+) = course#

Page 39: Tsch   csdl 01 - dhcntt

39

Tổ hợp các phép toán một ngôi và hai ngôi

R1= Students ⋈ <course=course#> CoursesR2= σ <address=“Aberdeen”> R1R3= π <Students.name, Course.name> R2

In SQL:Select Students.name, Courses.nameFrom Students, CoursesWhere course=course# AND address=“Aberdeen”;

Page 40: Tsch   csdl 01 - dhcntt

40

Các toán tử tập hợp

Union: R ∪ SIn SQL:Select * From RUnion

Select * From S;

Intersection: R ∩ SIn SQL:Select * From RIntersectSelect * From S;

Difference: R - SIn SQL:Select * From RMinusSelect * From S;

Page 41: Tsch   csdl 01 - dhcntt

41

Các toán tử trong SQL

Between, In, Like, Not

Page 42: Tsch   csdl 01 - dhcntt

42

Các toán tử SQL

SELECT *FROM BookWHERE catno BETWEEN 200 AND 400;

SELECT *FROM ProductWHERE prod_desc BETWEEN ‘C’ AND ‘S’;

SELECT *FROM BookWHERE catno NOT BETWEEN 200 AND 400;

Page 43: Tsch   csdl 01 - dhcntt

43

Các toán tử SQL

SELECT CatnoFROM LoanWHERE Date-Returned IS NULL;

SELECT CatnoFROM LoanWHERE Date-Returned IS NOT NULL;

Page 44: Tsch   csdl 01 - dhcntt

44

Các toán tử SQL

SELECT NameFROM MemberWHERE memno IN (100, 200, 300, 400);

SELECT NameFROM MemberWHERE memno NOT IN (100, 200, 300, 400);

Page 45: Tsch   csdl 01 - dhcntt

45

Các toán tử SQL SELECT Name FROM MemberWHERE address NOT LIKE ‘%Aberdeen%’;

SELECT Name FROM MemberWHERE Name LIKE ‘_ES%’;

Note: In MS Access, use * and # instead of % and _

Page 46: Tsch   csdl 01 - dhcntt

46

Chọn giá trị phân biệt

Studentstud# name address100Fred Aberdeen200Dave Dundee300Bob Aberdeen

SELECT Distinct address FROM Student;

addressAberdeenDundee

Page 47: Tsch   csdl 01 - dhcntt

47

Các bài tập về SQL

Page 48: Tsch   csdl 01 - dhcntt

48

Lược đồ CSDL

• Professor(ssn, profname, status, salary)• Course(crscode, crsname, credits)• Taught(crscode, semester, ssn)

Giá định (1) Mỗi khóa học chỉ có một giáo sư phụ tráchtrong trong mỗi học kỳ; (2) tất cả giáo sư đều có lươngkhác nhau; (3) tất cả giáo sư có tên khác nhau; (4) tất cảkhóa học có tên khác nhau; (5) thuộc tính status có thểcó các giá trị “Full”, “Associate”, và “Assistant”.

Page 49: Tsch   csdl 01 - dhcntt

49

Truy vấn 1

Liệt kê tất cả giáo sư đã dạy khóa họccó mã ‘CSC6710’ nhưng không dạykhóa học có mã ‘CSC7710’.

Page 50: Tsch   csdl 01 - dhcntt

50

Lời giải ĐSQH

πssn(σcrscode=‘CSC6710’(Taught))-πssn(σcrscode=‘CSC7710’(Taught))

Page 51: Tsch   csdl 01 - dhcntt

51

Lời giải SQL

(SELECT ssnFrom TaughtWhere crscode = ‘CSC6710’)EXCEPT(SELECT ssnFrom TaughtWhere crscode = ‘CSC7710’))

Page 52: Tsch   csdl 01 - dhcntt

52

Truy vấn 2

Liệt kê các giáo sư đã dạy các khóa họccó mã ‘CSC6710’ và ‘CSC7710’.

Page 53: Tsch   csdl 01 - dhcntt

53

Đại số quan hệ

πssn(σcrscode=‘CSC6710’ ∧ crscode=‘CSC7710’(Taught), SAI!

πssn(σcrscode=‘CSC6710’(Taught)) ∩πssn(σcrscode=‘CSC7710’(Taught)), ĐÚNG!

Page 54: Tsch   csdl 01 - dhcntt

54

SQL

SELECT T1.ssn From Taught T1, Taught T2,Where T1.crscode = ‘CSC6710’ AND T2.crscode=‘CSC7710’ AND T1.ssn=T2.ssn

Page 55: Tsch   csdl 01 - dhcntt

55

Truy vấn 3

Liệt kê các giáo sư không dạy môn cómã số ‘CSC7710’.

Page 56: Tsch   csdl 01 - dhcntt

56

Đại số quan hệ

πssn(σcrscode<>‘csc7710’(Taught)), SAI!

πssn(Professor)-πssn(σcrscode=‘csc7710’(Taught)), ĐÚNG!

Page 57: Tsch   csdl 01 - dhcntt

57

SQL

(SELECT ssnFrom Professor)EXCEPT(SELECT ssnFrom Taught TWhere T.crscode = ‘CSC7710’)

Page 58: Tsch   csdl 01 - dhcntt

58

Truy vấn 4

Liệt kê các giáo sư đã dạy môn học cómã ‘CSC6710’ và ‘CSC7710” trongcùng một học kỳ

Page 59: Tsch   csdl 01 - dhcntt

59

Đại số quan hệ

πssn(σcrscode1=‘CSC6710’(Taught[crscode1, ssn, semester]) σcrscode2=‘CSC7710’(Taught[crscode2, ssn, semester]))

Page 60: Tsch   csdl 01 - dhcntt

60

SQL

SELECT T1.ssn From Taught T1, Taught T2,Where T1.crscode = ‘CSC6710’ AND T2.crscode=‘CSC7710’ AND T1.ssn=T2.ssn AND T1.semester=T2.semester

Page 61: Tsch   csdl 01 - dhcntt

61

Truy vấn 5

Liệt kê các giáo sư đã dạy môn có mã‘CSC6710’ hay môn học có mã‘CSC7710” nhưng không dạy cả haimôn.

Page 62: Tsch   csdl 01 - dhcntt

62

Đại số quan hệ

πssn(σcrscode=‘CSC6710’ ∨

crscode=‘CSC7710’(Taught))-(πssn(σcrscode=‘CSC6710’(Taught)) ∩πssn(σcrscode=‘CSC7710’(Taught)))

Page 63: Tsch   csdl 01 - dhcntt

63

SQL

(SELECT ssnFROM Taught TWHERE T.crscode=‘CSC6710’ OR T.crscode=‘CSC7710’)Except(SELECT T1.ssn From Taught T1, Taught T2,Where T1.crscode = ‘CSC6710’) AND T2.crscode=‘CSC7710’ AND T1.ssn=T2.ssn)

Page 64: Tsch   csdl 01 - dhcntt

64

Truy vấn 6

Trả về các khóa học không bao giờ mở.

Page 65: Tsch   csdl 01 - dhcntt

65

Đại số quan hệ

πcrscode(Course)-πcrscode(Taught)

Page 66: Tsch   csdl 01 - dhcntt

66

SQL

(SELECT crscodeFROM Course)EXCEPT(SELECT crscodeFROM TAUGHT)

Page 67: Tsch   csdl 01 - dhcntt

67

Truy vấn 7

Liệt kê các khóa học được dạy tối thiểutrong 2 học kỳ.

Page 68: Tsch   csdl 01 - dhcntt

68

Đại số quan hệ

πcrscode(σ semester1 <> semester2(

Taught[crscode, ssn1, semester1] Taught[crscode, ssn2, semester2]))

Page 69: Tsch   csdl 01 - dhcntt

69

SQL

SELECT T1.crscodeFROM Taught T1, Taught T2WHERE T1.crscode=T2.crscode AND T1.semester <> T2.semester

Page 70: Tsch   csdl 01 - dhcntt

70

Truy vấn 8

Liệt kê các khóa học được dạy trong ítnhất là 10 học kỳ.

Page 71: Tsch   csdl 01 - dhcntt

71

SQL

SELECT crscodeFROM TaughtGROUP BY crscodeHAVING COUNT(*) >= 10

Page 72: Tsch   csdl 01 - dhcntt

72

Truy vấn 9

Liệt kê các khóa học được dạy trong ítnhất là 5 giáo sư khác nhau.

Page 73: Tsch   csdl 01 - dhcntt

73

SQL

SELECT crscodeFROM (SELECT DISTINCT crscode, ssn FROM TAUGHT) GROUP BY crscodeHAVING COUNT(*) >= 5

SELECT crscodeFROM Course CWHERE (SELECT COUNT(DISTINCT *) FROM Taught T

WHERE T.crscode = C.crscode) >=5.

Page 74: Tsch   csdl 01 - dhcntt

74

Truy vấn 10

Liệt kê tên các giáo sư đã dạy khóa họccó mã ‘CSC6710’.

Page 75: Tsch   csdl 01 - dhcntt

75

Đại số quan hệ

πprofname(σcrscode=‘CSC6710’(Taught) Professor)

Page 76: Tsch   csdl 01 - dhcntt

76

SQL

SELECT P.profnameFROM Professor P, Taught TWHERE P.ssn = T.ssn AND T.crscode = ‘CSC6710’

Page 77: Tsch   csdl 01 - dhcntt

77

Truy vấn 11

Liệt kê tên của các full professors đãdạy môn học có mã ‘CSC6710’.

Page 78: Tsch   csdl 01 - dhcntt

78

Đại số quan hệ

πprofname(σcrscode=‘csc6710’(Taught) σstatus=‘full’(Professor))

Page 79: Tsch   csdl 01 - dhcntt

79

SQL

SELECT P.profnameFROM Professor P, Taught TWHERE P.status = ‘full’ AND P.ssn = T.ssn AND T.crscode = ‘CSC6710’

Page 80: Tsch   csdl 01 - dhcntt

80

Truy vấn 12

Liệt kê tên của các full professors đãdãy ít nhất là 2 khóa học trong một họckỳ.

Page 81: Tsch   csdl 01 - dhcntt

81

Đại số quan hệ

πprofname(πssn(σ crscode1 <> crscode2(

Taught[crscode1, ssn, semester] Taught[crscode2, ssn, semester])))

σ status=‘full’(Professor))

Page 82: Tsch   csdl 01 - dhcntt

82

SQL

SELECT P.profnameFROM Professor P, Taught T1, Taught T2WHERE P.status = ‘Full’ AND P.ssn = T1.ssn AND T1.ssn = T2.ssnAND T1.crscode <> T2.crscode AND T1.semester = T2.semester

Page 83: Tsch   csdl 01 - dhcntt

83

SQL

SELECT P.profnameFROM Professor PWHERE status = ‘Full’ AND ssn IN(SELECT ssnFROM TaughtGROUP BY ssn, semesterHAVING COUNT(*) >= 2)

Page 84: Tsch   csdl 01 - dhcntt

84

Truy vấn 13

Xóa các giáo sư không dạy khóa họcnào.

Page 85: Tsch   csdl 01 - dhcntt

85

SQL

DELETE FROM ProfessorWHERE ssn NOT IN(SELECT ssnFROM Taught)

Page 86: Tsch   csdl 01 - dhcntt

86

SQL

DELETE FROM ProfessorWHERE ssn IN((SELECT ssn FROM Professor)EXCEPT(SELECT ssn FROM Taught))

Page 87: Tsch   csdl 01 - dhcntt

87

SQL

DELETE FROM Professor PWHERE NOT EXISTS(SELECT * FROM Taught T WHERE T.ssn = P.ssn)

Page 88: Tsch   csdl 01 - dhcntt

88

Truy vấn 14

Đổi tất cả tín chỉ (credits) sang 4 chocác khóa học được giảng dạy trong họckỳ mùa thu năm 2006 (f2006 semester).

Page 89: Tsch   csdl 01 - dhcntt

89

SQL

UPDATE CourseSET credits = 4WHERE crscode IN(

SELECT crscodeFROM Taught WHERE semester = ‘f2006’

)

Page 90: Tsch   csdl 01 - dhcntt

90

Truy vấn 15

Liệt kê tên của các giáo sư đã dạy hơn30 tín chỉ khóa học.

Page 91: Tsch   csdl 01 - dhcntt

91

SQL

SELECT profnameFROM ProfessorWHERE ssn IN(

SELECT T.ssnFROM Taught T, Course CWHERE T.crscode = C.crscodeGROUP BY T.ssnHAVING SUM(C.credits) > 30

)

Page 92: Tsch   csdl 01 - dhcntt

92

Truy vấn 16

Liệt kê tên của các giáo sư đã dạy nhiềukhóa học nhất trong học kỳ mùa xuânnăm 2006 (S2006).

Page 93: Tsch   csdl 01 - dhcntt

93

SQL

SELECT profnameFROM Professor WHERE ssn IN(

SELECT ssn FROM Taught WHERE semester = ‘S2006’GROUP BY ssnHAVING COUNT(*) =

(SELECT MAX(Num)FROM

(SELECT ssn, COUNT(*) as NumFROM TaughtWHERE semester = ‘S2006’GROUP BY ssn)

))

Page 94: Tsch   csdl 01 - dhcntt

94

Truy vấn 17

Liệt kê tên các khóa học mà giáo sư‘Smith” đã dạy trong học kỳ mùa thunăm 2007.

Page 95: Tsch   csdl 01 - dhcntt

95

Đại số quan hệ

πcrsname(σprofname=‘Smith’(Professor) σsemester=‘f2007’(Taught)

Course)

Page 96: Tsch   csdl 01 - dhcntt

96

SQL

SELECT crsnameFROM Professor P, Taught T, Course CWHERE P.profname = ‘Smith’ AND P.ssn = T.ssn AND T.semester = ‘F2007’ AND T.crscode = C.crscode

Page 97: Tsch   csdl 01 - dhcntt

97

Truy vấn 18

Hãy liệt kê theo thứ tự thời gian cáckhóa học mà giáo sư có mã số ssn = 123456789 đã dạy trong từng học kỳ.

Page 98: Tsch   csdl 01 - dhcntt

98

SQL

SELECT semester, COUNT(*)FROM TaughtWHERE ssn = ‘123456789’GROUP BY semesterORDER BY semester ASC

Page 99: Tsch   csdl 01 - dhcntt

99

Truy vấn 19

Hãy liệt kê theo thứ tự từ điển tên củatừng giáo sư và số các khóa học đãgiảng dạy.

Page 100: Tsch   csdl 01 - dhcntt

100

SQL

SELECT P.profname, COUNT(*)FROM Professor P, Taught TWHERE P.ssn = T.ssnGROUP BY P.ssn, P.profnameORDER BY P.profname ASC

Page 101: Tsch   csdl 01 - dhcntt

101

Truy vấn 20

Xóa các giáo sư đã dạy ít hơn 10 khóahọc.

Page 102: Tsch   csdl 01 - dhcntt

102

SQL

DELETE FROM ProfessorWHERE ssn IN(

SELECT ssnFROM TaughtGROUP BY ssnHAVING COUNT(*) < 10

)

Page 103: Tsch   csdl 01 - dhcntt

103

Truy vấn 21

Xóa các giáo sư đã dạy ít hơn 40 tínchỉ.

Page 104: Tsch   csdl 01 - dhcntt

104

SQL

DELETE FROM ProfessorWHERE ssn IN(

SELECT T.ssnFROM Taught T, Course CWHERE T.crscode = C.crscodeGROUP BY ssnHAVING SUM(C.credits) < 40

)

Page 105: Tsch   csdl 01 - dhcntt

105

Truy vấn 22

Liệt kê các giáo sư không dạy bất kỳkhóa học nào trong 3 học kỳ (F2006, W2007, F2007).

Page 106: Tsch   csdl 01 - dhcntt

106

SQL

SELECT *FROM Professor PWHERE NOT EXISTS(

SELECT *FROM TaughtWHERE P.ssn = T.ssn AND (T.semester = ‘F2006’ OR T.semester = ‘W2007’ OR T.semester=‘F2007’))

)

Page 107: Tsch   csdl 01 - dhcntt

107

Truy vấn 23

Liệt kê tên các khóa học mà giáo sưSmith không dạy.

Page 108: Tsch   csdl 01 - dhcntt

108

Đại số quan hệ

πcrsname(Course) -πcrsname(σprofname=‘Smith’(Professor) (Taught) Course)

Page 109: Tsch   csdl 01 - dhcntt

109

SQL

SELECT crsnameFROM Course CWHERE NOT EXISTS

SELECT *FROM Professor P, Taught TWHERE P.profname=‘Smith’ AND P.ssn = T.ssn AND

T.crscode = C.crscode)

Page 110: Tsch   csdl 01 - dhcntt

110

Truy vấn 24

Liệt kê tên các khóa học được giảngdạy bởi tất cả giáo sư.

Page 111: Tsch   csdl 01 - dhcntt

111

Đại số quan hệ

πcrscode, ssn(Taught)/ πssn(Professor)

Page 112: Tsch   csdl 01 - dhcntt

112

SQL

SELECT crscodeFROM Taught T1WHERE NOT EXISTS(

(SELECT ssnFROM Professor)EXCEPT(SELECT ssnFROM Taught T2WHERE T2.crscode = T1.crscode)

)

Page 113: Tsch   csdl 01 - dhcntt

113

Truy vấn 25

Liệt kê tên của các khóa học đượcgiảng dạy trong tất cả các học kỳ.

Page 114: Tsch   csdl 01 - dhcntt

114

Đại số quan hệ

πcrscode, semester(Taught)/ πsemester(Taught)

Page 115: Tsch   csdl 01 - dhcntt

115

SQL

SELECT crscodeFROM Taught T1WHERE NOT EXISTS(

(SELECT semesterFROM Taught)EXCEPT(SELECT semesterFROM Taught T2WHERE T2.crscode = T1.crscode)

)

Page 116: Tsch   csdl 01 - dhcntt

116

Truy vấn 26

Liệt kê các khóa học CHỈ được giảngdạy bởi các trợ lý giáo sư (assisitant) professors.

Page 117: Tsch   csdl 01 - dhcntt

117

Đại số quan hệ

πcrscode(Course) - πcrscode(σstatus≠‘Assistant’(Professor) Taught)

Page 118: Tsch   csdl 01 - dhcntt

118

SQL

SELECT crscodeFROM Course CWHERE c.crscode NOT IN(

(SELECT crscodeFROM Taught T, Professor PWHERE T.ssn = P.ssn AND P.status=‘Junior’

)

Page 119: Tsch   csdl 01 - dhcntt

119

Truy vấn 27

Liệt kê tên của các giáo sư giảng dạynhiều khóa học nhất trong học kỳ Fall 2001.

Page 120: Tsch   csdl 01 - dhcntt

120

SQL SolutionSELECT *FROM Professor P1WHERE Not EXISTS(

SELECT * FROM Professor P2WHERE(

(SELECT COUNT(*)FROM Taught WHERE Taught.ssn = P2.ssn AND

Taught.semester=‘F2001’)> (SELECT COUNT(*)FROM Taught WHERE Taught.ssn = P1.ssn AND

Taught.semester=‘F2001’))

Page 121: Tsch   csdl 01 - dhcntt

121

Truy vấn 28

Liệt kê tên của giáo sư có lương caonhất.

Page 122: Tsch   csdl 01 - dhcntt

122

SQL Solution

SELECT *FROM ProfessorWHERE salary = (

(SELECT MAX(salary)FROM Professor P

)

Page 123: Tsch   csdl 01 - dhcntt

123

Truy vấn 29

Liệt kê tên của giáo sư có lương caoxếp thứ nhì.

Page 124: Tsch   csdl 01 - dhcntt

124

SQL Solution

SELECT *FROM Professor P1WHERE 1 = (

(SELECT COUNT(*)FROM Professor P2WHERE P2.salary > P1.salary

)