Bài giảng Cơ sở dữ liệu - Chương 5: SQL (Structured Query Language) - Phạm Nguyễn Cương

* Giới thiệu

= Định nghĩa dữ liệu = Truy vấn dữ liệu = Cập nhật dữ liệu " Khung nhìn (view)

= Chỉ mục (index)

pdf 153 trang xuanthi 30/12/2022 280
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở dữ liệu - Chương 5: SQL (Structured Query Language) - Phạm Nguyễn Cương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_co_so_du_lieu_chuong_05_sql_structured_query_langu.pdf

Nội dung text: Bài giảng Cơ sở dữ liệu - Chương 5: SQL (Structured Query Language) - Phạm Nguyễn Cương

  1. Mệnh đề SELECT (tt) Lấy ra một số cột SELECT MAKHOA, TENKHOA, PHONG FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' MaKhoa TenKhoa Phong CNTT Công nghệ thông tin I53 MAKHOA, TENKHOA, PHONG(PHG='I53'NamTL='1995' (KHOA)) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 28
  2. Mệnh đề SELECT (tt) Mở rộng SELECT MAGV, HOTEN, SONHA + ',' + DUONG + ',' + ',' + QUAN + ',' + THANHPHO AS 'DIA CHI' FROM GIAOVIEN WHERE PHAI='Nam' MAGV HOTEN DIA CHI GV001 Nguyễn Văn A 123 Phan Đăng Lưu, Q.Phú Nhuận, TP.Hồ Chí Minh MAGV,HOTEN,DIA CHI( MAGV,HOTEN,SONHA+DUONG+QUAN+THANHPHO(PHAI=‘Nam’(GIAOVIEN))) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 30
  3. Mệnh đề SELECT (tt) Loại bỏ các dòng trùng nhau SELECT LUONG SELECT DISTINCT LUONG FROM GIAOVIEN FROM GIAOVIEN WHERE PHAI=‘Nam’ WHERE PHAI=‘Nam’ LUONG LUONG 30000 30000 25000 25000 25000 38000 38000 ‐ Tốn chi phí ‐ Người dùng muốn thấy © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 32
  4. Mệnh đề WHERE . Sử dụng các phép toán AND, OR để nối các biểu thức điều kiện lại với nhau SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON TRUE Biểu WHERE TENBM = N'Hệ thống thông tin' thức AND luận lý AND GIAOVIEN.MABM = BOMON.MABM TRUE © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 34
  5. Mệnh đề WHERE (tt) BETWEEN SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG >= 20000 AND LUONG <= 30000 SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG BETWEEN 20000 AND 30000 © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 36
  6. Mệnh đề WHERE (tt) LIKE SELECT MAGV, HOTEN FROM GIAOVIEN HOTEN LIKE ‘nguyen _ _ _ _’ WHERE HOTEN LIKE ‘Nguyen _ _ _ _’ 4 ký tự bất kỳ SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN LIKE ‘Nguyen %’ Chuỗi bất kỳ © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 38
  7. Mệnh đề WHERE (tt) charlist MAGV HOTEN GV001 Nguyễn Văn A GV002 Hoàng Thị C SELECT * SELECT * FROM GIAOVIEN GV FROM GIAOVIEN GV WHERE GV.HOTEN LIKE N'[n]%' WHERE GV.HOTEN LIKE N'[nh]%' MAGV HOTEN MAGV HOTEN GV001 Nguyễn Văn A GV001 Nguyễn Văn A GV002 Hoàng Thị C © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 40
  8. Mệnh đề WHERE (tt) Ngày giờ SELECT MAGV, HOTEN FROM GIAOVIEN WHERE NGAYSINH BETWEEN ‘1955‐12‐08’ AND ‘1966‐07‐19’ ‘1955‐12‐08’ YYYY‐MM‐DD ’17:30:00’ HH:MI:SS ’12/08/1955’MM/DD/YYYY ’05:30 PM’ ‘December 8, 1955’ ‘1955‐12‐08 17:30:00’ © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 42
  9. Mệnh đề WHERE (tt) NULL SELECT MAGV, HOTEN FROM GIAOVIEN WHERE GVQL IS NULL SELECT MAGV, HOTEN FROM GIAOVIEN WHERE GVQL IS NOT NULL © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 44
  10. Mệnh đề FROM (tt) Tên bí danh SELECT MAGV, MABM, TENBM Nhập nhằng (Ambigous) ??? FROM GIAOVIEN, BOMON WHERE MABM = MABM MAGV MAB MABM TENBM M 001 HTTT HTTT Hệ thống thông tin SELECT G.MAGV, G.MABM, B.TENBM 001 HTTT MTT Mạng máy tính FROM GIAOVIEN G, BOMON AS B 001 HTTT CNPM Công nghệ PM 002 MMT HTTT Hệ thống thông tin WHERE G.MABM = B.MABM 002 MMT MTT Mạng máy tính 002 CNPM Công nghệ PM MMT Đặt bí danh cho bảng sử dụng khoảng trắng hoặc từ khoá AS MAGV MABM TENBM 001 HTTT Hệ thống thông tin Điều kiện kết để tìm ra bộ môn của giáo viên 002 MTT Mạng máy tính © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 46
  11. Ví dụ 2 Vớinhữngđềtàithuộccấpquảnlý‘Thành phố’, cho biết mã đề tài, đề tài thuộc về chủ đề nào, họ tên người chủ nghiệm đề tài cùng với ngày sinh và địa chỉ của người ấy SELECT D.MADT, C.TENCD, G.MAGV, G.HOTEN, G.DIACHI FROM DETAI D, CHUDE C, GIAOVIEN G WHERE D.CapQL = ‘Thanh Pho’ AND D.MACD = C.MACD AND D.GVCNDT = G.MAGV © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 48
  12. Ví dụ 4 . Tìm họ tên của từng giáo viên và người phụ trách chuyên môn trực tiếp của nhân viên đó. © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 50
  13. Mệnh đề ORDER BY . Dùng để hiển thị kết quả câu truy vấn theo một thứ tự nào đó . Cú pháp SELECT FROM WHERE ORDER BY - ASC: tăng (mặc định) - DESC: giảm © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 52
  14. Nội dung chi tiết . Giới thiệu . Định nghĩa dữ liệu . Truy vấn dữ liệu - Truy vấn cơ bản - Tập hợp, so sánh tập hợp và truy vấn lồng - Hàm kết hợp và gom nhóm - Một số dạng truy vấn khác . Cập nhật dữ liệu . Khung nhìn (view) . Chỉ mục (index) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 54
  15. Phép toán tập hợp trong SQL (tt) Cú pháp SELECT FROM WHERE UNION [ALL] SELECT FROM WHERE SELECT FROM WHERE INTERSECT [ALL] SELECT FROM WHERE SELECT FROM WHERE EXCEPT [ALL] SELECT FROM WHERE © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 56
  16. Ví dụ 7 . Tìm những giáo viên vừa là trưởng bộ môn vừa chủ nhiệm đề tài SELECT TRUONGBM FROM BOMON INTERSECT SELECT GVCNDT FROM DETAI SELECT BM.TRUONGBM FROM BOMON BM, DETAI DT WHERE BM.TRUONGBM = DT.GVCNDT © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 58
  17. Truy vấn lồng SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE TENBM = N'Hệ thống thông tin' AND GIAOVIEN.MABM = BOMON.MABM Câu truy vấn SELECT cha (Outer FROM query) WHERE ( SELECT FROM Câu truy vấn con (Subquery) WHERE ) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 60
  18. Truy vấn lồng (tt) . Có 2 loại truy vấn lồng - Lồng phân cấp  Mệnh đề WHERE của truy vấn con không tham chiếu đến thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha  Khi thực hiện, câu truy vấn con sẽ được thực hiện trước - Lồng tương quan  Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn cha  Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, mỗi lần tương ứng với một bộ của truy vấn cha © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 62
  19. Ví dụ 9 SELECT HOTEN FROM GIAOVIEN WHERE MAGV IN (SELECT MAGV FROM GIAOVIEN WHERE HOTEN LIKE N'Nguyễn%' AND LUONG > 200000) OR MAGV IN (SELECT TRUONGBM FROM BOMON WHERE YEAR(NGAYNHANCHUC)>=1995) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 64
  20. Ví dụ 11 . Tìm những giáo viên có lương lớn hơn lương của ít nhất một giáo viên bộ môn ‘Công nghệ phần mềm’ SELECT * FROM GIAOVIEN WHERE LUONG >ANY(SELECT GV.LUONG FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM AND BM.TENBM = N'Công nghệ phần mềm') SELECT GV1.* FROM GIAOVIEN GV1, GIAOVIEN GV2, BOMON BM WHERE GV2.MABM = BM.MABM AND BM.TENBM = N'Công nghệ phần mềm' AND GV1.LUONG > GV2.LUONG © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 66
  21. Ví dụ 13 . Tìm những trưởng bộ môn tham gia tối thiểu 1 đề tài SELECT * FROM GIAOVIEN WHERE MAGV IN (SELECT TRUONGBM FROM BOMON) AND MAGV IN (SELECT MAGV FROM THAMGIADT) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 68
  22. Ví dụ ‐ Lồng tương quan . Tìm những giáo viên có lương lớn nhất Giáo viên là có lương lớn SELECT MAGV, HOTEN nhất khi không tồn tại một FROM GIAOVIEN GV giáo viên nào mà có lương WHERE NOT EXISTS (SELECT * lớn hơn giáo viên đó FROM GIAOVIEN GV2 WHERE GV2.LUONG > GV.LUONG) SELECT MAGV, HOTEN Giáo viên là có lương lớn nhất khi lương của giáo viên FROM GIAOVIEN GV lớn hơn hoặc bằng tất cả WHERE LUONG >= ALL (SELECT LUONG lương của các giáo viên (lồng FROM GIAOVIEN GV2) phân cấp) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 70
  23. Ví dụ 15 . Tìm những giáo viên không tham gia đề tài nào SELECT * FROM GIAOVIEN GV WHERE NOT EXISTS (SELECT * FROM THAMGIADT PC WHERE PC.MAGV = GV.MAGV) Giáo viên GV không tham gia đề tài khi không tồn tại một dòng nào trong THAMGIADT mà có MAGV = GV.MAGV © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 72
  24. Ví dụ 17 . Tìm những trưởng bộ môn tham gia tối thiểu 1 đề tài SELECT * FROM GIAOVIEN GV WHERE EXISTS (SELECT * FROM BOMON BM WHERE GV.MAGV =BM.TRUONGBM) AND EXISTS (SELECT * FROM THAMGIADT PC WHERE PC.MAGV = GV.MAGV) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 74
  25. Nhận xét IN và EXISTS . EXISTS: - Sử dụng để kiểm tra tồn tại - Cú pháp sử dụng - EXISTS (Select From Where ) Sub query Nếu sub query có dữ liệu (>= 1 dòng) tồn tại mệnh đề EXISTS ( ) = TRUE Nếu sub query không có dữ liệu (0 dòng hoặc rỗng) Không tồn tại mệnh đề EXISTS ( ) = FALSE © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 76
  26. Ví dụ 19 . Tìm những giáo viên không tham gia đề tài SELECT * FROM GIAOVIEN GV WHERE NOT EXISTS (SELECT * FROM THAMGIADT PC WHERE PC.MAGV = GV.MAGV) Nếu giáo viên GV không tham gia đề tài câu truy vấn bên trong sẽ rỗng (0 dòng) NOT EXISTS (S F W) có giá trị TRUE © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 78
  27. Phép chia trong SQL (tt) . Sử dụng EXCEPT để biểu diễn SELECT R1.A, R1.B, R1.C FROM R R1 WHERE NOT EXISTS ( ( SELECT S.D, S.E FROM S) EXCEPT ( SELECT R2.D, R2.E FROM R R2 WHERE R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C ) ) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 80
  28. Ví dụ 20 Tìmtêncácgiáoviênđượcphâncônglàmtấtcả các đề tài - 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: THAMGIADT(MAGV, MADT) - Tập chia: DETAI(MADT) - Tập kết quả: KQ(MAGV) - Kết KQ với GIAOVIEN để lấy ra TENGV © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 82
  29. Ví dụ 20 –Not Exists SELECT DISTINCT GV.MAGV, GV.HOTEN FROM GIAOVIEN GV, THAMGIADT PC1 WHERE GV.MAGV = PC1.MAGV AND NOT EXISTS ( SELECT * FROM DETAI DT WHERE NOT EXISTS (SELECT * Những đề tài mà giáo viên FROM THAMGIADT PC2 PC1.MAGV WHERE PC2.MAGV = PC1.MAGV không tham gia AND DT.MADT = PC2.MADT)) Tìm những giáo viên mà danh sách đề tài không tham gia = rỗng © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 84
  30. Phép chia –với Count . Cho R(A,B), S(B), thực hiện RS SELECT R.A FROM R [WHERE R.B IN (SELECT S.B FROM S [WHERE ]] GROUP BY R.A HAVING COUNT(DISTINCT R.B) = ( SELECT COUNT(S.B) FROM S [WHERE ]) © Bộ môn HTTT ‐ Khoa CNTT ‐ Trường ĐH KHTN 86
  31. Ví dụ 21 – Count . Tìm tên các giáo viên được phân công làm tất cả các đề tài có kinh phí trên 100 triệu? SELECT DISTINCT GV.MAGV, GV.HOTEN FROM GIAOVIEN GV, THAMGIADT PC1 WHERE GV.MAGV = PC1.MAGV AND PC1.MADT IN (SELECT DT.MADT FROM DETAI WHERE KINHPHI > 100) GROUP BY GV.MAGV, GV.HOTEN HAVING COUNT(DISTINCT PC1.MADT) = (SELECT COUNT (MADT) FROM DETAI DT WHERE KINHPHI >100) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 88
  32. Nội dung chi tiết . Giới thiệu . Định nghĩa dữ liệu . Truy vấn dữ liệu - Truy vấn cơ bản - Tập hợp, so sánh tập hợp và truy vấn lồng - Hàm kết hợp và gom nhóm - Một số dạng truy vấn khác . Cập nhật dữ liệu . Khung nhìn (view) . Chỉ mục (index) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 90
  33. Ví dụ 22 . Tìm tổng lương, lương cao nhất, lương thấp nhất và lương trung bình của các giáo viên SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) FROM GIAOVIEN © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 92
  34. Ví dụ 24 . Tìm những giáo viên có lương thuộc 3 mức lương cao nhất SELECT * FROM GIAOVIEN GV1 WHERE 2 >= (SELECT COUNT(*) FROM GIAOVIEN GV2 WHERE GV2.LUONG > GV1.LUONG) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 94
  35. Gom nhóm Cú pháp SELECT FROM WHERE GROUP BY Sau khi gom nhóm - Mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc tính gom nhóm © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 96
  36. Ví dụ 27 . Với mỗi giáo viên cho biết mã số, mã đề tài và số công việc mà họ tham gia ứng với mỗi đề tài MAGV MADT STT GV001 DT001 1 GV001 DT001 2 GV001 DT002 1 GV002 DT002 2 GV003 DT001 3 GV003 DT002 3 SELECT PC.MAGV, PC.MADT, COUNT(*) AS 'Số lượng công việc' FROM THAMGIADT PC GROUP BY PC.MAGV, PC.MADT © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 98
  37. Điều kiện trên nhóm . Cú pháp SELECT FROM WHERE GROUP BY HAVING © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 100
  38. Ví dụ 30 . Cho biết những giáo viên tham gia từ 2 đề tài trở lên MAGV MADT STT GV001 DT001 1 GV001 DT001 2 GV001 DT002 1 GV002 DT002 2 GV003 DT001 3 GV003 DT002 3 SELECT PC.MAGV, COUNT(DISTINCT MADT) AS 'Số lượng đề tài' FROM THAMGIADT PC GROUP BY PC.MAGV HAVING COUNT(DISTINCT MADT) >= 2 © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 102
  39. Nhận xét . Mệnh đề GROUP BY - Các thuộc tính trong mệnh đề SELECT (trừ những thuộc tính trong các hàm kết hợp) phải xuất hiện trong mệnh đề GROUP BY . Mệnh đề HAVING - Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm tra một số điều kiện nào đó - Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc trên từng bộ - Sau khi gom nhóm điều kiện trên nhóm mới được thực hiện © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 104
  40. Ví dụ 32 . Tìm những phòng ban có lương trung bình cao nhất SELECT GV.MABM, AVG(GV.LUONG) AS 'Lương trung bình' FROM GIAOVIEN GV GROUP BY GV.MABM HAVING AVG(GV.LUONG)) = (SELECT MAX(AVG(GV.LUONG)) FROM GIAOVIEN GV GROUP BY GV.MABM) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 106
  41. Ví dụ 34 . Tìm tên các giáo viên được phân công làm tất cả các đề tài SELECT PC.MAGV, COUNT(DISTINCT PC.MADT) AS 'Số lượng đề tài' FROM THAMGIADT PC GROUP BY PC.MAGV HAVING COUNT(DISTINCT PC.MADT)=(SELECT COUNT(MADT) FROM DETAI) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 108
  42. Một số dạng truy vấn khác . Truy vấn con ở mệnh đề FROM . Điều kiện kết ở mệnh đề FROM - Phép kết tự nhiên - Phép kết ngoài . Cấu trúc CASE © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 110
  43. Ví dụ 35 . Cho biết những bộ môn (TENBM) có lương trung bình của các giáo viên lớn hơn 20000 SELECT BM.TENBM, AVG(GV.LUONG) AS LUONG_TB FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM GROUP BY BM.MABM, BM.TENBM HAVING AVG(GV.LUONG)>=20000 © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 112
  44. Điều kiện kết ở mệnh đề FROM . Kết bằng SELECT FROM R1 [INNER] JOIN R2 ON WHERE . Kết ngoài SELECT FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON WHERE © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 114
  45. Ví dụ 37 . Tìm họ tên các giáo viên và tên các đề tài giáo viên tham gia nếu có SELECT DISTINCT GV.* FROM GIAOVIEN GV LEFT JOIN (THAMGIADT PC JOIN DETAI DT ON PC.MADT = DT.MADT) ON GV.MAGV = PC.MAGV GIAOVIEN GIAOVIEN JOIN THAMGIADT GV.MAGV= PC.MAGV mở rộng © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 116
  46. Ví dụ 38 . Cho biết họ tên các giáo viên đã đến tuổi về hưu (nam 60 tuổi, nữ 55 tuổi) SELECT HOTEN FROM GIAOVIEN WHERE YEAR(GETDATE()) ‐ YEAR(NGAYSINH)>=(CASE PHAI WHEN 'Nam' THEN 60 WHEN 'Nu' THEN 55 END) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 118
  47. Kết luận SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 120
  48. Lệnh INSERT . Dùng để thêm 1 hay nhiều dòng vào bảng . Để thêm dữ liệu - Tên quan hệ - Danh sách các thuộc tính cần thêm dữ liệu - Danh sách các giá trị tương ứng © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 122
  49. Ví dụ 40 INSERT INTO THAMGIADT(MAGV, MADT, STT, PHUCAP, KETQUA) VALUES(’002', ‘001', 1, 1.0, N’ĐẠT') INSERT INTO THAMGIADT(MAGV, MADT, STT, PHUCAP, KETQUA) VALUES(’002', ‘001', 2, 1.2, NULL) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 124
  50. Lệnh INSERT (tt) . Cú pháp (thêm nhiều dòng) INSERT INTO ( ) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 126
  51. Lệnh DELETE . Dùng để xóa các dòng của bảng . Cú pháp DELETE FROM [WHERE ] © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 128
  52. Ví dụ 43 . Xóa đi những giáo viên ở bộ môn ‘Hệ thống thông tin’ DELETE FROM GIAOVIEN WHERE MABM IN (SELECT MABM FROM BOMON WHERE TENBM = N'Hệ thống thông tin') DELETE FROM GIAOVIEN FROM BOMON BM WHERE GIAOVIEN.MABM = BM.MABM AND BM.TENBM = N'Hệ thống thông tin' © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 130
  53. Lệnh DELETE (tt) MAGV HOTEN MABM GV001 Nguyễn Văn A HTTT GV002 Trần Văn B HTTT GV003 Trần Thị C CNPM GV004 Đặng Thị D MMT MAGV MADT STT PHUCAP KETQUA GV001 001 1 GV001 001 3 GV003 002 1 GV004 003 1 © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 132
  54. Lệnh UPDATE . Dùng để thay đổi giá trị của thuộc tính cho các dòng của bảng . Cú pháp UPDATE SET = , = , [WHERE ] © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 134
  55. Ví dụ 45 . Với mỗi giáo viên của bộ môn ‘Hệ thống thông tin’, nâng lương của các giáo viên gấp 1.5 lần và gán giáo viên quản lý (GVQL) thành null UPDATE GIAOVIEN SET LUONG = LUONG*1.5, GVQL =NULL WHERE MABM =(SELECT MABM FROM BOMON WHERE TENBM = N'Hệ thống thông tin') © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 136
  56. Ví dụ 47 . Tăng lương 10% cho tất cả các giáo viên làm cho đề tài ‘DT001’ nhiều hơn 3 công việc. UPDATE GIAOVIEN SET LUONG = LUONG * 1.1 WHERE MAGV IN (SELECT PC.MAGV FROM THAMGIADT TG WHERE TG.MADT = 'DT001' GROUP BY TG.MAGV, TG.MADT HAVING COUNT(*) >= 3) © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 138
  57. Nội dung chi tiết . Giới thiệu . Định nghĩa dữ liệu . Truy vấn dữ liệu . Cập nhật dữ liệu . Khung nhìn - Định nghĩa - Truy vấn - Cập nhật . Chỉ mục © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 140
  58. Khung nhìn (tt) . Tại sao phải sử dụng khung nhìn? - Che dấu tính phức tạp của dữ liệu - Đơn giản hóa các câu truy vấn - Hiển thị dữ liệu dưới dạng tiện dụng nhất - An toàn dữ liệu © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 142
  59. Ví dụ 48 CREATE VIEW GV_HTTT AS SELECT GV.* FROM GIAOVIEN GV WHERE BM.MABM = 'HTTT' CREATE VIEW THONGKE_BM AS SELECT BM.TENBM, COUNT(GV.MAGV) SL_GV, SUM(GV.LUONG) TONG_LUONG FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM GROUP BY BM.MABM, BM.TENBM © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 144
  60. Truy vấn trên khung nhìn (tt) . Có thể viết câu truy vấn dữ liệu từ khung nhìn và bảng SELECT DISTINCT GV.* FROM GV_HTTT GV, THAMGIADT PC WHERE GV.MAGV = PC.MAGV GV_HTTT  MABM='HTTT' (GIAOVIEN) KQ  GV_HTTT GV_HTTT.MAGV=THAMGIADT.MAGV THAMGIADT © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 146
  61. Cập nhật trên khung nhìn (tt) . Sửa lại lương cho giáo viên mã ‘GV003’ ở bộ môn 'Hệ thống thông tin' tăng lên 10% UPDATE GV_HTTT SET LUONG = LUONG * 1.1 WHERE MAGV = 'GV003' © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 148
  62. Chỉ mục . Chỉ mục trên thuộc tính A là một cấu trúc dữ liệu làm cho việc tìm kiếm mẫu tin có chứa A hiệu quả hơn SELECT * FROM GIAOVIEN Đọc 10.000 bộ WHERE MABM='HTTT' AND PHAI=‘Nu’ Đọc 200 bộ Bảng GIAOVIEN có 10.000 bộ Có 200 giáo viên làm việc cho bộ môn ‘HTTT’ Đọc 70 bộ © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 150
  63. Chỉ mục (tt) . Nhận xét - Tìm kiếm nhanh trong trường hợp so sánh với hằng số và phép kết - Làm chậm đi các thao tác thêm, xóa và sửa - Tốn chi phí  Lưu trữ chỉ mục  Truy xuất đĩa nhiều . Chọn lựa cài đặt chỉ mục hợp lý? sẽ được tìm hiểu kỹ trong các môn học tiếp Hệ QTCSDL, CSDL NC. © Bộ môn HTTT - Khoa CNTT - Trường ĐH KHTN 152