CHƯƠNG 5 NGÔN NGỮ SQL

KNOWLEDGE FOR SHARE

Tài liệu tham khảo

[1] Đỗ Phúc, Nguyễn Đăng Tỵ. Giáo trình cơ sở dữ liệu. Đại học Quốc gia Tp.HCM.

[2] Đồng Thị Bích Thủy.

Giáo trình cơ sở dữ liệu. Đại học Quốc gia Tp.HCM.

[3] Trần Ngọc Bảo.

Slide bài giảng CSDL Đại học Sư Phạm TP.HCM

[4] Lê Minh Triết.

Slide bài giảng CSDL Đại học Sư Phạm TP.HCM

2 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

Phép chia trong SQL

RS S D E A B C R A B C D E

bi

ai

    a 1 a a a 1

    b 1 a a a 1

  a b 1

  a a 1

  a b 3

  a a 1

  a b 1

  a b 1

RS là tập các giá trị ai trong R sao cho không có giá trị bi nào trong S làm cho bộ (ai, bi) không tồn tại trong R

3 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)  Được dùng để lấy ra một số bộ trong quan hệ R sao cho

thỏa với tất cả các bộ trong quan hệ S

 Ký hiệu R  S

– R(Z) và S(X)

• Z là tập thuộc tính của R, X là tập thuộc tính của S • X  Z

 Kết quả của phép chia là một quan hệ T(Y)

– Với Y=Z-X – Có t là một bộ của T nếu với mọi bộ tSS, tồn tại bộ

R(Z) S(X) T(Y)

X Y

tRR thỏa 2 điều kiện • tR(X) = tS(X) • tR(Y) = t

4 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)

S D E R A B C D E

  a 1 a a 1

  b 1 a a 1

  a b 1

  a a 1

  a b 3

R  S

  a a 1

  a b 1 A B C

  a b 1   a

  a

5 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)

 Cho biết nhân viên tham gia tất cả các đề án

– Quan hệ: PHANCONG, DEAN – Thuộc tính: MANV

πMANV(PHANCONG ÷DEAN)

6 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)

 Cho biết nhân viên tham gia tất cả các đề án

do phòng số 4 phụ trách – Quan hệ: PHANCONG, DEAN – Thuộc tính: MANV – Điều kiện: PHG=4

πMANV(σPHONG=4(PHANCONG ÷DEAN))

7 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)

 Biểu diễn phép chia thông qua tập đầy đủ các phép toán ĐSQH (xem khái niệm tập đầy đủ ở slide sau)

R(Z) S(X) T(Y)

 Các bước:

X Y

 Chọn Y trên R  Tích RY x S  ((RY x S)-R)Y

X:DA Y:NV Z:PCôg

Q1  Y(R) Q2  Q1  S Q3  Y(Q2  R) (Q3: Đến đây ta tìm ra những Y

không tham gia đầy đủ vào S)

T  Q1  Q3

 RY - ((RY x S)-R)Y

8 5/3/2013

KNOWLEDGE FOR SHARE

3. Phép toán tập hợp

Phép chia ÷ (Division)

R MADA MANV

S MADA

DA01 NV01

DA01

DA01 NV02

DA02

DA02 NV01

DA03

Q3= Y(Q2  R) MANV

Q2=Q1xS MADA MANV

DA03 NV01

NV02

DA01 NV01 *

DA01 NV02 *

Q1=RY MANV

DA02 NV01 *

NV01

T MANV

DA02 NV02

NV02

NV01

DA03 NV01 *

DA03 NV02

9 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

SELECT R1.A, R1.B, R1.C

Phép chia trong SQL

FROM R R1

WHERE NOT EXISTS (

SELECT *

FROM S

WHERE NOT EXISTS (

Sử dụng NOT EXISTS để biểu diễn

SELECT *

FROM R R2

WHERE R2.D=S.D AND R2.E=S.E

AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C

)

)

10 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

Phép chia trong SQL

Sử dụng truy vấn lồng để biểu diễn phép chia

SELECT R.A,R.B,R.C FROM R WHERE R.A+R.B+R.C NOT IN

(

SELECT Q2.A+Q2.B+Q2.C FROM (SELECT R.A,R.B,R.C,S.* FROM R,S) Q2 WHERE Q2.A+Q2.B+Q2.C+Q2.D+Q2.E NOT IN

(SELECT R.A+R.B+R.C+R.D+R.E FROM R)

) -- Q3 LÀ A,B,C KHÔNG THAM GIA ĐẦY ĐỦ VÀO S

11 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

Phép chia trong SQL

Sử dụng hàm count

SELECT MANV,COUNT(MADA) FROM PHANCONG GROUP BY MANV HAVING COUNT(MADA)=(SELECT COUNT(MADA) FROM DEAN)

12 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

Phép chia trong SQL

 Tìm tên các nhân viên được phân công làm tất

cả các đề án

– Tìm tên các nhân viên mà không có đề án nào là

không được phân công làm

– Tập bị chia: PHANCONG(MA_NVIEN, MADA)

– Tập chia: DEAN(MADA)

– Tập kết quả: KQ(MA_NVIEN)

– Kết KQ với NHANVIEN để lấy ra TENNV

13 5/3/2013

KNOWLEDGE FOR SHARE

4. Truy vấn dữ liệu

Phép chia trong SQL

SELECT NV.TENNV

FROM NHANVIEN NV, PHANCONG PC1

WHERE NV.MANV=PC1.MANV

AND NOT EXISTS (

SELECT *

FROM DEAN DA

WHERE NOT EXISTS (

SELECT *

FROM PHANCONG PC2

WHERE PC2.MADA=DA.MADA

AND PC1.MANV=PC2.MANV ))

14 5/3/2013

HẾT