Bài giảng môn Cơ sở dữ liệu - Chương 3: Ngôn ngữ truy vấn SQL

pdf 43 trang ngocly 5380
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Cơ sở dữ liệu - Chương 3: Ngôn ngữ truy vấn SQL", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_mon_co_so_du_lieu_chuong_3_ngon_ngu_truy_van_sql.pdf

Nội dung text: Bài giảng môn Cơ sở dữ liệu - Chương 3: Ngôn ngữ truy vấn SQL

  1. CƠ SỞ DỮ LIỆU ( Databases ) Ch ươ ng 3: Ngôn ng ữ truy v ấn SQL bangtqh@utc2.edu.vn Nội dung 1. Khái quát v ề ngôn ng ữ truy v ấn d ữ li ệu 2. Câu l ệnh SELECT 3. Các hàm thao tác d ữ li ệu 4. Truy v ấn thông tin t ừ nhi ều b ảng 5. Các l ệnh c ập nh ật d ữ li ệu 6. Các l ệnh liên quan t ới c ấu trúc 7. Các l ệnh giao quy ền truy c ập CSDL 8. Bài t ập bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 2
  2. 3.1. Gi ới thi ệu SQL  SQL đượ c xem là yếu tố chính đóng góp vào sự thành công của CSDL quan hệ khi áp dụng trong th ực tế.  Là ngôn ng ữ mức cao, ng ườ i dùng ch ỉ cần xác đị nh kết qu ả của truy vấn là gì, ph ần còn lại là tính toán và tối ưu hoá câu lệnh đượ c DBMS đả m nhi ệm.  1970: SQL (Structured Query Language ) bắt ngu ồn từ ngôn ng ữ SEQUEL (Structured English QUE ry Language ), ngôn ng ữ đượ c thi ết kế tại tập đoàn IBM nh ằm khi đư a ra hệ qu ản tr ị CSDL có tên là SYSTEM-R bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 3 3.1. Gi ới thi ệu SQL (tt)  Năm 1976: SEQUEL đượ c cải ti ến thành SEQUEL2  Năm 1978-1979: SEQUEL2 đượ c nâng cấp và đổ i tên thành SQL (nh ưng vẫn đọ c là SEQUEL)  Chu ẩn SQL đầ u tiên có tên gọi SQL-86 (SQL1) đượ c công nh ận và chu ẩn hóa bởi ANSI và ISO.  Năm 1992: SQL1 đượ c mở rộng với nhi ều tính năng mới và đượ c gọi là SQL-92 (SQL2).  Năm 1999: Chu ẩn SQL-99 (SQL3) ra đờ i  Phiên bản mới nh ất hi ện nay là SQL-2011 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 4
  3. 3.1. Gi ới thi ệu SQL (tt)  Ngôn ng ữ giao thi ết CSLD g ồm: – DDL – Data Definition Language – DML – Data Manipulation Language – SQL – Structured Query Language – DCL – Data Control Language  SQL g ồm 2 nhóm l ệnh – DDL: T ạo c ấu trúc CSDL – DML: Thao tác trên CDSDL • CREATE • SELECT • INSERT, UPDATE, DELETE bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 5 Lược đồ CSDL s ử dụng NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH, MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYB Đ) DIADIEM_PHG (MAPB, DIADIEM) DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV, MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 6
  4. 3.2. l ệnh SELECT – Truy v ấn d ữ li ệu  Gồm 3 m ệnh đề c ơ b ản SELECT FROM WHERE – • Tên các c ột c ần hi ển th ị ở k ết qu ả truy v ấn – • Tên các b ảng (ngu ồn) d ữ li ệu khi truy v ấn – • Xác đị nh bi ểu th ức boolean xác đị nh dòng (b ộ) nào đượ c trích ra •Nối các bi ểu th ức: AND, OR, NOT • Phép toán: >, =, =, x FROM WHERE σ SELECT L FROM R πL(σC(R )) WHERE C bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 8
  5. Ví dụ Lấy t ất c ả các c ột SELECT * của quan h ệ FROM NHANVIEN WHERE PHG=5 σPHG=5 (NHANVIEN) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 9 Mệnh đề SELECT bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 10
  6. Mệnh đề SELECT (tt)  Tên, Bí danh SELECT MANV, HONV AS 'H ọ', TENLOT AS ‘Tên lót’ , TENNV AS 'Tên ' FROM NHANVIEN WHERE PHG=5 AND PHAI=‘ Nam ’ ρMANV,HO,TEN LOT,TEN (πMaNV,HONV,TENLOT,TENNV σPHG=5 ∧PHAI=‘Nam’ (NHANVIEN ))) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 11 Mệnh đề SELECT (tt)  Mở r ộng: SELECT MANV, HONV +’ ‘ + TENLOT+ ’ ‘ TENNV AS ‘HO TEN’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘ Nam ’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 12
  7. Mệnh đề SELECT (tt)  Mở r ộng: SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘ Nam ’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 13 Mệnh đề SELECT (tt)  Lo ại b ỏ các dòng trùng nhau SELECT LUONG FROM NHANVIEN SELECT DISTINCT LUONG WHERE PHG=5 AND PHAI=‘ Nam ’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘ Nam ’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 14
  8. Ví dụ  Cho bi ết MANV và TENNV làm vi ệc ở phòng ‘Nghien cuu’ SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG AND TENPGH=‘ Nghien cuu ’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 15 Mệnh đề WHERE Bi ểu th ức lu ận lý SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG AND TENPHG=‘ Nghien cuu ’ TRUE TRUE bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 16
  9. Mệnh đề WHERE (tt)  Độ ưu tiên – Vi ết tr ướ c th ực hi ện tr ướ c – Trong ngo ặc th ực hi ện tr ướ c SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE (TENPHG=‘ Nghien cuu ’ OR TENPHG=‘ Quan ly ’) AND PHG=MAPHG bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 17 Mệnh đề WHERE (tt)  BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG>=2000000 AND LUONG<=3000000 SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG BETWEEN 2000000 AND 3000000  NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG NOT BETWEEN 2000000 AND 3000000 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 18
  10. Mệnh đề WHERE (tt)  IN  NOT IN SELECT MANV, TENNV SELECT MANV, TENNV FROM NHANVIEN FROM NHANVIEN WHERE PHG IN (4,5) WHERE PHG NOT IN (4,5) SELECT MANV, TENNV FROM NHANVIEN WHERE PHG = 4 OR PHG=5 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 19 Mệnh đề WHERE (tt)  LIKE –Lấy t ất c ả chu ỗi gi ống v ới m ẫu SELECT MANV, TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen_ _ _ _’ 1 Ký t ự b ất k ỳ SELECT MANV, TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen %’ Nhi ều ký t ự b ất k ỳ  NOT LIKE –Lấy t ất c ả nh ững chu ỗi không gi ống bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 20
  11. 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 un witheld) SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 21 Mệnh đề WHERE (tt)  Không s ử d ụng WHERE –Kết qu ả là phép tích “ đề -các” bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 22
  12. Mệnh đề FROM  Tên, Bí danh SELECT TENPHG, DIADIEM SELECT TENPHG, DIADIEM FROM PHONGBAN, DDIEM_PHG FROM PHONGBAN, DDIEM_PHG WHERE MAPHG=MAPHG WHERE PhongBan.MAPHG=DDiem_PHG.MAPHG Bí danh bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 23 Mệnh đề ORDER BY  Dùng để hi ển th ị k ết qu ả truy v ấn theo th ứ t ự  Cú pháp: SELECT FROM WHERE ORDER BY – ASC: S ắp x ếp t ăng ( mặc đị nh ) – DESC: S ắp x ếp gi ảm bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 24
  13. Mệnh đề ORDER BY (tt)  Ví d ụ: SELECT MANV, MADA FROM PHANCONG ORDER BY MANV DESC, MADA MANV MADA 999888777 10 999888777 30 888777666 10 888777666 30 333222111 10 333222111 20 333222111 30 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 25 Gom nhóm - GROUP BY  Cú pháp: SELECT FROM WHERE GROUP BY  Mỗi bộ trong nhóm sẽ có cùng giá tr ị tại các thu ộc tính gom nhóm.  Chú ý: –Mỗi thu ộc tính li ệt kê sau SELECT sẽ có 1 giá tr ị ứng v ới mỗi nhóm. –Tất c ả các thu ộc tính sau SELECT ph ải xu ất hi ện ở sau mệnh đề GROUP BY (Tr ừ thu ộc tính có giá tr ị là hàm ) – Có th ể có thu ộc tính xu ất hi ện ở GROUP BY nh ưng không xu ất hi ện ở SELECT bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 26
  14. Mệnh đề GROUP BY (tt)  Ví d ụ: Cho bi ết s ố l ượ ng nhân viên ở m ỗi phòng ban SELECT PHG, COUNT(*) AS ‘So NV’ FROM NHANVIEN GROUP BY PHG Ho ặc SELECT T ENPHG, COUNT(*) AS ‘So NV’ FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 27 Mệnh đề GROUP BY (tt)  Ví d ụ: Hãy cho bi ết mã nhân viên, s ố l ượ ng đề án và tổng th ời gian mà h ọ tham gia MaNV So DA Tong TG 999888777 10 32.5 SELECT MaNV, COUNT(*) AS ‘So DA’, 999888777 30 10 SUM (THOIGIAN) AS ‘Tong TG’ 888777666 10 10 FROM PHANCONG 888777666 30 10 GROUP BY MaNV 333222111 10 35.7 333222111 20 25 333222111 30 5 SELECT NV.MaNV, TENV, COUNT(*) AS ‘So DA’, SUM (THOIGIAN) AS ‘Tong TG’ MaNV So DA Tong TG FROM PHANCONG PC, NHANVIEN NV 999888777 2 42.5 WHERE PC.MaNV = NV.MaNV 888777666 2 20 GROUP BY PC .MaNV, TenNV 333222111 3 65.7 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 28
  15. Mệnh đề HAVING  Ví d ụ: Hãy tìm nh ững nhân viên tham gia t ừ 2 đề án tr ở lên. MaNV So DA Tong TG 999888777 10 32.5 999888777 30 10 888777666 10 10 888777666 30 10 333222111 10 35.7 Bị lo ại ra 333222111 20 25 333222111 30 5 555444333 30 15 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 29 Mệnh đề HAVING (tt)  Đượ c s ử d ụng khi c ần l ọc ra nh ững nhóm th ỏa mãn điều ki ện nào đó  Cú pháp: SELECT FROM WHERE GROUP BY HAVING  Ví d ụ: – Tìm mã nh ững nhân viên tham gia nhi ều h ơn 2 Đề án SELECT MaNV, COUNT(*) AS ‘So DA’, FROM PHANCONG GROUP BY MaNV HAVING COUNT (*) > 2 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 30
  16. Mệnh đề HAVING (tt)  Cho bi ết nh ững phòng ban có l ươ ng trung bình c ủa nhân viên l ớn h ơn 3 tri ệu SELECT PHG, AVG (LUONG) AS ‘Luong TB’ FROM NHANVIEN GROUP BY PHG HAVING AVG (LUONG) > 3000000 Ho ặc SELECT NV.PHG, PB.TenPB, Avg(NV.Luong) AS "TB Luong" FROM NhanVien AS NV , PhongBan AS PB WHERE NV.Phg = PB.MaPB GROUP BY NV.PHG, PB.TenPB HAVING AVG (LUONG) > 3000000; bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 31 3.3. Các hàm thao tác dữ li ệu (tt)  Các hàm tính toán trên b ản ghi – ABS : tính tr ị tuy ệt đố i – POWER (x, y): tr ả v ề x y – SQRT : Tính c ăn b ậc 2 – LOG : Tính Log t ự nhiên – EXP : Tính e x – SIGN (x): Ki ểm tra d ấu c ủa x (tr ả v ề -1 | 0 | 1) – ROUND (x, n): làm tròn x t ới n s ố l ẻ (Access là RND) – Các hàm l ượ ng giác: SIN , COS , TAN , ASIN , ACOS , bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 32
  17. 3.3. Các hàm thao tác dữ li ệu (tt)  Các hàm x ử lý chu ỗi – LEN (str) : Cho chi ều dài chu ỗi ký tự – LEFT (str, n): Lấy n ký t ự phía trái c ủa chu ỗi str – RIGHT (str, n): Lấy n ký t ự phía ph ải c ủa chu ỗi str – MID (str, p, n): Lấy n ký t ự c ủa chu ỗi str kể t ừ v ị trí p trong dãy bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 33 3.3. Các hàm thao tác dữ li ệu (tt)  Các hàm x ử lý th ời gian – DATE (): Cho ngày tháng n ăm hi ện tại – DAY (dd): Cho s ố th ứ t ự ngày trong tháng c ủa bi ểu th ức ngày dd – MONTH (dd) Cho số th ứ t ự tháng trong n ăm c ủa bi ểu th ức ngày dd – YEAR (dd) Cho n ăm c ủa bi ểu th ức ngày dd – HOUR (tt) Cho gi ờ trong ngày (0- 23) – MINUTE (tt) Cho s ố phút c ủa th ời gian tt – SECONDS (tt) Cho s ố giây c ủa bi ểu th ức gi ờ tt. bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 34
  18. 3.4. Truy v ấn t ừ nhi ều bảng  Truy v ấn trên nhi ều b ảng v ề b ản ch ất gi ống nh ư truy vấn trên 1 b ảng ( đã k ết nhi ều b ảng l ại).  Sử d ụng các phép k ết (join) –Kết b ằng (phép k ết n ội – inner join) –Kết ngoài (outter join) – Truy v ấn l ồng nhau bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 35 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Phép k ết t ự nhiên SELECT FROM WHERE Ho ặc SELECT FROM INNER JOIN ON WHERE Ví d ụ: Đư a ra danh sách nhân viên và tên phòng làm vi ệc SELECT HoNV, Tenlot, TenNV, TenPB FROM Nhanvien, PhongBan WHERE PHG = MaPB bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 36
  19. 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Ví d ụ: Tìm mã và h ọ tên các nhân viên làm vi ệc ở phòng ‘Kinh doanh’ SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB FROM Nhanvien INNER JOIN PhongBan ON PHG = MaPB WHERE TenPB LIKE ‘%Kinh doanh’ Ho ặc: SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’, TenPB FROM Nhanvien, PhongBan WHERE PHG = MaPB AND TenPB LIKE ‘%Kinh doanh’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 37 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Phép k ết ngoài SELECT FROM LEFT | RIGHT | [OUTTER] JOIN ON WHERE bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 38
  20. 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Ví d ụ: Cho bi ết nhân viên và tên c ủa phòng ban mà họ là tr ưở ng phòng (n ếu có) SELECT HoNV, Tenlot, TenNV, TenPB FROM NhanVien NV LEFT JOIN PhongBan PB ON NV.MaNV=PhongBan.TrgPhg bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 39 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Ví d ụ: Tìm h ọ tên nhân viên và tên thân nhân c ủa h ọ (n ếu có) SELECT NV.MaNV, HoNV, TenLot, TenNV, TenTN, Quanhe FROM ThanNhan TN RIGHT JOIN NhanVien NV ON TN.MaNV = NV.MaNV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 40
  21. 3.4. Truy v ấn t ừ nhi ều bảng (tt)  Truy v ấn l ồng nhau –Một câu truy v ấn ( SELECT ) l ồng vào câu truy v ấn khác gọi là truy v ấn l ồng nhau hay Subquery – Subquery đượ c bao b ởi c ặp d ấu ngo ặc ( ) và có th ể lồng nhau nhi ều m ức. – Subquery đượ c l ồng vào sau t ừ khóa WHERE ho ặc HAVING – Câu truy v ấn con th ườ ng tr ả v ề 1 t ập các giá tr ị –Nếu có nhi ều truy v ấn con sau WHERE thì th ườ ng đượ c k ết h ợp v ới nhau b ởi các phép toán logic bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 41 Truy v ấn l ồng nhau (tt) SELECT FROM Truy v ấn cha WHERE ( SELECT FROM WHERE ) Truy v ấn con bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 42
  22. Truy v ấn l ồng nhau (tt)  Các phép toán t ập h ợp – IN – NOT IN – ALL – ANY / SOME – EXISTS – NOT EXISTS bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 43 Truy v ấn l ồng nhau (tt)  Có 2 lo ại truy vấn lồng –Lồng phân cấp: •Mệnh đề WHERE của Subquery không tham chi ếu đế n các thu ộc tính của các bảng trong mệnh đề FROM của truy vấn cha • Khi th ực hi ện truy vấn con đượ c th ực hi ện tr ướ c –Lồng tươ ng quan : •Mệnh đề WHERE của Subquery tham chi ếu đế n ít nh ất 1 thu ộc tính của bảng trong mệnh đề FROM của truy vấn cha • Khi th ực hi ện, câu truy vấn con đượ c th ực nhi ều lần – mỗi lần ứng với 1 bộ của câu truy vấn cha bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 44
  23. Ví dụ - Truy v ấn l ồng phân c ấp  Đư a ra mã nhân viên, h ọ tên nhân viên thu ộc phòng ‘Tài chính’ ho ặc phòng ‘K ế ho ạch’ SELECT MaNV, HoNV, TenLot, TenNV FROM NHANVIEN WHERE Phg IN ( SELECT MaPHG FROM PHONGBAN WHERE TenPB LIKE ‘%Tài chính’ OR TenPB LIKE ‘%K ế ho ạch’ ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 45 Ví d ụ - Truy v ấn l ồng phân cấp (tt)  Hãy tìm nh ững đề án có nhân viên h ọ ‘Nguy ễn’ tham gia SELECT MaDA, TenDA FROM DEAN WHERE MaDA IN ( SELECT MaDA FROM PHANCONG PC, NHANVIEN NV WHERE PC.MaNV = NV.MaNV AND NV.HoNV LIKE ‘%Nguy ễn%’ ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 46
  24. Ví d ụ - Truy v ấn l ồng phân c ấp (tt)  Hãy tìm nh ững nhân viên không có thân nhân nào SELECT * SELECT * FROM NHANVIEN FROM NHANVIEN WHERE NOT IN ( WHERE MaNV ANY ( SELECT LUONG FROM NHANVIEN WHERE PhG = 4 ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 48
  25. Ví d ụ - Truy v ấn l ồng phân c ấp (tt)  Tìm nh ững tr ưở ng phòng có t ối thi ểu 1 thân nhân SELECT * FROM NHANVIEN WHERE MANV IN (SELECT MaNV FROM THANNHAN) AND MANV IN (SELECT TRPHG FROM PHONGBAN)  Tìm nh ững Nhân viên có l ươ ng cao h ơn l ươ ng c ủa mọi nhân viên phòng 4 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 49 Truy v ấn l ồng t ương quan –Mệnh đề WHERE của Subquery tham chi ếu đế n ít nh ất 1 thu ộc tính của bảng trong mệnh đề FROM của truy vấn cha – Khi th ực hi ện, câu truy vấn con đượ c th ực nhi ều lần – mỗi lần ứng với 1 bộ của câu truy vấn cha  Ví dụ: – Tìm nh ững tr ưở ng phòng có ít nh ất 1 thân nhân SELECT * FROM NHANVIEN NV WHERE EXISTS ( SELECT * FROM THANNHAN TN WHERE TN.MaNV = NV.MaNV) AND EXISTS (SELECT TrgPHG FROM PHONGBAN WHERE TrgPHG = NV.MaNV) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 50
  26. Ví d ụ - Truy v ấn l ồng lương quan (tt)  Tìm nh ững nhân viên không có thân nhân nào SELECT * FROM NHANVIEN NV WHERE NOT EXISTS ( SELECT * FROM THANNHAN TN WHERE TN.MaNV = NV.MaNV ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 51 Ví d ụ - Truy v ấn l ồng l ương quan (tt)  Tìm nh ững nhân viên có l ươ ng cao h ơn l ươ ng trung bình c ủa phòng SELECT * FROM NHANVIEN NV1 WHERE NV1.Luong > ( SELECT AVG(NV2.Luong) FROM NHANVIEN NV2 WHERE NV2.Phg = NV1.Phg ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 52
  27. Ví d ụ - Truy v ấn l ồng l ương quan (tt)  Tìm nh ững nhân viên có l ươ ng b ằng l ươ ng cao h ơn lươ ng c ủa ít nh ất 1 nhân viên thu ộc phòng ‘Tài chính’ SELECT * FROM NHANVIEN NV1 WHERE EXISTS ( SELECT * FROM NHANVIEN NV2, PHONGBAN PB WHERE NV2.Phg = PB.MaPB AND PB.TenPB LIKE ‘%Tài chính%’ AND NV1.Luong > NV2.Luong ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 53 Nhận xét IN và EXISTS  IN – IN – Thu ộc tính ở m ệnh đề SELECT câu truy v ấn con ph ải có cùng ki ểu d ữ li ệu v ới thu ộc tính ở m ệnh đề WHERE trong câu truy v ấn cha  EXISTS – Không c ần có thu ộc tính, h ăng s ố hay bi ểu th ức nào đứ ng tr ướ c – Không c ần li ệt kê thu ộc tính ở b ệnh đề SELECT trong câu truy v ấn con – Nh ững câu truy v ấn có = ANY ho ặc IN đề u có th ể chuy ển thành câu truy v ấn dùng EXISTS bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 54
  28. Các phép toán t ập h ợp trong SQL  Phép h ợp: UNION  Phép giao: INTERSECT  Phép tr ừ: EXCEPT  Cú pháp: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 55 Phép toán t ập hợp trong SQL (tt)  Ví d ụ: Tìm các mã đề án có nhân viên h ọ ‘Nguy ễn’ tham gia ho ặc tr ưở ng phòng ch ủ trì đề án có h ọ ‘Nguy ễn’ SELECT MaDA FROM PHANCONG PC, NHANVIEN NV WHERE (PC.MaNV = NV.MaNV) AND (HoNV = ‘Nguy ễn’) UNION ( SELECT MaDA FROM NHANVIEN NV, PHONGBAN PB, DEAN DA WHERE (NV.MaNV=PB.TrgPhg) AND (DA.Phong= PB.MaPB) AND (NV.HoNV = ‘Nguy ễn’) ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 56
  29. 3.5. Các l ệnh c ập nhật dữ li ệu  Thêm 1 b ộ (dòng) m ới  Sửa 1 b ộ (dòng)  Xóa 1 b ộ (dòng)  Tạo m ới 1 quan h ệ (b ảng) v ới n ội dung t ừ CSDL bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 57 3.5.1. Thêm dòng vào bảng  Cú pháp INSERT INTO ( ) VALUES ( )  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 58
  30. 3.5.1. Thêm dòng vào bảng (tt)  Nh ận xét l ệnh INSERT INTO – Th ứ t ự giá tr ị sau VALUES ph ải trùng v ới th ứ t ự c ột sau INSERT INTO – Có th ể thêm giá tr ị NULL ở thu ộc tính không là khóa chính –Lệnh INSERT INTO có th ể không th ực hi ện đượ c (l ỗi) nếu vi ph ạm ràng bu ộc toàn v ẹn (RBTV) • Khóa chính • Tham chi ếu • Thu ộc tính NOT NULL bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 59 3.5.1. Thêm dòng vào bảng (tt)  Thêm nhi ều dòng INSERT INTO ( )  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 60
  31. 3.5.2. Sửa dòng trong bảng  Cú pháp UPDATE SET = , = , [ WHERE ]  Ví d ụ: Tăng l ươ ng 30% cho nh ững ng ườ i là ‘n ữ’ UPDATE NHANVIEN SET Luong = Luong*1.3, WHERE phai = ‘N ữ’ bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 61 3.5.2. Sửa dòng trong bảng (tt)  Nh ận xét –Lệnh UPDATE c ập nh ật nh ững dòng th ỏa điều ki ện sau WHERE –Nếu không ch ỉ đị nh điều ki ện sau WHERE thì m ọi dòng trong b ảng s ẽ đượ c c ập nh ật giá tr ị m ới –Lệnh UPDATE có th ể gây ra vi ph ạm RBTV • Không cho ch ỉnh s ửa •Sửa luôn dòng có giá tr ị tham chi ếu đế n (CASCADE) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 62
  32. 3.5.3. Xóa dòng trong bảng  Cú pháp DELETE FROM WHERE  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 63 3.5.3. Xóa dòng trong bảng (tt)  Ví d ụ: Xóa đi nh ững nhân viên làm ở phòng ‘D ự án ’ DELETE FROM NHANVIEN WHERE PHG IN ( SELECT MaPB FROM PHONGBAN WHERE TenPB = ‘Phòng D ự án’ ) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 64
  33. 3.5.3. Xóa dòng trong bảng (tt)  Nh ận xét –Số dòng b ị xóa ph ụ thu ộc vào điều ki ện sau WHERE –Nếu không ch ỉ rõ điều ki ện sau WHERE t ất c ả các dòng trong b ảng s ẽ b ị xóa –Lệnh DELETE FROM có th ể gây ra vi ph ạm RBTV • Không cho xóa • Xóa luôn nh ững dòng có giá tr ị đang tham chi ếu đế n • Đặ t Null cho nh ững giá tr ị tham chi ếu bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 65 3.5.3. Xóa dòng trong bảng (tt) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 66
  34. 3.5.4. Tạo bảng t ừ CSDL  Cú pháp: SELECT FROM INTO WHERE GROUP BY HAVING ORDER BY bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 67 3.5.4. Tạo bảng t ừ CSDL (tt)  Ví d ụ SELECT PB.TenPB, AVG (NV.Luong) AS TBLuong FROM NHANVIEN NV, PHONGBAN PB INTO TABLE TBLUONG_PHONGBAN WHERE NV.PHG = PB.MaPB GROUP BY PHG, TenPB bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 68
  35. 3.6. Các l ệnh liên quan c ấu trúc CSDL  Các ki ểu d ữ li ệu trong SQL Tên ki ểu Ý ngh ĩa Char(w) Ki ểu ký t ự độ r ộng c ố đị nh (w) Varchar(w) Ki ểu ký t ự có độ r ộng thay đổ i 0 ÷ w Integer Ki ểu số nguyên Byte Ki ểu số nguyên nh ỏ (0 ÷255) Số th ực r ộng w v ị trí (c ả d ấu ch ấm) có s ch ữ s ố th ập Numberic (w,s) phân Real, Double Số th ực d ấu ph ẩy độ ng Float (n) Số th ực d ấu ph ẩy độ ng có ít nh ất n ch ữ s ố Date Ki ểu ngày tháng Time Ki ểu th ời gian (gi ờ/phút/giây) Logical Ki ểu logic (True/False) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 69 3.6.1. L ệnh t ạo b ảng CREATE TABLE  Để đị nh ngh ĩa 1 b ảng c ần ch ỉ ra: – Tên b ảng – Các thu ộc tính • Tên thu ộc tính • Ki ểu d ữ li ệu • RBTV trên thu ộc tính  Cú pháp bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 70
  36. 3.6.1. CREATE TABLE (tt)  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 71 3.6.1. CREATE TABLE (tt)  RBTV – NOT NULL – NULL – UNIQUE – DEFAUL – PRIMARY KEY – FOREIGN KEY / REFERENCES – CHECK  Đặ t tên cho RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 72
  37. 3.6.1. CREATE TABLE (tt)  Ví d ụ RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 73 3.6.1. CREATE TABLE (tt)  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 74
  38. 3.6.1. CREATE TABLE (tt)  Ví d ụ - đặ t tên cho RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 75 3.6.1. CREATE TABLE (tt)  Ví d ụ - đặ t tên cho RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 76
  39. 3.6.2. Lệnh s ửa bảng  Thay đổ i c ấu trúc b ảng – Thêm c ột m ới – Xóa c ột –Mở r ộng c ột bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 77 3.6.2. Lệnh s ửa bảng (tt)  Thay đổ i RBTV – Thêm RBTV – Xóa RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 78
  40. 3.6.2. Lệnh s ửa bảng (tt)  Ví d ụ - thay đổ i c ấu trúc bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 79 3.6.2. Lệnh s ửa bảng (tt)  Ví d ụ - thay đổ i RBTV bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 80
  41. 3.6.3. Xóa bảng  Cú pháp:  Ví d ụ: bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 81 3.6.3. Xóa bảng (tt) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 82
  42. 3.7. L ệnh giao quy ền truy c ập CSDL (Đọ c tài li ệu) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 83 bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 84
  43. 3.8. Bài t ập (Tài li ệu, trang 59 – 62) bangtqh@utc2.edu.vn Ch ươ ng 3 - Ngôn ng ữ truy v ấn SQL 85