Bài giảng Cơ sở dữ liệu đa phương tiện - Chương 5: SQL (Structured Query Language) - Khoa CNTT - Trường ĐH KHTN

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 154 trang xuanthi 30/12/2022 340
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở dữ liệu đa phương tiện - Chương 5: SQL (Structured Query Language) - Khoa CNTT - Trường ĐH KHTN", để 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_da_phuong_tien_chuong_05_sql_structu.pdf

Nội dung text: Bài giảng Cơ sở dữ liệu đa phương tiện - Chương 5: SQL (Structured Query Language) - Khoa CNTT - Trường ĐH KHTN

  1. Lệnh xóa bảng (tt) GIÁOVIÊN MãGV HọTên Lương Phái NgàySinh SốNhà Đường Quận ThànhPhố GVQL MãBM BỘMÔN MãKhoa TrưởngBM NgàyNhậnChức ĐiệnThoại MãBM TênBM Phòng KHOA TrưởngKhoa NgàyNhậnChức TênKhoa NămTL Phòng ĐiệnThoại MãKhoa 22
  2. 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ố kiểu truy vấn khác Cập nhật dữ liệu Khung nhìn (view) Chỉ mục (index) 24
  3. Truy vấn cơ bản Gồm 3 mệnh đề SELECT FROM WHERE Tên các cột cần được hiển thị trong kết quả truy vấn Tên các bảng liên quan đến câu truy vấn Biểu thức boolean xác định dòng nào sẽ được rút trích Nối các biểu thức: AND, OR, và NOT Phép toán: , , , , , , LIKE và BETWEEN 26
  4. Mệnh đề SELECT Lấy ra tất cả các cột Lấy tất cả các cột của quan hệ SELECT * kết quả FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' MaKhoa TenKhoa Phong NamTL DienThoai TruongKhoa NgayNhanChuc CNTT Công nghệ thông tin I53 1995 08313964145 GV130 01/01/2007 SH Sinh học B32 1975 08313123545 GV250 01/01/1990 PHG='I53'NamTL='1995' (KHOA) 28
  5. Mệnh đề SELECT (tt) Tên bí danh SELECT MAKHOA AS 'Mã khoa', TENKHOA AS 'Tên khoa', PHONG AS 'Mã phòng' FROM KHOA WHERE PHONG='I53' AND NAMTL = '1995' Mã Tên khoa Mã phòng khoa CNTT Công nghệ thông I53 tin Mã khoa, Tên khoa, Mã phòng( MAKHOA,TENKHOA,PHONG(PHG='I53'NamTL='1995' (KHOA))) 30
  6. Mệnh đề SELECT (tt) Mở rộng SELECT MAGV, LUONG*1.1 AS 'LUONG10%' FROM GIAOVIEN WHERE PHAI='Nam' MAGV LUONG10% GV001 550000 MAGV,LUONG10%( MAGV,LUONG*1.1(PHAI=‘Nam’(GIAOVIEN))) 32
  7. Ví dụ Cho biết MAGV và TENGV làm việc ở bộ môn ‘Hệ thống thông tin’ R1  GIAOVIEN GIAOVIEN.MABM=BOMON.MABM BOMON KQ  MAGV, HOTEN (TENBM='Hệ thống thông tin' (R1)) SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE TENBM= N'Hệ thống thông tin' AND GIAOVIEN.MABM=BOMON.MABM 34
  8. Mệnh đề WHERE (tt) Độ ưu tiên SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE (TENBM = 'Hệ thống thông tin' OR TENBM = 'Mạng máy tính') AND GIAOVIEN.MABM = BOMON.MABM Độ ưu tiên mặc định của các phép toán: từ trái qua phải. Nên sử dụng dấu ngoặc thể hiện tường minh sự ưu tiên của các phép toán. 36
  9. Mệnh đề WHERE (tt) NOT BETWEEN SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 SELECT MAGV, HOTEN FROM GIAOVIEN WHERE LUONG 30000 38
  10. Mệnh đề WHERE (tt) NOT LIKE SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN LIKE ‘Nguyen’ phủ định SELECT MAGV, HOTEN FROM GIAOVIEN WHERE HOTEN NOT LIKE ‘Nguyen’ 40
  11. 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'[^h]%' WHERE GV.HOTEN LIKE N'[^nh]%' MAGV HOTEN MAGV HOTEN GV001 Nguyễn Văn A 42
  12. Mệnh đề WHERE (tt) NULL Sử dụng trong trường hợp: Không biết (value unknown) Không thể áp dụng (value inapplicable) Không tồn tại (value withheld) Những biểu thức tính toán có liên quan đến giá trị NULL sẽ cho ra kết quả là NULL x có giá trị là NULL x + 3 cho ra kết quả là NULL Những biểu thức so sánh có liên quan đến giá trị NULL sẽ cho ra kết quả là UNKNOWN x = 3 cho ra kết quả là UNKNOWN x = 3 là một so sánh không hợp lệ trong SQL 44
  13. Mệnh đề FROM Mệnh đề FROM tương đương với phép x trong đại số quan hệ SELECT * GIAOVIEN x BOMON FROM GIAOVIEN, BOMON SELECT * FROM GIAOVIEN, BOMON MAGV MAB MABM TENBM WHERE TRUE M 001 HTTT Hệ thống thông tin HTTT Sử dụng thêm điều 001 MTT Mạng máy tính HTTT kiện ở WHERE để biểu 001 CNPM Công nghệ PM HTTT diễn phép kết 002 MMT HTTT Hệ thống thông tin GIAOVIEN BOMON 002 MMT MTT Mạng máy tính C 002 MMT CNPM Công nghệ PM SELECT * FROM GIAOVIEN, BOMON 46 WHERE C
  14. Ví dụ 1 Cho biết tên của bộ môn và tên của trưởng bộ môn của những bộ môn thuộc khoa CNTT (mã khoa) SELECT BM.TENBM, GV.HOTEN AS TEN_TRUONGBM FROM BOMON BM, GIAOVIEN GV WHERE BM.TRUONGBM = GV.MAGV AND BM.MAKHOA= ‘CNTT’ Điều kiện kết để tìm ra giáo viên làm trưởng bộ môn 48
  15. Ví dụ 3 Tìm họ tên của giáo viên viên thuộc bộ môn “HTTT” có tham gia vào đề tài “ Mobile Database” với số tiền phụ cấp cho mỗi công việc trên 10 triệu. SELECT GV.HOTEN FROM GIAOVIEN GV, THAMGIADT TG, DETAI DT WHERE GV.MAGV = TG.MAGV AND TG.MADT = DT.MADT AND GV.MABM=‘HTTT’ AND DT.TENDT=‘Mobile Database’ AND TG.PHUCAP>10 50
  16. Ví dụ 5 Tìm họ tên của những giáo viên được “Trần Trà Hương” phụ trách quản lý chuyên môn. 52
  17. Mệnh đề ORDER BY (tt) Ví dụ SELECT * FROM THAMGIADT ORDER BY MAGV DESC, MADT, STT DESC MAGV MADT STT MAGV MADT STT GV01 DT01 1 GV02 DT01 3 GV01 DT01 2 GV02 DT01 2 GV01 DT02 1 GV02 DT03 4 GV02 DT01 2 GV02 DT03 1 GV02 DT01 3 GV01 DT01 2 GV02 DT03 1 GV01 DT01 1 GV02 DT03 4 GV01 DT02 1 54
  18. Phép toán tập hợp trong SQL SQL có cài đặt các phép toán Hội (UNION) Giao (INTERSECT) Trừ (EXCEPT) Kết quả trả về là tập hợp Loại bỏ các bộ trùng nhau Để giữ lại các bộ trùng nhau UNION ALL INTERSECT ALL EXCEPT ALL 56
  19. Ví dụ 6 Cho biết mã của các giáo viên có họ tên bắt đầu là 'Nguyễn' và lương trên 200000 hoặc, giáo viên là trưởng bộ môn nhận chức sau năm 1995 SELECT MAGV FROM GIAOVIEN WHERE HOTEN LIKE N'Nguyễn%' AND LUONG > 200000 UNION SELECT TRUONGBM FROM BOMON WHERE YEAR(NGAYNHANCHUC)>=1995 58
  20. Ví dụ 8 Tìm những giáo viên không tham gia bất kỳ đề tài nào SELECT MAGV FROM GIAOVIEN EXCEPT SELECT MAGV FROM THAMGIADT 60
  21. Truy vấn lồng (tt) Các câu lệnh SELECT có thể lồng nhau ở nhiều mức Câu truy vấn con thường trả về một tập các giá trị Các câu truy vấn con trong cùng một mệnh đề WHERE được kết hợp bằng phép nối logic Mệnh đề WHERE của câu truy vấn cha So sánh tập hợp thường đi cùng với một số toán tử IN, NOT IN ALL ANY hoặc SOME Kiểm tra sự tồn tại EXISTS NOT EXISTS 62
  22. Ví dụ - Lồng phân cấp Tìm những giáo viên là trưởng bộ môn SELECT MAGV, HOTEN Sử dụng phép kết FROM GIAOVIEN, BOMON WHERE GIAOVIEN.MAGV = BOMON.TRUONGBM SELECT MAGV, HOTEN FROM GIAOVIEN SELECT MAGV, HOTEN WHERE MABM IN (‘001', FROM GIAOVIEN ‘002', ‘004', ‘005‘, ‘007‘ ) WHERE MAGV IN (SELECT TRUONGBM Sử dụng truy vấn lồng với IN FROM BOMON 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 64
  23. Ví dụ 10 Tìm những giáo viên không tham gia đề tài nào SELECT * FROM GIAOVIEN WHERE MAGV NOT IN(SELECT MAGV FROM THAMGIADT) SELECT * FROM GIAOVIEN WHERE MAGV <> ALL(SELECT MAGV FROM THAMGIADT) 66
  24. Ví dụ 12 Tìm những giáo viên có lương lớn hơn lương của tất cả giáo viên thuộc bộ môn ‘Hệ thống thông tin’ SELECT * FROM GIAOVIEN WHERE LUONG > ALL (SELECT LUONG FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM AND BM.TENBM = N'Hệ thống thông tin') 68
  25. Ví dụ - Lồng tương quan Tìm những giáo viên là trưởng bộ môn SELECT MAGV, HOTEN FROM GIAOVIEN Sử dụng phép truy vấn lồng với IN WHERE MAGV IN (SELECT TRUONGBM FROM BOMON) SELECT MAGV, HOTEN FROM GIAOVIEN GV WHERE EXISTS (SELECT * Sử dụng truy vấn lồng với EXISTS FROM BOMON BM WHERE BM.TRUONGBM = GV.MAGV) Giáo viên là trưởng bộ môn khi tồn tại một bộ môn có TRUONGBM = MAGV của giáo viên đó 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 70
  26. Ví dụ 14 Tìm giáo viên trùng tên và cùng giới tính với giáo viên khác trong cùng bộ môn SELECT * FROM GIAOVIEN GV1 WHERE EXISTS (SELECT * FROM GIAOVIEN GV2 WHERE GV1.HOTEN LIKE GV2.HOTEN AND GV1.PHAI = GV2.PHAI AND GV1.MABM = GV2.MABM AND GV1.MAGV <> GV2.MAGV) 72
  27. Ví dụ 16 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 GV1 WHERE EXISTS (SELECT * FROM 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) 74
  28. Nhận xét IN và EXISTS IN IN Thuộc tính ở mệnh đề SELECT của truy vấn con phải có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE của truy vấn cha EXISTS Không cần có thuộc tính, hằng số hay biểu thức nào khác đứng trước Không nhất thiết liệt kê tên thuộc tính ở mệnh đề SELECT của truy vấn con Những câu truy vấn có = ANY hay IN đều có thể chuyển thành câu truy vấn có EXISTS 76
  29. Ví dụ 18 Tìm những giáo viên có tham gia đề tài SELECT * FROM GIAOVIEN GV WHERE EXISTS (SELECT * FROM THAMGIADT PC WHERE PC.MAGV = GV.MAGV) Nếu giáo viên GV có tham gia đề tài câu truy vấn bên trong sẽ có dữ liệu (>= 1 dòng) mệnh EXISTS (S F W) có giá trị TRUE 78
  30. Phép chia trong SQL R A B C D E S D E RS A B C a a 1 a 1 a  bi ai a  a 1 b 1  a  a  b 1  a  a 1  a  b 3  a  a 1  a  b 1  a  b 1 RS 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 80
  31. Phép chia trong SQL (tt) Sử dụng NOT EXISTS để biểu diễn SELECT R1.A, R1.B, R1.C FROM R R1 WHERE NOT EXISTS ( SELECT * FROM S WHERE NOT EXISTS ( 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 )) 82
  32. Ví dụ 20 – Except SELECT DISTINCT GV.MAGV, GV.HOTEN FROM GIAOVIEN GV, THAMGIADT PC1 WHERE GV.MAGV = PC1.MAGV AND NOT EXISTS ( (SELECT DT.MADT FROM DETAI DT) Toàn bộ đề tài EXCEPT Những đề tài mà giáo viên (SELECT PC2.MADT Những đề tài mà PC1.MAGV FROM THAMGIADT PC2 PC1.MaGV đã tham gia không tham gia WHERE PC2.MAGV = PC1.MAGV) ) Nếu danh sachs đề tài chưa tham gia = rỗng Giáo viên đã tham gia tất cả các đề 84 tài
  33. Ví dụ 20 – Not Exists SELECT DISTINCT GV.MAGV, GV.HOTEN FROM GIAOVIEN GV, THAMGIADT PC1 WHERE GV.MAGV = PC1.MAGV AND 0 = (SELECT COUNT(*) FROM DETAI DT WHERE NOT EXISTS (SELECT * FROM THAMGIADT PC2 WHERE PC2.MAGV = PC1.MAGV AND DT.MADT = PC2.MADT)) Tìm những giáo viên mà số lượng đề tài chưa tham gia bằng 0 86
  34. Ví dụ 20 – Count SELECT DISTINCT GV.MAGV, GV.HOTEN FROM GIAOVIEN GV, THAMGIADT PC1 WHERE GV.MAGV = PC1.MAGV GROUP BY GV.MAGV, GV.HOTEN HAVING COUNT(DISTINCT PC1.MADT) = (SELECT COUNT (MADT) FROM DETAI DT) 88
  35. Bài tập phép chia 1. Cho biết mã số, họ tên, ngày sinh của giáo viên tham gia tất cả các công việc của đề tài ‘Ứng dụng hóa học xanh’. 2. Cho biết mã số, họ tên, tên bộ môn và tên người quản lý chuyên môn của giáo viên tham gia tất cả các đề tài thuộc chủ đề ‘Nghiên cứu phát triển’. 3. Cho biết họ tên, ngày sinh, tên khoa, tên trưởng khoa của giáo viên tham gia tất cả các đề tài có giáo viên ‘Nguyễn Hoài An’ tham gia. 4. Cho biết họ tên giáo viên khoa ‘Công nghệ thông tin’ tham gia tất cả các công việc của đề tài có trưởng bộ môn của bộ 90 môn đông nhất khoa ‘Công nghệ thông tin’ làm chủ nhiệm.
  36. Hàm kết hợp . COUNT - COUNT(*) đếm số dòng - COUNT( ) đếm số giá trị khác NULL của thuộc tính - COUNT(DISTINCT ) đếm số giá trị khác nhau và khác NULL của thuộc tính . MIN . MAX . SUM . AVG . Các hàm kết hợp được đặt ở mệnh đề SELECT hoặc HAVING 92
  37. Ví dụ 23 . Cho biết số lượng giáo viên của bộ môn ‘Mạng máy tính’ SELECT COUNT(*) AS SL_GV FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM AND TENBM=N'Mạng máy tính' 94
  38. Ví dụ 25 . Cho biết số lượng giáo viên của từng bộ môn Bộ môn Số lượng HTTT 2 CNPM 1 MMT 1 MANV 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 96
  39. Ví dụ 26 . Cho biết số lượng giáo viên của từng bộ môn SELECT MABM, COUNT(*) 'Số lượng giáo viên' FROM GIAOVIEN GROUP BY MABM SELECT GV.MABM, COUNT(*) 'Số lượng giáo viên' FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM GROUP BY GV.MABM 98
  40. Ví dụ 28 . Cho biết những giáo viên tham gia từ 2 công việc trở lên cho 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 100
  41. Ví dụ 29 . Cho biết những giáo viên tham gia từ 2 công việc trở lên cho mỗi đề tài? SELECT PC.MAGV, PC.MADT, COUNT(*) AS 'Số lượng công việc' FROM THAMGIADT PC GROUP BY PC.MAGV, PC.MADT HAVING COUNT(*) >= 2 102
  42. Ví dụ 31 . 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 GV.MABM, AVG(GV.LUONG) AS 'Lương trung bình' FROM GIAOVIEN GV GROUP BY GV.MABM HAVING AVG(GV.LUONG)>20000 SELECT BM.TENBM, AVG(GV.LUONG) AS 'Lương trung bình' FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM GROUP BY BM.MABM, BM.TENBM HAVING AVG(GV.LUONG)>=20000 104
  43. Nhận xét (tt) . Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING - (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề WHERE - (2) Những dòng này sẽ được gom thành nhiều nhóm tương ứng với mệnh đề GROUP BY - (3) Áp dụng các hàm kết hợp cho mỗi nhóm - (4) Bỏ qua những nhóm không thỏa điều kiện trong mệnh đề HAVING - (5) Rút trích các giá trị của các cột và hàm kết hợp trong mệnh đề SELECT 106
  44. Ví dụ 33 . 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)>= ALL(SELECT AVG(GV.LUONG) FROM GIAOVIEN GV GROUP BY GV.MABM) 108
  45. 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) 110
  46. Truy vấn con ở mệnh đề FROM . Kết quả trả về của một câu truy vấn phụ là một bảng - Bảng trung gian trong quá trình truy vấn - Không có lưu trữ thật sự . Cú pháp SELECT FROM R1, R2, ( ) AS tên_bảng WHERE 112
  47. Ví dụ 35(tt) . 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, LUONG_GV.LUONG_TB FROM BOMON BM, (SELECT MABM, AVG(LUONG) LUONG_TB FROM GIAOVIEN GROUP BY MABM) AS LUONG_GV WHERE BM.MABM = LUONG_GV.MABM 114
  48. Ví dụ 36 . Tìm mã và tên các giáo viên làm việc tại bộ môn ‘Hệ thống thông tin’ SELECT MAGV, HOTEN FROM GIAOVIEN, BOMON WHERE TENBM = N'Hệ thống thông tin' AND GIAOVIEN.MABM = BOMON.MABM SELECT MAGV, HOTEN FROM GIAOVIEN GV INNER JOIN BOMON BM ON GV.MABM = BM.MABM WHERE TENBM = N'Hệ thống thông tin' 116
  49. Cấu trúc CASE . Cho phép kiểm tra điều kiện và xuất thông tin theo từng trường hợp . Cú pháp CASE WHEN THEN WHEN THEN [ELSE ] END 118
  50. Ví dụ 39 . Cho biết họ tên các giáo viên và năm về hưu SELECT GV.HOTEN, YEAR(GV.NGAYSINH) + ( CASE PHAI WHEN 'Nam' THEN 60 WHEN 'Nu' THEN 55 END) AS NAMVEHUU FROM GIAOVIEN GV SELECT GV.HOTEN, ( CASE PHAI WHEN 'Nam' THEN YEAR(NGAYSINH) + 60 WHEN 'Nu' THEN YEAR(NGAYSINH) + 55 END) AS NAMVEHUU FROM GIAOVIEN GV 120
  51. 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 - Thêm (insert) - Xóa (delete) - Sửa (update) . Khung nhìn (view) . Chỉ mục (index) 122
  52. Lệnh INSERT (tt) . Cú pháp (thêm 1 dòng) INSERT INTO ( ) VALUES ( ) 124
  53. Lệnh INSERT (tt) . Nhận xét - Thứ tự các giá trị phải trùng với thứ tự các cột - Có thể thêm giá trị NULL ở những thuộc tính không là khóa chính và NOT NULL - Câu lệnh INSERT sẽ gặp lỗi nếu vi phạm RBTV Khóa chính Tham chiếu NOT NULL - các thuộc tính có ràng buộc NOT NULL bắt buộc phải có giá trị 126
  54. Ví dụ 41 CREATE TABLE THONGKE_BM ( TENBM NVARCHAR(50), SL_GV INT, LUONG_TC INT PRIMARY KEY(TENBM) ) INSERT INTO THONGKE_BM SELECT BM.TENBM, COUNT(GV.MAGV), SUM(GV.LUONG) FROM GIAOVIEN GV, BOMON BM WHERE GV.MABM = BM.MABM GROUP BY BM.MABM, BM.TENBM 128
  55. Ví dụ 42 DELETE FROM GIAOVIEN WHERE HOTEN LIKE N'Trần%' DELETE FROM GIAOVIEN WHERE MAGV = 'GV001' DELETE FROM GIAOVIEN 130
  56. Lệnh DELETE (tt) . Nhận xét - Số lượng số dòng bị xóa phụ thuộc vào điều kiện ở mệnh đề WHERE - Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất cả các dòng trong bảng sẽ bị xóa - Lệnh DELETE có thể gây ra vi phạm RB tham chiếu Không cho xóa Xóa luôn những dòng có giá trị đang tham chiếu đến . CASCADE Đặt NULL cho những giá trị tham chiếu 132
  57. Lệnh DELETE (tt) MABM TENBM HTTT Hệ thống thông tin CNPM Công nghệ phần mềm MMT Mạng máy tính KHMT Khoa học máy tính MANV HOTEN MABM GV001 Nguyễn Văn A NULLHTTT GV002 Trần Văn B NULLHTTT GV003 Trần Thị C CNPM GV004 Đặng Thị D MMT 134
  58. Ví dụ 44 UPDATE GIAOVIEN SET NGAYSINH='08/12/1965' WHERE MAGV='GV001' UPDATE GIAOVIEN SET LUONG=LUONG*1.1 136
  59. Ví dụ 46 . Tăng 10% lương cho giáo viên có tham gia đề tài UPDATE GIAOVIEN SET LUONG = LUONG * 1.1 FROM THAMGIADT TG WHERE TG.MAGV = GIAOVIEN.MAGV UPDATE GIAOVIEN UPDATE GIAOVIEN SET LUONG = LUONG * 1.1 SET LUONG = LUONG * 1.1 WHERE EXISTS ( WHERE MAGV IN ( SELECT * SELECT TG.MAGV FROM THAMGIADT TG FROM THAMGIADT TG WHERE TG.MAGV = GIAOVIEN.MAGV ) WHERE TG.MAGV = GIAOVIEN.MAGV138 )
  60. Lệnh UPDATE . Nhận xét - Những dòng thỏa điều kiện tại mệnh đề WHERE sẽ được cập nhật giá trị mới - Nếu không chỉ định điều kiện ở mệnh đề WHERE, tất cả các dòng trong bảng sẽ bị cập nhật - Lệnh UPDATE có thể gây ra vi phạm RB tham chiếu Không cho sửa Sửa luôn những dòng có giá trị đang tham chiếu đến . CASCADE 140
  61. Khung nhìn . Bảng là một quan hệ được tổ chức lưu trữ vật lý trong CSDL . Khung nhìn cũng là một quan hệ - Không được lưu trữ vật lý (bảng ảo) - Không chứa dữ liệu - Được định nghĩa từ những bảng khác - Có thể truy vấn hay cập nhật thông qua khung nhìn 142
  62. Định nghĩa khung nhìn . Cú pháp CREATE VIEW AS DROP VIEW . Bảng ảo này có - Danh sách thuộc tính trùng với các thuộc tính trong mệnh đề SELECT - Số dòng phụ thuộc vào điều kiện ở mệnh đề WHERE - Dữ liệu được lấy từ các bảng ở mệnh đề FROM 144
  63. Truy vấn trên khung nhìn . Tuy không chứa dữ liệu nhưng có thể thực hiện các câu truy vấn trên khung nhìn SELECT GV.HOTEN FROM GV_HTTT GV WHERE GV.MAGV = 'GV003' GV_HTTT  MABM='HTTT' (GIAOVIEN) HOTEN (MAGV='GV003' (GV_HTTT)) 146
  64. Cập nhật trên khung nhìn . Có thể dùng các câu lệnh INSERT, DELETE và UPDATE cho các khung nhìn đơn giản - Khung nhìn được xây dựng trên 1 bảng và có khóa chính của bảng . Không thể cập nhật dữ liệu nếu - Khung nhìn có dùng từ khóa DISTINCT - Khung nhìn có sử dụng các hàm kết hợp - Khung nhìn có mệnh đề SELECT mở rộng - Khung nhìn được xây dựng từ bảng có RB trên cột - Khung nhìn được xây dựng từ nhiều bảng 148
  65. 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 . Chỉ mục 150
  66. Chỉ mục (tt) . Cú pháp CREATE INDEX ON ( ) DROP INDEX . Ví dụ CREATE INDEX MABM_IND ON GIAOVIEN(MABM) CREATE INDEX MABM_PHAI_IND ON GIAOVIEN(MABM, PHAI) 152