Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
313,6 KB
Nội dung
NGÔNNGỮSQLCáctruyvấnlồngnhau Để tìm mã số và tên những nhân viên phòng ‘Kỹ thuật’ có thể dùng câu truyvấn sau SELECT manv, ho_ten FROM nhan_vien WHERE ma_dv IN (SELECT ma_dv FROM phong WHERE ten_phong = ‘Kỹ thuật’); 58 59 NGÔNNGỮSQLCáctruyvấnlồngnhau Xét câu hỏi: ‘Tìm tên của những nhân viên có lương đạt trên mức lương trung bình của tất cả các nhân viên, đồng thời cho biết luôn mức chênh lệch này’ SELECT ho_ten , luong – (SELECT AVG(luong) FROM nhan_vien) AS hieu FROM nhan_vien WHERE luong > (SELECT AVG(luong) FROM nhan_vien); 60 NGÔNNGỮSQLCáctruyvấnlồngnhau Câu ORDER BY không được sử dụng trong một câu truyvấn con mặc dù nó có thể được dùng trong câu truyvấn ngoài cùng. Danh sách các mục được liệt kê bởi câu truyvấn con SELECT phải chứa tên của một cột hoặc một biểu thức trừ phi câu truyvấn con này dùng từ khóa EXISTS. 61 NGÔNNGỮSQL Các truyvấnlồngnhau Theo ngầm định, các tên cột trong câu truyvấn con tham chiếu đến tên bảng trong câu FROM của truyvấn con này, hoặc có thể tham chiếu đến bảng trong câu FROM của truyvấn ngoài bằng việc xác định tên cột đó. Khi một câu truyvấn con là một trong hai toán hạng của một biểu thức so sánh thì truyvấn con này phải xuất hiện ở vế phải của so sánh. 62 NGÔNNGỮSQL Các truyvấnlồngnhau Muốn biết thông tin về những nhân viên làm việc cho đơn vị có địa điểm là ’23 Lý Thường Kiệt’, có thể dùng truyvấn như sau SELECT * FROM nhan_vien WHERE ma_dv IN (SELECT ma_dv FROM dia_diem_dv WHERE dia_diem = ’23 Lý Thường Kiệt); 63 NGÔNNGỮSQL Các truyvấnlồngnhau “ Tìm tên và lương của những người có lương cao hơn lương mọi nhân viên thuộc đơn vị mã P2 “. SELECT ho_ten FROM nhan_vien WHERE luong > ALL (SELECT luong FROM nhan_vien WHERE ma_dv = ’P2’); 64 NGÔNNGỮSQLCáctruyvấnlồngnhau Câu hỏi “ Cho biết thông tin về những nhân viên có lương cao hơn ít nhất một nhân viên làm ở phòng kỹ thuật” SELECT ho_ten FROM nhan_vien WHERE luong > SOME (SELECT luong FROM nhan_vien WHERE ma_dv IN (SELECT ma_dv FROM phong WHERE ten_phong = ‘Kỹ thuật’) ); 65 NGÔNNGỮSQLCáctruyvấnlồngnhau “Cho biết tên phòng có trung bình lương cao nhất” sẽ được viết là SELECT ten_phong FROM phong WHERE ma_dv IN (SELECT ma_dv FROM nhan_vien GROUP BY ma_dv HAVING AVG(luong) >= ALL (SELECT AVG(luong) FROM nhan_vien GROUP BY ma_dv) ); 66 NGÔNNGỮSQL Dùng các biến bộ Để tìm thông tin về tên và lương của trưởng phòng nghiên cứu phát triển SELECT nv.ho_ten, nv.luong FROM nhan_vien nv, phong p WHERE nv.manv = p.ma_tp AND p.ten_phong = ‘Nghiên cứu và phát triển’ Các biến bộ rất hữu ích trong việc so sánh hai bộ trong cùng một quan hệ. 67 NGÔNNGỮSQL Dùng các biến bộ Có thể tìm nhân viên có lương cao hơn ít nhất lương của một nữ nhân viên bằng câu lệnh sau : SELECT DISTINCT nv.ho_ten, nv.luong FROM nhan_vien a, nhan_vien b WHERE a.luong > b.luong AND b.gioi_tinh = ‘nu’ [...]...NGÔN NGỮSQL Các quan hệ được dẫn xuất và khung nhìn SQL- 92 cho phép dùng câu hỏi con trong câu FROM, trong đó bảng kết quả của câu hỏi con phải được đặt tên và các cột được phép đổi tên Một kết quả như vậy được gọi là một quan hệ (bảng) được dẫn xuất 68 NGÔN NGỮSQL Các quan hệ được dẫn xuất và khung nhìn “Tìm lương trung bình của các phòng có lương trung bình lớn hơn 2 100 000”, trong SQL (chuẩn . nhan_vien); 60 NGÔN NGỮ SQL Các truy vấn lồng nhau Câu ORDER BY không được sử dụng trong một câu truy vấn con mặc dù nó có thể được dùng trong câu truy vấn ngoài. EXISTS. 61 NGÔN NGỮ SQL Các truy vấn lồng nhau Theo ngầm định, các tên cột trong câu truy vấn con tham chiếu đến tên bảng trong câu FROM của truy vấn con này,