Bài giảng môn học Cơ sở dữ liệu - Chương 5: SQL

Đị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 (tạo cơ sở dữ liệu)

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)

pdf 151 trang kimcuc 5940
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn học Cơ sở dữ liệu - Chương 5: SQL", để 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 môn học Cơ sở dữ liệu - Chương 5: SQL

Bài giảng môn học Cơ sở dữ liệu - Chương 5: SQL
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 (DDL)
 Truy vấn dữ liệu (DML)
 Cập nhật dữ liệu (DML)
 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 (DDL)
- Kiểu dữ liệu
- Các lệnh định nghĩa dữ liệu
 Truy vấn dữ liệu (DML)
 Cập nhật dữ liệu (DML)
 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 (tạo cơ sở dữ liệu)
- 
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_FK 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
TENNVHONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHONGBAN
TRPHGTENPHG MAPHG NG_NHANCHUC
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 22
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
- 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 (DML)
 Khung nhìn (View)
 Chỉ mục (Index)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 23
Truy vấn dữ liệu
 Là ngôn ngữ rút trích dữ liệu
- Thường đi kèm với một số điều kiện nào đó
 Dựa trên
- Cho phép kết quả trả về của 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 24
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 25
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 26
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)
TENNVHONV NGSINH DCHI PHAI LUONG PHG
TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5
HungNguyen 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 27
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))
TENNVHONV
TungNguyen
HungNguyen
TENLOT
Thanh
Manh
333445555
987987987
MANV
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 28
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)))
TENHO
TungNguyen
HungNguyen
TEN LOT
Thanh
Manh
333445555
987987987
MANV
Tên bí danh
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 29
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 30
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 31
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 32
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=MAPHGAND
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 33
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 34
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 35
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 36
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 37
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 38
Mệnh đề WHERE (tt)
SELECT MANV, TENNV 
FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen’
NOT LIKE
SELECT MANV, TENNV 
FROM NHANVIEN
WHERE HONV NOT LIKE ‘Nguyen’
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 39
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 40
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)
• Che giấu dữ liệu (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 41
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 42
Mệnh đề WHERE (tt)
UNKNOWN
- Logic điều kiện trong SQL là logic 3 trị (three-value logic)
• True (1)
• False (0)
• Unknown (1/2)
- Phép toán logic
• x and y (giá trị nhỏ nhất)
• x or y (giá trị lớn nhất)
• not x (1-x)
- Điều kiện ở mệnh đề where sẽ trả về false nếu kiểm tra
thấy kết quả là unknown
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 43
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
1987987987
987987987
333445555
4
5987987987
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 44
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 45
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 46
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 47
Ví dụ 3
 Tìm họ tên của từng nhân viên và người quản lý
trực tiếp nhân viên đó
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 48
Ví dụ 4
 Tìm họ tên của những nhân viên được “Nguyen
Thanh Tung” quản lý trực tiếp
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 49
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 50
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
30987987987
987654321
987987987
10
20987654321
30987654321
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 51
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
- 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 (DML)
 Khung nhìn (View)
 Chỉ mục (Index)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 52
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 53
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 54
Ví dụ 5
 Cho biết các mã đề án có
- Được phân công cho nhân viên với họ là „Nguyen‟
hoặc,
- Trưởng phòng chủ trì đề án đó với họ là „Nguyen‟
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 55
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
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 56
Ví dụ 6’
 Tìm nhân viên cùng tên và cùng giới tính với các
thân nhân trong công ty
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 57
Ví dụ 7
 Tìm những nhân viên không có thân nhân nào
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 58
Truy vấn lồng
SELECT MANV, TENNV 
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
SELECT 
FROM 
WHERE (
SELECT 
FROM 
WHERE )
Câu truy vấn cha 
(Outer query)
Câu truy vấn con 
(Subquery)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 59
Truy vấn lồng (tt)
 Các câu lệnh SELECT có thể lồng nhau ở nhiều mức
 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
 Câu truy vấn con thường trả về một tập các giá trị
 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
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 60
Truy vấn lồng (tt)
 Có 2 loại truy vấn lồng
- Lồng phân cấp
• Mệnh đề WHERE của truy vấn  ... những phòng ban có lương trung bình cao
nhất.
 Tìm những nhân viên có lương cao nhất.
SELECT *
FROM NHANVIEN
WHERE LUONG >= ALL (
SELECT LUONG FROM NHANVIEN)
 Tìm những phòng ban có lương trung bình cao
nhất.
 B1: Tìm lương trung bình của từng phòng ban
SELECT PHG, AVG(LUONG)
FROM NHANVIEN
GROUP BY PHG
HAVING AVG(LUONG) >= ALL(
SELECT AVG(LUONG)
FROM NHANVIEN
GROUP BY PHG
)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 94
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 95
Ví dụ 19
 Tìm 3 nhân viên có lương cao nhất
SELECT TOP 3 *
FROM NHANVIEN
ORDER BY LUONG DESC
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 96
Thảo luận
 Tìm 3 nhân viên có lương cao nhất
- Nếu lương trùng nhau???
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 97
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 Chia.
- B1: Với mỗi nhân viên cho biết nhân viên làm bao nhiêu
đề án.
- B2: Đếm số lượng đề án của công ty
- B3: So sánh B1 và B2
SELECT MA_NVIEN, COUNT(*)
FROM PHANCONG
GROUP BY MA_NVIEN
HAVING COUNT(*) = (
SELECT COUNT(*)
FROM DEAN
)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 98
 Tìm nhân viên làm tất cả các đề án phòng 4
- Với mỗi nhân viên cho biết NV làm bao nhiêu đề án
phòng 4
- Đếm số lượng đề án của phòng 4
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 99
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 100
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
- 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 (DML)
 Khung nhìn (View)
 Chỉ mục (Index)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 101
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 102
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 103
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:
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 104
Đ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 
 Tìm tên nhân viên và tên phòng ban của nhân viên
SELECT *
FROM NHANVIEN nv, PHONGBAN pb
WHERE nv.PHG = pb.MAPHG
SELECT *
FROM NHANVIEN nv JOIN PHONGBAN pb ON
nv.PHG = pb.MAPHG
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 105
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 106
Ví dụ 20
 Tìm mã và tên các nhân viên làm việc tại phòng
„Nghien cuu‟
SELECT *
FROM NHANVIEN nv, PHONGBAN pb
WHERE nv.PHG = pb.MAPHG AND pb.TENPHONG =
'Nghien Cuu'
SELECT *
FROM NHANVIEN nv JOIN PHONGBAN pb ON
nv.PHG = pb.MAPHG
WHERE PB.tenphong = 'Nghien Cuu'
 Tìm tên nhân viên và tên thân nhân của họ nếu có.
SELECT nv.TENNV, tn.TENTN
FROM NHANVIEN nv, THANNHAN tn
WHERE tn.MANVIEN = nv.MANV
 Chỉ xuất ra những nhân viên có thân nhân
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 107
SELECT nv.TENNV, tn.TENTN
FROM NHANVIEN nv LEFT JOIN THANNHAN tn ON
tn.MANVIEN = nv.MANV
 NHững nhân viên mà không có thân nhân cũng
được xuất ra
SELECT nv.TENNV, tn.TENTN
FROM THANNHAN tn RIGHT JOIN NHANVIEN nv
ON tn.MANVIEN = nv.MANV
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 108
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 109
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
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 110
Ví dụ 21 (tt)
TENNV HONV TENPHG
Tung Nguyen Nghien cuu
Hang Bui null
Nhu Le null
Vinh Pham Quan ly
Mở rộng dữ liệu cho 
bảng NHANVIEN
PHONGBANNHANVIEN join
MANV=TRPHG
NHA VIEP O GBAN
TRPHG=MANV
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 111
Ví dụ 22
 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ó
NHANVIENPHANCONG join DEAN
MA_NVIEN=MANV
join
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 112
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
SELECT PHG, count(MANV)
FROM NHANVIEN
GROUP BY PHG
Với mỗi phòng, xuất ra số lượng nhân viên nam, số
lượng nhân viên nữ của phòng đó.
SELECT PHG, count( CASE WHEN PHAI='Nam'
THEN 0 WHEN PHAI = 'Nu' THEN NULL END ) as
SLNAM,
count( CASE WHEN PHAI='Nu' THEN 1 WHEN PHAI
= 'Nam' THEN NULL END ) as SLNU
FROM NHANVIEN
GROUP BY PHG
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 113
SELECT PHG, count( CASE PHAI WHEN 'Nam'
THEN 0 WHEN 'Nu' THEN NULL END ) as SLNAM,
count( CASE PHAI WHEN 'Nu' THEN 1 WHEN 'Nam'
THEN NULL END ) as SLNU
FROM NHANVIEN
GROUP BY PHG
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 114
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 115
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 MANV, TENNV, CASE PHAI WHEN 'NAM'
THEN 60 WHEN 'Nu' THEN 55 END
FROM NHANVIEN
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 116
Ví dụ 24
 Cho biết họ tên các nhân viên và năm về hưu
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 117
Kết luận
SELECT 
FROM 
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY ]
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 118
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
 Cập nhật dữ liệu (DML)
