Minh hoạt Đại số quan hệ và SQL song song
Danh sách mã, tên của các phòng ban có chủtrì đềán
tên là “SPX” mà không có chủtrì đềán tên là “SPY”.
KQ1 ← ∏PHONG(σTENDA=’SPX’DEAN) - ∏PHONG(σTENDA=’SPY’DEAN)
∏MAPB, TENPB (KQ1 ⋈ PHONG = MAPB(PHONGBAN))
SELECT MAPB, TENPB
FROM PHONGBAN, DEAN
WHERE MAPB = PHONG AND TENDA = ‘SPX’ AND
MAPB NOT IN (SELECT PHONG
FROM DEAN
WHERE TENDA = ‘SPY’)
ADA = 5)}
5. Hiệu: Cho ds các mã nhân viên có tham gia đề án số 4 mà không có tham gia đề
án số 5.
∏MANV (σMADA =4 (PHANCONG)) - ∏MANV (σMADA =5 (PHANCONG))
SELECT MANV
FROM PHANCONG
WHERE MADA =4 AND MANV NOT IN (SELECT MANV
FROM PHANCONG
WHERE MADA =5)
6. Cho biết danh sách thể hiện mọi nhân viên đều tham gia tất cả các đề án.
∏MANV(NHANVIEN) × ∏MADA (DEAN)
SELECT MANV, MADA
FROM NHANVIEN, DEAN
7. Cho ds các nhân viên và thông tin phòng ban mà nhân viên đó trực thuộc.
∏ MANV, HONV, TENLOT, TENNV, MAPB, TENPB (NHANVIEN ⋈ PHG = MAPB PHONGBAN)
SELECT MANV, HONV, TENLOT, TENNV, MAPB, TENPB
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
8. Cho ds các phòng ban và địa điểm phòng ban.
∏MAPB, TENPB, DIADIEM (PHONGBAN * DIADIEM_PHG)
SELECT MAPB, TENPB, DIADIEM
FROM PHONGBAN PB, DIADIEM_PHG DD
WHERE PB.MAPB = DD.MAPB
9. GÁN:
KQ1 ← (PHONGBAN * DIADIEM_PHG)
KQ ← ∏MAPB, TENPB, DIADIEM ( KQ1)
CREATE VIEW DDPHONG
AS SELECT *
FROM PHONGBAN PB, DIADIEM DD
WHERE PB.MAPB = DD.MAPB
SELECT MAPB, TENPB, DIADIEM
FROM DDPHONG
10. Cho biết có tất cả bao nhiêu nhân viên.
ρSOLUONGNV(ℑCOUNT(*) (NHANVIEN))
KQ là 1 quan hệ có 1 cột (SOLUONGNV) và 1 dòng
SELECT COUNT(*) AS SOLUONGNV
FROM NHANVIEN
11. Cho biết mỗi phòng ban có bao nhiêu nhân viên (MAPB, TENPB, SLNV).
PHG ℑCOUNT(*) (NHANVIEN) là 1 quan hệ có 2 trường: PHG, COUNT(*)
∏MAPB,TENPB, SLNV ( ρPHG, SLNV((PHG ℑCOUNT(*) (NHANVIEN))) ⋈ PHG = MAPB
PHONGBAN )
SELECT PHG, TENPB, COUNT(*) AS SLNV
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
GROUP BY PHG, TENPB
12. Cho biết tổng lương, số lượng nv, lương trung bình, lương bé nhất trong toàn
công ty.
ρTONGLUONG,SLNV, LUONGTB, MINLUONG, MAXLUONG (ℑSUM(LUONG), COUNT(*), AVG(LUONG),
MIN(LUONG), MAX (LUONG) (NHANVIEN))
SELECT SUM(LUONG) AS TONGLUONG, COUNT(*) AS SLNV,
AVG(LUONG) AS LUONGTB, MIN(LUONG) AS MINLUONG, MAX (LUONG)
AS MAXLUONG
FROM NHANVIEN
13. Cho danh sách các nhân viên thuộc phòng ‘Nghiên cứu’
∏MANV, HONV, TENLOT, TENNV, PHAI (NHANVIEN ⋈ PHG = MAPB (σTENPB=’NGHIEN CUU’ (PHONGBAN)))
SELECT MANV, HONV, TENLOT, TENNV, PHAI
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB AND TENPB = N‘Nghiên cứu’
14. Đối với từng nv, cho biết họ tên ngày sinh và tên của nv phụ trách trực tiếp nhân
viên đó.
∏NV1.MANV, NV1.HONV, NV1.TENLOT, NV1.TENNV, NV1.NGAYSINH, NV2.HONV, NV2.TENLOT, NV2.TENNV
(ρNV1(NHANVIEN)) ⋈NV1.MANQL = NV2.MANV (ρNV2 (NHANVIEN))
SELECT NV1.MANV, NV1.HONV, NV1.TENLOT, NV1.TENNV, NV1.NGAYSINH, NV2.HONV,
NV2.TENLOT, NV2.TENNV
FROM NHANVIEN NV1, NHANVIEN NV2
WHERE NV1.MANQL = NV2.MANV
15. Ds nv thuộc phòng 5 có tham gia đề án tên là ‘Sản phẩm X’.
∏ MANV, HONV, TENLOT, TENNV (((σPHG =5 NHANVIEN) ⋈ MANV = MA_NVIEN
PHANCONG)) * (σTENDA= ‘SAN PHAM X’ DEAN))
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN, PHANCONG PC, DEAN DA
WHERE MANV = MA_NVIEN AND PC.MADA = DA.MADA AND PHG = 5
AND TENDA = ‘San pham X’
16. Tương tự 5, thuộc phòng ‘nghiên cứu’ có tham gia đề án tên là ‘Sản phẩm X’.
∏ MANV, HONV, TENLOT, TENNV (( NHANVIEN ⋈PHG = MAPHG (σTENPHG= ‘NGHIEN CUU’
PHONGBAN) ⋈ MANV = MA_NVIEN PHANCONG) * (σTENDA= ‘SAN PHAM X’
DEAN))
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN, PHONGBAN, PHANCONG PC, DEAN DA
WHERE PHG = MAPHG AND MANV = MA_NVIEN AND PC.MADA =
DA.MADA AND TENPHG = ‘NGHIEN CUU’ AND TENDA = ‘San pham X’
17. Ds nhân viên có tham gia đề án.
∏ MANV, HONV, TENLOT, TENNV (NHANVIEN ⋈ MANV = MA_NVIEN PHANCONG)
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN, PHANCONG
WHERE MANV = MA_NVIEN
18. Ds nhân viên không có tham gia đề án nào.
∏ MANV, HONV, TENLOT, TENNV ((∏ MANV(NHANVIEN) - ∏ MA_NVIEN(PHANCONG)) *
NHANVIEN)
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE MANV NOT IN (SELECT MA_NVIEN FROM PHANCONG)
19. Mỗi nv tham gia bao nhiêu đề án với tổng thời gian là
bao nhiêu.
∏ MANV, HONV, TENLOT, TENNV ((ρMANV,SOLUONGDA, TONGTG (MA_NVIEN ℑCOUNT(*),
SUM(THOIGIAN) (PHANCONG))) * NHANVIEN)
SELECT MA_NVIEN, HONV, TENLOT, TENNV, COUNT(*) AS SOLUONGDA,
SUM(THOIGIAN) AS TONGTG
FROM PHANCONG, NHANVIEN
WHERE MA_NVIEN = MANV
GROUP BY MA_NVIEN, HONV, TENLOT, TENNV
20. Ds nv có tham gia đề án tên là ‘Sản phẩm X ’ hoặc ‘Sản
phẩm Y’.
KQ1 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM X’ DEAN))
KQ2 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM Y’ DEAN))
∏ MANV, HONV, TENLOT, TENNV ((KQ1 ∪ KQ2 ) ⋈ MA_NVIEN = MANV NHANVIEN)
SELECT MANV, HONV, TENLOT, TENNV
FROM DEAN DA, PHANCONG PC, NHANVIEN
WHERE (TENDA = ‘SAN PHAM X’ OR TENDA = ‘SAN PHAM Y’) AND
DA.MADA = PC.MADA AND MANV = MA_NVIEN
21. Ds nv vừa có tham gia đề án tên ‘Sản phẩm X’ vừa có
tham gia đề án ‘Sản phẩm Y’.
KQ1 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM X’ DEAN))
KQ2 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM Y’ DEAN))
∏ MANV, HONV, TENLOT, TENNV ((KQ1 ∩ KQ2 ) ⋈ MA_NVIEN = MANV NHANVIEN)
SELECT MANV, HONV, TENLOT, TENNV
FROM PHANCONG PC, DEAN DA, NHANVIEN
WHERE PC.MADA = DA.MADA AND MA_NVIEN = MANV AND TENDA =
‘SAN PHAM X’ AND MANV IN (SELECT MA_NVIEN
FROM PHANCONG PC1, DEAN DA1
WHERE PC1.MADA = DA1.MADA AND TENDA = ‘SAN PHAM Y’)
22. Ds nv có tham gia đề án tên ‘Sản phẩm X’ mà không có
tham gia đề án tên là ‘Sản phẩm Y’.
KQ1 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM X’ DEAN))
KQ2 ← ∏ MA_NVIEN (PHANCONG * (σTENDA= ‘SAN PHAM Y’ DEAN))
∏ MANV, HONV, TENLOT, TENNV ((KQ1 - KQ2 ) ⋈ MA_NVIEN = MANV NHANVIEN)
SELECT MANV, HONV, TENLOT, TENNV
FROM PHANCONG PC, DEAN DA, NHANVIEN
WHERE PC.MADA = DA.MADA AND MA_NVIEN = MANV AND TENDA =
‘SAN PHAM X’ AND MANV NOT IN (SELECT MA_NVIEN
FROM PHANCONG PC1, DEAN DA1
WHERE PC1.MADA = DA1.MADA AND TENDA = ‘SAN PHAM Y’)
23. Ds nv chỉ có tham gia đề án tên ‘Sản phẩm X’.
SELECT MANV, HONV, TENLOT, TENNV
FROM PHANCONG PC, DEAN DA, NHANVIEN NV
WHERE PC.MADA = DA.MADA AND MA_NVIEN = MANV AND TENDA =
‘SAN PHAM X’ AND (SELECT COUNT(*)
FROM PHANCONG
WHERE MA_NVIEN = NV.MANV) =1
24. Ds các đề án chỉ do các nv thuộc phòng “Nghiên cứu”
thực hiện.
SELECT MADA, TENDA
FROM DEAN DA, PHANCONG PC, NHANVIEN,
PHONGBAN
WHERE DA.MADA = PC. MADA AND MA_NVIEN =
MANV AND PHG = MAPB AND TENPB = ‘NGHIEN CUU’
AND NOT EXISTS
(SELECT *
FROM PHANCONG, NHANVIEN, PHONGBAN
WHERE MA_NVIEN = MANV AND PHG = MAPB AND
TENPB ‘NGHIEN CUU’)
25. Ds các nv có tham gia tất cả các đề án.
KQ1 ← ∏ MA_NVIEN, MADA (PHANCONG) : ∏ MADA (DEAN)
∏ MANV, HONV, TENLOT, TENNV (KQ1 ⋈ MA_NVIEN = MANV NHANVIEN)
SELECT MA_NVIEN, HONV, TENLOT, TENNV
FROM PHANCONG PC1, NHANVIEN
WHERE MA_NVIEN = MANV AND
NOT EXISTS (SELECT *
FROM DEAN DA
WHERE NOT EXISTS (SELECT * FROM PHANCONG PC2
WHERE PC2.MADA = DA.MADA AND PC2.MA_NVIEN =
PC1.MANVIEN))
{nv.MANV, nv.HONV, nv.TENLOT, nv.TENNV|
NHANVIEN(nv) ∧ (∀d) DEAN(d) (∃p) PHANCONG(p) ∧
p.MA_NVIEN = nv.MANV∧ p.MADA=d.MADA}
R: A, B ; S:B
R:S
SELECT A
FROM R R1
WHERE NOT EXISTS (SELECT *
FROM S
WHERE NOT EXISTS (SELECT *
FROM R R2
WHERE R2.B = S.B
AND R2.A = R1.A))
26. Ds nv thuộc phòng ‘Nghiên cứu’ có tham gia tất cả các
đề án do phòng số 5 chủ trì.
KQ1 ← ∏ MA_NVIEN, MADA (PHANCONG) : ∏ MADA (σPHONG=5 DEAN)
∏ MANV, HONV, TENLOT, TENNV (KQ1 ⋈ MA_NVIEN = MANV (NHANVIEN ⋈ PHG = MAPB
σTENPB=’NGHIEN CUU’ PHONGBAN))
SELECT MA_NVIEN, HONV, TENLOT, TENNV
FROM PHANCONG PC1, NHANVIEN, PHONGBAN
WHERE MA_NVIEN = MANV AND PHG = MAPB AND
TENPB = ‘NGHIEN CUU’
AND NOT EXISTS (SELECT *
FROM DEAN DA
WHERE PHONG = 5
AND NOT EXISTS (SELECT * FROM PHANCONG PC2
WHERE PC2.MADA = DA.MADA AND PC2.MA_NVIEN =
PC1.MANVIEN))
27. Cho biết lương trung bình của các phòng ban (mã, tên,
lương TB).
SELECT PHG, TENPB, AVG(LUONG) AS LUONGTB
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
GROUP BY PHG,TENPB
28. Cho biết các phòng ban có lương trung bình > 2500.
SELECT PHG, TENPB, AVG(LUONG) AS LUONGTB
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
GROUP BY PHG,TENPB
HAVING AVG(LUONG) >= 2500
29. Cho biết các phòng ban có chủ trì đề án có số nhân
viên > 3 và có lương trung bình lớn hơn 2500.
SELECT MAPB, TENPB
FROM PHONGBAN PB, DEAN
WHERE MAPB = PHONG AND (SELECT COUNT(*) FROM
PHONGBAN WHERE MAPB = PB.MABP) > 3 AND
(SELECT AVG(LUONG) FROM PHONGBAN WHERE
MAPB = PB.MAPB> > 2500
30. Cho biết nhân viên nào có lương cao nhất trong từng
phòng ban.
SELECT MANV, HONV, TENLOT, TENNV, LUONG
FROM NHANVIEN NV
WHERE LUONG = (SELECT MAX(LUONG)
FROM NHANVIEN
WHERE PHG = NV.PHG)
31. Cho biết phòng ban nào có lương trung bình cao nhất.
SELECT PHG, TENPB, AVG(LUONG) AS LUONGTB
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
GROUP BY PHG,TENPB
HAVING AVG(LUONG) >= ALL (SELECT AVG(LUONG)
FROM NHANVIEN
GROUP BY PHG)
32. Cho biết phòng ban nào có ít nhân viên nhất.
SELECT PHG, TENPB, COUNT(*) AS SONV
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB
GROUP BY PHG,TENPB
HAVING COUNT(*) <= ALL (SELECT COUNT(*)
FROM NHANVIEN
GROUP BY PHG)
33. Cho biết phòng ban nào có đông nhân viên nữ nhất.
SELECT PHG, TENPB, COUNT(*) AS SONVNU
FROM NHANVIEN, PHONGBAN
WHERE PHG = MAPB AND PHAI = ‘NU’
GROUP BY PHG,TENPB
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM NHANVIEN
WHERE PHAI = ‘NU’
GROUP BY PHG)
34. Danh sách mã, tên của các phòng ban có chủ trì đề án
tên là “SPX” lẫn “SPY”.
KQ1 ← ∏PHONG (σTENDA=’SPX’ DEAN) ∩ ∏PHONG (σTENDA=’SPY’ DEAN)
∏MAPB, TENPB (KQ1 ⋈ PHONG = MAPB (PHONGBAN))
SELECT MAPB, TENPB
FROM PHONGBAN, DEAN
WHERE MAPB = PHONG AND TENDA = ‘SPX’ AND
MAPB IN (SELECT PHONG
FROM DEAN
WHERE TENDA = ‘SPY’)
35. Danh sách mã, tên của các phòng ban có chủ trì đề án
tên là “SPX” mà không có chủ trì đề án tên là “SPY”.
KQ1 ← ∏PHONG (σTENDA=’SPX’ DEAN) - ∏PHONG (σTENDA=’SPY’ DEAN)
∏MAPB, TENPB (KQ1 ⋈ PHONG = MAPB (PHONGBAN))
SELECT MAPB, TENPB
FROM PHONGBAN, DEAN
WHERE MAPB = PHONG AND TENDA = ‘SPX’ AND
MAPB NOT IN (SELECT PHONG
FROM DEAN
WHERE TENDA = ‘SPY’)
File đính kèm:
MINH_HOA_DSQH_VA_SQL_SONG_SONG.pdf

