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