- 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 119
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 120
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 121
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 122
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 123
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 124
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 125
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 126
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 127
Ví dụ 25
 Xóa đi những nhân viên ở phòng „Nghien cuu‟
DELETE FROM NHANVIEN
WHERE MANV IN (
SELECT MANV
FROM NHANVIEN nv, PHONGBAN pb
WHERE nv.PHG = pb.MAPHG AND
pb.TENPHONG = 'Nghien Cuu'
)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 128
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 129
Lệnh DELETE (tt) 
TENNVHONV NGSINH DCHI PHAI LUONG PHG
TungNguyen 12/08/1955 638 NVC Q5 Nam 40000 5
HungNguyen 09/15/1962 Ba Ria VT Nam 38000 5
333445555
987987987
MANV MA_NQL
888665555
333445555
TENLOT
Thanh
Manh
HangBui 07/19/1968 33 NTH Q1 Nu 38000 4999887777 987654321Ngoc
NhuLe 07620/1951 219 TD Q3 Nu 43000 4987654321 888665555Quynh
VinhPham 11/10/1945 450 TV HN Nam 55000 1888665555 NULLVan
SODA THOIGIANMA_NVIEN
10 10.0333445555
20 20.0888665555
30 20.0987654321
1 20.0453453453
TamTran 07/31/1972 543 MTL Q1 Nu 25000 5453453453 333445555Thanh
QuangTran 04/08/1969 980 LHP Q5 Nam 25000 4987987987 987654321Hong
10 35.0987987987
30 5.0987987987
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 130
Lệnh DELETE (tt) 
TENNVHONV NGSINH DCHI PHAI LUONG PHG
TungNguyen 12/08/1955 638 NVC Q5 Nam 40000
HungNguyen 09/15/1962 Ba Ria VT Nam 38000
333445555
987987987
MANV MA_NQL
888665555
333445555
TENLOT
Thanh
Manh
HangBui 07/19/1968 33 NTH Q1 Nu 38000 4999887777 987654321Ngoc
NhuLe 07620/1951 219 TD Q3 Nu 43000 4987654321 888665555Quynh
VinhPham 11/10/1945 450 TV HN Nam 55000 1888665555 NULLVan
TamTran 07/31/1972 543 MTL Q1 Nu 25000
5
5
5453453453 333445555Thanh
QuangTran 04/08/1969 980 LHP Q5 Nam 25000 4987987987 987654321Hong
NULL
NULL
NULL
05/22/1988333445555Nghien cuu 5
NG_NHANCHUCMA_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 131
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 132
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 133
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
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 134
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 135
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
 Cập nhật dữ liệu (DML)
 Khung nhìn (View)
- Định nghĩa
- Truy vấn
- Cập nhật
 Chỉ mục (Index)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 136
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 137
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 138
Đị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 139
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 140
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 141
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 142
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 143
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 144
Nội dung chi tiết
 Giới thiệu
 Định nghĩa dữ liệu (DDL)
 Truy vấn dữ liệu (DML)
 Cập nhật dữ liệu (DML)
 Khung nhìn (View)
 Chỉ mục (Index)
Cơ sở dữ liệu - Khoa CNTT - ĐH KHTN TPHCM 145
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 146
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 147
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 148
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 149
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 150
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 – 2p2Chí 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 151

File đính kèm:

  • pdfbai_giang_mon_hoc_co_so_du_lieu_chuong_5_sql.pdf