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)

pdf 141 trang yennguyen 6560
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

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=5PHAI=‘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=5PHAI=‘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=5PHAI=‘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:

  • pdfbai_giang_co_so_du_lieu_chuong_5_sql_nguyen_minh_thu.pdf