Bài giảng Cơ sở dữ liệu - Chương 5: SQL - Nguyễn Minh Thu
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 (view)
Chỉ mục (index)
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 - Nguyễn Minh Thu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Cơ sở dữ liệu - Chương 5: SQL - Nguyễn Minh Thu
Chương 5 SQL Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 2 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 (view) Chỉ mục (index) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 3 Giới thiệu Ngôn ngữ ĐSQH - Cách thức truy vấn dữ liệu - Khó khăn cho người sử dụng SQL (Structured Query Language) - Ngôn ngữ cấp cao - Người sử dụng chỉ cần đưa ra nội dung cần truy vấn - Được phát triển bởi IBM (1970s) - Được gọi là SEQUEL - Được ANSI công nhận và phát triển thành chuẩn SQL-86 SQL-92 SQL-99 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 4 Giới thiệu (tt) SQL gồm - Định nghĩa dữ liệu (DDL) - Thao tác dữ liệu (DML) - Định nghĩa khung nhìn - Ràng buộc toàn vẹn - Phân quyền và bảo mật - Điều khiển giao tác SQL sử dụng thuật ngữ - Bảng ~ quan hệ - Cột ~ thuộc tính - Dòng ~ bộ Lý thuyết : Chuẩn SQL-92 Ví dụ : SQL Server Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 5 Nội dung chi tiết Giới thiệu Định nghĩa dữ liệu - Kiểu dữ liệu - Các lệnh đị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) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 6 Định nghĩa dữ liệu Là ngôn ngữ mô tả - Lược đồ cho mỗi quan hệ - Miền giá trị tương ứng của từng thuộc tính - Ràng buộc toàn vẹn - Chỉ mục trên mỗi quan hệ Gồm - CREATE TABLE (tạo bảng) - DROP TABLE (xóa bảng) - ALTER TABLE (sửa bảng) - CREATE DOMAIN (tạo miền giá trị) - CREATE DATABASE - Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 7 Kiểu dữ liệu Số (numeric) - INTEGER - SMALLINT - NUMERIC, NUMERIC(p), NUMERIC(p,s) - DECIMAL, DECIMAL(p), DECIMAL(p,s) - REAL - DOUBLE PRECISION - FLOAT, FLOAT(p) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 8 Kiểu dữ liệu (tt) Chuỗi ký tự (character string) - CHARACTER, CHARACTER(n) - CHARACTER VARYING(x) Chuỗi bit (bit string) - BIT, BIT(x) - BIT VARYING(x) Ngày giờ (datetime) - DATE gồm ngày, tháng và năm - TIME gồm giờ, phút và giây - TIMESTAMP gồm ngày và giờ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 9 Lệnh tạo bảng Để định nghĩa một bảng - Tên bảng - Các thuộc tính Tên thuộc tính Kiểu dữ liệu Các RBTV trên thuộc tính Cú pháp CREATE TABLE ( [], [], [] ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 10 Ví dụ - Tạo bảng CREATE TABLE NHANVIEN ( MANV CHAR(9), HONV VARCHAR(10), TENLOT VARCHAR(20), TENNV VARCHAR(10), NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3), LUONG INT, MA_NQL CHAR(9), PHG INT ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 11 Lệnh tạo bảng (tt) - NOT NULL - NULL - UNIQUE - DEFAULT - PRIMARY KEY - FOREIGN KEY / REFERENCES - CHECK Đặt tên cho RBTV CONSTRAINT Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 12 Ví dụ - RBTV CREATE TABLE NHANVIEN ( HONV VARCHAR(10) NOT NULL, TENLOT VARCHAR(20) NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) PRIMARY KEY, NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3) CHECK (PHAI IN (‘Nam’, ‘Nu’)), LUONG INT DEFAULT (10000), MA_NQL CHAR(9), PHG INT ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 13 Ví dụ - RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20) UNIQUE, MAPHG INT NOT NULL, TRPHG CHAR(9), NG_NHANCHUC DATETIME DEFAULT (GETDATE()) ) CREATE TABLE PHANCONG ( MA_NVIEN CHAR(9) FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV), SODA INT REFERENCES DEAN(MADA), THOIGIAN DECIMAL(3,1) ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 14 Ví dụ - Đặt tên cho RBTV CREATE TABLE NHANVIEN ( HONV VARCHAR(10) CONSTRAINT NV_HONV_NN NOT NULL, TENLOT VARCHAR(20) NOT NULL, TENNV VARCHAR(10) NOT NULL, MANV CHAR(9) CONSTRAINT NV_MANV_PK PRIMARY KEY, NGSINH DATETIME, DCHI VARCHAR(50), PHAI CHAR(3) CONSTRAINT NV_PHAI_CHK CHECK (PHAI IN (‘Nam’, ‘Nu’)), LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000), MA_NQL CHAR(9), PHG INT ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 15 Ví dụ - Đặt tên cho RBTV CREATE TABLE PHANCONG ( MA_NVIEN CHAR(9), SODA INT, THOIGIAN DECIMAL(3,1), CONSTRAINT PC_MANVIEN_SODA_PK PRIMARY KEY (MA_NVIEN, SODA), CONSTRAINT PC_MANVIEN_FK FOREIGN KEY (MA_NVIEN) REFERENCES NHANVIEN(MANV), CONSTRAINT PC_SODA_FK FOREIGN KEY (SODA) REFERENCES DEAN(MADA) ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 16 Lệnh sửa bảng Được dùng để - Thay đổi cấu trúc bảng - Thay đổi RBTV Thêm cột Xóa cột Mở rộng cột ALTER TABLE ADD COLUMN [] ALTER TABLE DROP COLUMN ALTER TABLE ALTER COLUMN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 17 Lệnh sửa bảng (tt) Thêm RBTV Xóa RBTV ALTER TABLE ADD CONSTRAINT , CONSTRAINT , ALTER TABLE DROP Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 18 Ví dụ - Thay đổi cấu trúc bảng ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR(20) ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 19 Ví dụ - Thay đổi RBTV CREATE TABLE PHONGBAN ( TENPB VARCHAR(20), MAPHG INT NOT NULL, TRPHG CHAR(9), NG_NHANCHUC DATETIME ) ALTER TABLE PHONGBAN ADD CONSTRAINT PB_MAPHG_PK PRIMARY KEY (MAPHG), CONSTRAINT PB_TRPHG FOREIGN KEY (TRPHG) REFERENCES NHANVIEN(MANV), CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE()) FOR (NG_NHANCHUC), CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 20 Lệnh xóa bảng Được dùng để xóa cấu trúc bảng - Tất cả dữ liệu của bảng cũng bị xóa Cú pháp Ví dụ DROP TABLE DROP TABLE NHANVIEN DROP TABLE PHONGBAN DROP TABLE PHANCONG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 21 Lệnh xóa bảng (tt) NHANVIEN TENNV HONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG PHONGBAN TRPHG TENPHG MAPHG NG_NHANCHUC Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 22 Lệnh tạo miền giá trị Tạo ra một kiểu dữ liệu mới kế thừa những kiểu dữ liệu có sẳn Cú pháp Ví dụ CREATE DOMAIN AS CREATE DOMAIN Kieu_Ten AS VARCHAR(30) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 23 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) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 24 Truy vấn dữ liệu Là ngôn ngữ rút trích dữ liệu thỏa một số điều kiện nào đó Dựa trên - Cho phép 1 bảng có nhiều dòng trùng nhau Phép toán ĐSQH Một số bổ sung Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 25 Truy vấn cơ bản Gồm 3 mệnh đề - 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 SELECT FROM WHERE Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 26 Truy vấn cơ bản (tt) SELECT FROM WHERE SELECT L FROM R WHERE C L (C (R)) SQL và ĐSQH Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 27 Ví dụ SELECT * FROM NHANVIEN WHERE PHG=5 Lấy tất cả các cột của quan hệ kết quả PHG=5 (NHANVIEN) TENNV HONV NGSINH DCHI PHAI LUONG PHG Tung Nguyen 12/08/1955 638 NVC Q5 Nam 40000 5 Hung Nguyen 09/15/1962 Ba Ria VT Nam 38000 5 333445555 987987987 MANV MA_NQL 888665555 333445555 TENLOT Thanh Manh Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 28 Mệnh đề SELECT SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HONV,TENLOT,TENNV(PHG=5 PHAI=‘Nam’ (NHANVIEN)) TENNV HONV Tung Nguyen Hung Nguyen TENLOT Thanh Manh 333445555 987987987 MANV Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 29 Mệnh đề SELECT (tt) SELECT MANV, HONV AS HO, TENLOT AS ‘TEN LOT’, TENNV AS TEN FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HO,TEN LOT,TEN( MANV,HONV,TENLOT,TENNV(PHG=5PHAI=‘Nam’(NHANVIEN))) TEN HO Tung Nguyen Hung Nguyen TEN LOT Thanh Manh 333445555 987987987 MANV Tên bí danh Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 30 Mệnh đề SELECT (tt) SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS ‘HO TEN’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,HO TEN( MANV,HONV+TENLOT+TENNV(PHG=5PHAI=‘Nam’(NHANVIEN))) HO TEN Nguyen Thanh Tung Nguyen Manh Hung 333445555 987987987 MANV Mở rộng Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 31 Mệnh đề SELECT (tt) SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ MANV,LUONG10%( MANV,LUONG*1.1(PHG=5PHAI=‘Nam’(NHANVIEN))) LUONG10% 33000 27500 333445555 987987987 MANV Mở rộng Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 32 Mệnh đề SELECT (tt) SELECT LUONG FROM NHANVIEN WHERE PHG=5 AND PHAI=‘Nam’ Loại bỏ các dòng trùng nhau - Tốn chi phí - Người dùng muốn thấy LUONG 30000 25000 25000 38000 38 DISTINCT LUONG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 33 Ví dụ SELECT FROM WHERE Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’ R1 NHANVIEN PHG=MAPHG PHONGBAN KQ MANV, TENNV (TENPHG=‘Nghien cuu’(R1)) MANV, TENNV NHANVIEN, PHONGBAN TENPHG=‘Nghien cuu’ PHG=MAPHG AND Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 34 Mệnh đề WHERE SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG Biểu thức luận lý TRUE TRUE Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 35 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHG=MAPHG Độ ưu tiên Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 36 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG>20000 AND LUONG<30000 BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG BETWEEN 20000 AND 30000 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 37 Mệnh đề WHERE (tt) NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 38 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘Nguyen _ _ _ _’ LIKE SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘Nguyen %’ Chuỗi bất kỳ Ký tự bất kỳ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 39 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen’ NOT LIKE SELECT MANV, TENNV FROM NHANVIEN WHERE HONV NOT NOT LIKE ‘Nguyen’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 40 Mệnh đề WHERE (tt) SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’ ESCAPE ‘Nguyen_’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 41 Mệnh đề WHERE (tt) Ngày giờ SELECT MANV, TENNV FROM NHANVIEN WHERE NGSINH BETWEEN ‘1955-12-08’ AND ‘1966-07-19’ YYYY-MM-DD MM/DD/YYYY ‘1955-12-08’ ’12/08/1955’ ‘December 8, 1955’ HH:MI:SS ’17:30:00’ ’05:30 PM’ ‘1955-12-08 17:30:00’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 42 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 x + 3 là một biểu thức không hợp lệ trong SQL - 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 43 Mệnh đề WHERE (tt) NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 44 WHERE TRUE Mệnh đề FROM SELECT MANV, MAPHG FROM NHANVIEN, PHONGBAN Không sử dụng mệnh đề WHERE MAPHG 1 4 333445555 333445555 MANV 5 1 987987987 987987987 333445555 4 5 987987987 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 45 Mệnh đề FROM (tt) SELECT TENPHG, DIADIEM FROM PHONGBAN, DDIEM_PHG WHERE MAPHG=MAPHG Tên bí danh AS PB, DDIEM_PHG AS DD PB.MAPHG=DD.MAPHG SELECT TENNV, NGSINH, TENTN, NGSINH FROM NHANVIEN, THANNHAN WHERE MANV=MA_NVIEN V.NGSINH, TE T , TN.NGSINH NV, THANNHAN TN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 46 Ví dụ 1 Với những đề án ở ‘Ha Noi’, cho biết mã đề án, mã phòng ban chủ trì đề án, họ tên trưởng phòng cùng với ngày sinh và địa chỉ của người ấy Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 47 Ví dụ 2 Tìm họ tên của nhân viên phòng số 5 có tham gia vào đề án “Sản phẩm X” với số giờ làm việc trên 10 giờ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 48 Ví dụ 3 Tìm họ tên của từng nhân viên và người phụ trách trực tiếp nhân viên đó Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 49 Ví dụ 4 Tìm họ tên của những nhân viên được “Nguyen Thanh Tung” phụ trách trực tiếp Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 50 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 - ASC: tăng (mặc định) - DESC: giảm SELECT FROM WHERE ORDER BY Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 51 Mệnh đề ORDER BY (tt) Ví dụ SELECT MA_NVIEN, SODA FROM PHANCONG ORDER BY MA_NVIEN DESC, SODA SODA 10 30 999887777 999887777 MA_NVIEN 10 30 987987987 987654321 987987987 10 20 987654321 30 987654321 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 52 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) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 53 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 54 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 55 Ví dụ 5 Cho biết các mã đề án có - Nhân viên với họ là ‘Nguyen’ tham gia hoặc, - Trưởng phòng chủ trì đề án đó với họ là ‘Nguyen’ SELECT SODA FROM NHANVIEN, PHANCONG WHERE MANV=MA_NVIEN AND HONV=‘Nguyen’ UNION SELECT MADA FROM NHANVIEN, PHONGBAN, DEAN WHERE MANV=TRPHG AND MAPHG=PHONG AND HONV=‘Nguyen’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 56 Ví dụ 6 Tìm nhân viên có người thân cùng tên và cùng giới tính SELECT TENNV, PHAI, MANV FROM NHANVIEN INTERSECT SELECT TENTN, PHAI, MA_NVIEN FROM THANNHAN SELECT NV.* FROM NHANVIEN NV, THANNHAN TN WHERE NV.MANV=TN.MA_NVIEN AND NV.TENTN=TN.TENTN AND NV.PHAI=TN.PHAI Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPH ... 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 91 Ví dụ 18 Tìm những phòng ban có lương trung bình cao nhất SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING MAX(AVG(LUONG)) AVG LUONG) >= ALL ( SELECT AVG(LUONG) FROM NHANVIEN GROUP BY PHG) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 92 Ví dụ 19 SELECT TENNV FROM NHANVIEN NV1 WHERE 2 >= ( SELECT COUNT(*) FROM NHANVIEN NV2 WHERE NV2.LUONG>NV1.LUONG ) Tìm 3 nhân viên có lương cao nhất Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 93 Ví dụ 12 Tìm tên các nhân viên được phân công làm tất cả các đồ án SELECT MANV, TENVN FROM NHANVIEN, PHANCONG WHERE MANV=MA_NVIEN GROUP BY MANV, TENNV HAVING COUNT(*) = ( SELECT COUNT(*) FROM DEAN ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 94 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) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 95 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 96 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 97 Ví dụ 18 Cho biết những phòng ban (TENPHG) có lương trung bình của các nhân viên lớn lơn 20000 SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVING AVG(LUONG) > 20000 SELECT PHG, TENPHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY PHG, TENPHG HAVING AVG(LUONG) > 20000 SELECT TE PHG, TEMP.LUONG_TB F M PHONGBAN, (SELECT PHG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHG HAVIN AVG(LUONG)> 20000 ) AS TEMP WHERE M PHG=TEMP.PHG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 98 Điều kiện kết ở mệnh đề FROM Kết bằng Kết ngoài SELECT FROM R1 [INNER] JOIN R2 ON WHERE SELECT FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON WHERE Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 99 Ví dụ 20 SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG SELECT MANV, TENNV FROM NHANVIEN INNER JOIN PHONGBAN ON PHG=MAPHG WHERE TENPHG=‘Nghien cuu’ Tìm mã và tên các nhân viên làm việc tại phòng ‘Nghien cuu’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 100 Ví dụ 21 Cho biết họ tên nhân viên và tên phòng ban mà họ là trưởng phòng nếu có TENNV HONV TENPHG Tung Nguyen Nghien cuu Hang Bui null Nhu Le null Vinh Pham Quan ly SELECT TENNV, HONV, TENPHG FROM NHANVIEN, PHONGBAN WHERE MANV=TRPHG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 101 Ví dụ 21 (tt) TENNV HONV TENPHG Tung Nguyen Nghien cuu Hang Bui null Nhu Le null Vinh Pham Quan ly SELECT TENNV, HONV, TENPHG FROM NHANVIEN LEFT JOIN PHONGBAN ON MANV=TRPHG Mở rộng dữ liệu cho bảng NHANVIEN PHONGBAN NHANVIEN join MANV=TRPHG NHA VIE P O GBAN TRPHG=MANV P O GBAN RIGHT JOIN NHANVIEN ON MANV=TRPHG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 102 Ví dụ 22 SELECT NV.TENNV, NV.TENDA FROM (PHANCONG PC JOIN DEAN DA ON SODA=MADA) RIGHT JOIN NHANVIEN NV ON PC.MA_NVIEN=NV.MANV Tìm họ tên các nhân viên và tên các đề án nhân viên tham gia nếu có NHANVIEN PHANCONG join DEAN MA_NVIEN=MANV join Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 103 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 104 Ví dụ 23 Cho biết họ tên các nhân viên đã đến tuổi về hưu (nam 60 tuổi, nữ 55 tuổi) SELECT HONV, TENNV FROM NHANVIEN WHERE YEAR(GETDATE()) – YEAR(NGSINH) >= ( CASE PHAI WHEN 'Nam' THEN 60 WHEN 'Nu' THEN 55 END ) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 105 Ví dụ 24 Cho biết họ tên các nhân viên và năm về hưu SELECT HONV, TENNV, (CASE PHAI WHEN 'Nam' THEN YEAR(NGSINH) + 60 WHEN 'Nu‘ THEN YEAR(NGSINH) + 55 END ) AS NAMVEHUU FROM NHANVIEN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 106 Kết luận SELECT FROM [WHERE ] [GROUP BY ] [HAVING ] [ORDER BY ] Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 107 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) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 108 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 109 Lệnh INSERT (tt) Cú pháp (thêm 1 dòng) INSERT INTO () VALUES () Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 110 Ví dụ INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV) VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’) INSERT INTO NHANVIEN VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, ’12/30/1952’, ’98 HV’, ‘Nam’, ‘37000’, 4) INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI) VALUES (‘Le’, ‘Van’, ‘Tuyen’, ‘635635635’, NULL) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 111 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ị Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 112 Lệnh INSERT (tt) Cú pháp (thêm nhiều dòng) INSERT INTO () Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 113 Ví dụ CREATE TABLE THONGKE_PB ( TENPHG VARCHAR(20), SL_NV INT, LUONG_TC INT ) INSERT INTO THONGKE_PB(TENPHG, SL_NV, LUONG_TC) SELECT TENPHG, COUNT(MANV), SUM(LUONG) FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 114 Lệnh DELETE Dùng để xóa các dòng của bảng Cú pháp DELETE FROM [WHERE ] Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 115 Ví dụ DELETE FROM NHANVIEN WHERE HONV=‘Tran’ DELETE FROM NHANVIEN WHERE MANV=‘345345345’ DELETE FROM NHANVIEN Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 116 Ví dụ 25 DELETE FROM NHANVIEN WHERE PHG IN ( SELECT MAPHG FROM PHONGBAN WHERE TENPHG=‘Nghien cuu’) Xóa đi những nhân viên ở phòng ‘Nghien cuu’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 117 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 118 Lệnh DELETE (tt) TENNV HONV NGSINH DCHI PHAI LUONG PHG Tung Nguyen 12/08/1955 638 NVC Q5 Nam 40000 5 Hung Nguyen 09/15/1962 Ba Ria VT Nam 38000 5 333445555 987987987 MANV MA_NQL 888665555 333445555 TENLOT Thanh Manh Hang Bui 07/19/1968 33 NTH Q1 Nu 38000 4 999887777 987654321 Ngoc Nhu Le 07620/1951 219 TD Q3 Nu 43000 4 987654321 888665555 Quynh Vinh Pham 11/10/1945 450 TV HN Nam 55000 1 888665555 NULL Van SODA THOIGIAN MA_NVIEN 10 10.0 333445555 20 20.0 888665555 30 20.0 987654321 1 20.0 453453453 Tam Tran 07/31/1972 543 MTL Q1 Nu 25000 5 453453453 333445555 Thanh Quang Tran 04/08/1969 980 LHP Q5 Nam 25000 4 987987987 987654321 Hong 10 35.0 987987987 30 5.0 987987987 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 119 Lệnh DELETE (tt) TENNV HONV NGSINH DCHI PHAI LUONG PHG Tung Nguyen 12/08/1955 638 NVC Q5 Nam 40000 Hung Nguyen 09/15/1962 Ba Ria VT Nam 38000 333445555 987987987 MANV MA_NQL 888665555 333445555 TENLOT Thanh Manh Hang Bui 07/19/1968 33 NTH Q1 Nu 38000 4 999887777 987654321 Ngoc Nhu Le 07620/1951 219 TD Q3 Nu 43000 4 987654321 888665555 Quynh Vinh Pham 11/10/1945 450 TV HN Nam 55000 1 888665555 NULL Van Tam Tran 07/31/1972 543 MTL Q1 Nu 25000 5 5 5 453453453 333445555 Thanh Quang Tran 04/08/1969 980 LHP Q5 Nam 25000 4 987987987 987654321 Hong NULL NULL NULL 05/22/1988 333445555 Nghien cuu 5 NG_NHANCHUC MA_NVIEN 01/01/1995 06/19/1981 987987987 888665555 TENPHG MAPHG Dieu hanh 4 Quan ly 1 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 120 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 ] Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 121 Ví dụ UPDATE NHANVIEN SET NGSINH=’08/12/1965’ WHERE MANV=‘333445555’ UPDATE NHANVIEN SET LUONG=LUONG*1.1 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 122 Ví dụ 26 Với đề án có mã số 10, hãy thay đổi nơi thực hiện đề án thành ‘Vung Tau’ và phòng ban phụ trách là phòng 5 UPDATE DEAN SET DIADIEM_DA=’Vung Tau’, PHONG=5 WHERE MADA=10 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 123 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 124 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 125 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 126 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 127 Định nghĩa khung nhìn Cú pháp 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 CREATE VIEW AS DROP VIEW Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 128 Ví dụ CREATE VIEW NV_P5 AS SELECT MANV, HONV, TENLOT, TENVN FROM NHANVIEN WHERE PHG=5 CREATE VIEW TONGLNG_SLNV_PB AS SELECT MAPHG, TENPHG, COUNT(*) AS SLNV, SUM(LUONG) AS TONGLNG FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG, MAPHG Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 129 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 TENNV FROM NV_P5 WHERE HONV LIKE ‘Nguyen’ NV_P5 MANV,HONV, TENLOT, TENNV (PHG=5 (NHANVIEN)) TENNV (HONV=‘Nguyen’ (NV_P5)) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 130 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 HONV, TENVN, TENDA, THOIGIAN FROM NV_P5, PHANCONG, DEAN WHERE MANV=MA_NVIEN AND SODA=MADA NV_P5 MANV,HONV, TENLOT, TENNV (PHG=5 (NHANVIEN)) TMP NV_P5 MANV=MA_NVIEN PHONGBAN SODA=MADADEAN TENNV,TENDA,THOIGIAN(TMP) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 131 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 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 132 Cập nhật trên khung nhìn (tt) Sửa lại họ cho nhân viên mã ‘123456789’ ở phòng 5 là ‘Pham’ UPDATE NV_P5 SET HONV=‘Pham’ WHERE MANV= ‘123456789’ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 133 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 (view) Chỉ mục (index) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 134 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 NHANVIEN WHERE PHG=5 AND PHAI=‘Nu’ Bảng NHANVIEN có 10.000 bộ Có 200 nhân viên làm việc cho phòng 5 Đọc 10.000 bộ Đọc 200 bộ Đọc 70 bộ Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 135 Chỉ mục (tt) Cú pháp Ví dụ CREATE INDEX ON () CREATE INDEX PHG_IND ON NHANVIEN(PHG) CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI) DROP INDEX Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 136 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ý??? Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 137 Ví dụ Xét quan hệ - PHANCONG(MA_NVIEN, SODA, THOIGIAN) Giả sử - PHANCONG được lưu trữ trong 10 block Chi phí để đọc toàn bộ dữ liệu của PHANCONG là 10 - Trung bình một nhân viên tham gia 3 đề án và một đề án có khoảng 3 nhân viên làm Dữ liệu được trải đều trong 10 block Chi phí để tìm một nhân viên hay một đề án là 3 - Khi sử dụng chỉ mục Chi phí đọc hay cập nhật chỉ mục - Thao tác thêm cần 2 lần truy xuất đĩa Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 138 Ví dụ (tt) Giả sử có 3 thao tác được thực hiện thường xuyên - Q1 - Q2 - Q3 SELECT SODA, THOIGIAN FROM PHANCONG WHERE MA_NVIEN=‘123456789’ SELECT MANV FROM PHANCONG WHERE SODA=1 AND THOIGIAN=20.5 INSERT INTO PHANCONG VALUES ( 123456789’, 1, 20.5) Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 139 Ví dụ (tt) Bảng so sánh chi phí Thao tác Không có chỉ mục Chỉ mục trên MA_NVIEN Chỉ mục trên SODA Chỉ mục trên cả 2 thuộc tính Q1 Q2 Q3 10 10 2 4 10 4 10 4 4 4 4 6 2 + 8p1 + 8p2 4 + 6p2 4 + 6p1 6 - 2p1 – 2p2 Chí phí TB Khoảng thời gian thực hiện Q1 là p1 Khoảng thời gian thực hiện Q2 là p2 Khoảng thời gian thực hiện Q3 là 1 - p1 - p2 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 140 Bài tập về nhà Bài tập - 6.1.1 đến 6.1.4 / 252 - 253 - 6.2.1 đến 6.2.3 / 262 - 263 - 6.3.1 đến 6.3.3 / 274 - 275 - 6.3.7 đến 6.3.10 / 275 - 276 - 6.4.1, 6.4.2, 6.4.6, 6.4.7 / 284 - 285 - 6.5.1, 6.5.2 / 290 - 291 - 6.7.1 đến 6.7.6 / 311 -312 Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 141
File đính kèm:
- bai_giang_co_so_du_lieu_chuong_5_sql_nguyen_minh_thu.pdf