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
RS 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
RS 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ộ tSS, tồn tại bộ
R(Z) S(X) T(Y)
X Y
tRR 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

