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

Upload: anhhuycan83

Post on 07-Jul-2015

141 views

Category:

Education


2 download

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

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

)