Giới thiệu về SQL (Structured Query Language)
 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 trước 20 trang tài liệu Giới thiệu về SQL (Structured Query Language), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
SQL 
(Structured Query Language) 
Nội dung 
 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) 
Nội dung 
 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) 
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 
4 
Giới thiệu (tt) 
SQL gồm 
 Định nghĩa dữ liệu (DDL) 
 Thao tác dữ liệu (DML) 
 Ngôn ngữ thao tác dữ liệu nhúng 
 Đị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 
5 
SQL dùng thuật ngữ 
 Bảng ~ quan hệ 
 Cột ~ thuộc tính 
 Dòng ~ bộ 
Nội dung 
 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) 
Định nghĩa dữ liệu DDL 
 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 
 … 
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) 
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ờ 
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 
10 
CREATE TABLE ( 
 [], 
 [], 
 … 
 [] 
) 
Ví dụ - Tạo bảng 
11 
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 
) 
Lệnh tạo bảng (tt) 
 
 NOT NULL 
 NULL 
 UNIQUE 
 DEFAULT 
 PRIMARY KEY 
 FOREIGN KEY / REFERENCES 
 CHECK 
 Đặt tên cho RBTV 
 12 
CONSTRAINT 
Ví dụ - RBTV 
13 
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 
) 
Ví dụ - RBTV 
14 
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) 
) 
Ví dụ - Đặt tên cho RBTV 
15 
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 
) 
Ví dụ - Đặt tên cho RBTV 
16 
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) 
) 
Lệnh sửa cấu trúc 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 
17 
ALTER TABLE ADD COLUMN 
 [] 
ALTER TABLE DROP COLUMN 
ALTER TABLE ALTER COLUMN 
Lệnh sửa bảng (tt) 
 Thêm RBTV 
 Xóa RBTV 
18 
ALTER TABLE ADD 
 CONSTRAINT , 
 CONSTRAINT , 
 … 
ALTER TABLE DROP 
Ví dụ - Thay đổi cấu trúc bảng 
19 
ALTER TABLE NHANVIEN ADD 
 NGHENGHIEP CHAR(20) 
ALTER TABLE NHANVIEN DROP COLUMN 
 NGHENGHIEP 
ALTER TABLE NHANVIEN ALTER COLUMN 
 NGHENGHIEP CHAR(50) 
Ví dụ - Thay đổi RBTV 
20 
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) 
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ụ 
21 
DROP TABLE 
DROP TABLE NHANVIEN 
DROP TABLE PHONGBAN 
DROP TABLE PHANCONG 
Lệnh xóa bảng (tt) 
22 
NHANVIEN 
TENNV HONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG 
PHONGBAN 
TRPHG TENPHG MAPHG NG_NHANCHUC 
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ụ 
23 
CREATE DOMAIN AS 
CREATE DOMAIN Kieu_Ten AS VARCHAR(30) 
Nội dung 
 Giới thiệu 
 Định nghĩa dữ liệu 
 Truy vấn dữ liệu 
 mệnh đề SELECT 
 mệnh đề WHERE 
 mệnh đề FROM 
 mệnh đề ORDER BY 
 truy vấn con 
 mệnh đề GROUP BY 
 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) 
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 
 Bảng là bag  quan hệ là set 
25 
Phép toán ĐSQH Một số bổ sung  
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 
26 
SELECT 
FROM 
WHERE 
Truy vấn cơ bản (tt) 
 SQL và ĐSQH 
27 
SELECT 
FROM 
WHERE  
 
 
SELECT L 
FROM R 
WHERE C 
L (C (R)) 
Ví dụ 
28 
SELECT * 
FROM NHANVIEN 
WHERE PHG=5 
Lấy tất cả các cột của quan hệ kết quả 
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 
Tìm đọc 1 tập hợp các dòng dữ liệu 
Mệnh đề SELECT 
29 
SELECT MANV, HONV, TENLOT, TENNV 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
TENNV HONV 
Tung Nguyen 
Hung Nguyen 
TENLOT 
Thanh 
Manh 
333445555 
987987987 
MANV 
Mệnh đề SELECT (tt) 
30 
SELECT MANV, HONV AS HO, TENLOT AS ‘TEN LOT’, TENNV AS TEN 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
TEN HO 
Tung Nguyen 
Hung Nguyen 
TEN LOT 
Thanh 
Manh 
333445555 
987987987 
MANV 
Tên bí danh 
Mệnh đề SELECT (tt) 
31 
SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS ‘HO TEN’ 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
HO TEN 
Nguyen Thanh Tung 
Nguyen Manh Hung 
333445555 
987987987 
MANV 
Mở rộng 
Mệnh đề SELECT (tt) 
32 
SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
LUONG10% 
33000 
27500 
333445555 
987987987 
MANV 
Mở rộng 
Mệnh đề SELECT (tt) 
33 
SELECT LUONG 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
Loại bỏ các dòng trùng nhau LUONG 
30000 
25000 
25000 
38000 
LUONG 
30000 
25000 
38000 
SELECT DISTINCT LUONG 
FROM NHANVIEN 
WHERE PHG=5 AND PHAI=‘Nam’ 
Mệnh đề WHERE 
34 
SELECT MANV, TENNV 
FROM NHANVIEN, PHONGBAN 
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG 
Biểu thức luận lý 
TRUE TRUE 
Mệnh đề WHERE (tt) 
35 
SELECT MANV, TENNV 
FROM NHANVIEN, PHONGBAN 
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND 
PHG=MAPHG 
Độ ưu tiên 
Mệnh đề WHERE (tt) 
36 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE LUONG>20000 AND LUONG<30000 
BETWEEN 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE LUONG BETWEEN 20000 AND 30000 
Mệnh đề WHERE (tt) 
37 
NOT BETWEEN 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE LUONG NOT BETWEEN 20000 AND 30000 
Mệnh đề WHERE (tt) 
38 
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ỳ 
Mệnh đề WHERE (tt) 
39 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE HONV LIKE ‘Nguyen’ 
NOT LIKE 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE HONV NOT NOT LIKE ‘Nguyen’ 
Mệnh đề WHERE (tt) 
40 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’ 
ESCAPE 
‘Nguyen_’ 
Mệnh đề WHERE (tt) 
41 
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’ 
Mệnh đề WHERE (tt) 
 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 
42 
NULL 
Mệnh đề WHERE (tt) 
43 
NULL 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE MA_NQL IS NULL 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE MA_NQL IS NOT NULL 
Mệnh đề FROM 
44 
WHERE TRUE 
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 
… … 
Mệnh đề FROM (tt) 
45 
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 TN, T .NGSINH 
 NV, THANNHAN TN 
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 
46 
SELECT 
FROM 
WHERE 
ORDER BY 
Mệnh đề ORDER BY (tt) 
 Ví dụ 
47 
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 
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 
48 
Phép toán tập hợp trong SQL (tt) 
 Cú pháp 
49 
SELECT FROM WHERE 
UNION [ALL] 
SELECT FROM WHERE 
SELECT FROM WHERE 
INTERSECT [ALL] 
SELECT FROM WHERE 
SELECT FROM WHERE 
EXCEPT [ALL] 
SELECT FROM WHERE 
Truy vấn con (Sub query) 
 Truy vấn con là 1 lệnh Select xuất hiện trong 1 
lệnh Select khác hoặc trong câu lệnh Update, 
Delete và trả về kết quả trung gian. 
 Truy vấn con được đặt trong hai dấu ( ) 
 Thường xuất hiện trong các mệnh đề Where, 
Having và From của 1 lệnh Select kh 
50 
Truy vấn con (Sub query) 
51 
SELECT 
FROM 
WHERE ( 
 SELECT 
 FROM 
 WHERE ) 
Câu truy vấn cha 
(Outer query) 
Câu truy vấn con 
(Subquery) 
Truy vấn lồng nhau (Nested 
Subquery) 
SELECT … 
FROM T 
WHERE … ( SELECT … 
 FROM … 
 WHERE điều kiện hàng không có mặt T ) 
52 
 Truy vấn con thực hiện trước 1 lần duy nhất. 
 Kết quả truy vấn con được dùng cho truy vấn 
ngoài. 
Truy vấn con tương quan 
(Correlated SubQuery) 
 Với mỗi hàng của truy vấn ngoài, dữ liệu này 
dùng để thực thi truy vấn con. 
 Kết quả truy vấn con lại trở thành dữ liệu cho 
truy vấn ngoài 
SELECT … 
FROM T 
WHERE … ( SELECT … 
 FROM ... 
 WHERE điều kiện hàng có mặt T ) 
Truy vấn lồng (tt) 
 Các câu lệnh SELECT có thể lồng nhau ở nhiều mức 
 Câu truy vấn con thường trả về một tập các giá trị 
 Các câu truy vấn con trong cùng một mệnh đề WHERE 
được kết hợp bằng phép nối logic 
 Mệnh đề WHERE của câu truy vấn cha 
 
 So sánh tập hợp thường đi cùng với một số toán tử 
• IN, NOT IN 
• ALL 
• ANY hoặc SOME 
 Kiểm tra sự tồn tại 
• EXISTS 
• NOT EXISTS 
54 
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 con không tham chiếu đến 
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn 
cha 
• Khi thực hiện, câu truy vấn con sẽ được thực hiện trước 
 Lồng tương quan 
• Mệnh đề WHERE của truy vấn con tham chiếu ít nhất một 
thuộc tính của các quan hệ trong mệnh đề FROM ở truy vấn 
cha 
• Khi thực hiện, câu truy vấn con sẽ được thực hiện nhiều lần, 
mỗi lần tương ứng với một bộ của truy vấn cha 
55 
Truy vấn con (tt) 
Các truy vấn con có thể : 
 Trả về một hàng hay nhiều hàng. 
 Trả về một cột hay nhiều cột. 
 Sử dụng Group by hoặc hàm nhóm. 
 Sử dụng các phép toán tập hợp. 
56 
Ví dụ - Lồng phân cấp 
57 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE PHG IN ( 
 SELECT MAPHG 
 FROM DIADIEM_PHG 
 WHERE DIADIEM=‘TP HCM’ ) 
SELECT MANV, TENNV 
FROM NHANVIEN, DIADIEM_PHG 
WHERE DIADIEM=‘TP HCM’ AND PHG=MAPHG 
Ví dụ - Lồng tương quan 
58 
SELECT MANV, TENNV 
FROM NHANVIEN, PHONGBAN 
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG 
SELECT MANV, TENNV 
FROM NHANVIEN 
WHERE EXISTS ( 
 SELECT * 
 FROM PHONGBAN 
 WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG ) 
Nhận xét IN và EXISTS 
 IN 
 IN 
 Thuộc tính ở mệnh đề SELECT của truy vấn con phải 
có cùng kiểu dữ liệu với thuộc tính ở mệnh đề WHERE 
của truy vấn cha 
 EXISTS 
 Không cần có thuộc tính, hằng số hay biểu thức nào 
khác đứng trước 
 Không nhất thiết liệt kê tên thuộc tính ở mệnh đề 
SELECT của truy vấn con 
 Những câu truy vấn có = ANY hay IN đều có thể 
chuyển thành câu truy vấn có EXISTS 
60 
Phép chia trong SQL 
 RS là tập các giá trị ai trong R sao cho không 
có giá trị bi nào trong S làm cho bộ (ai, bi) 
không tồn tại trong R 
61 
A B 
 
 
a 
a 
 a 
 a 
 a 
 a 
 a 
 a 
C D 
 
 
a 
b 
 a 
 a 
 b 
 a 
 b 
 b 
E 
1 
3 
1 
1 
1 
1 
1 
1 
R D E 
a 
S 
b 
1 
1 
A B C 
 a  
 a  
RS 
ai bi 
Phép chia trong SQL (tt) 
 Sử dụng NOT EXISTS để biểu diễn 
62 
SELECT R1.A, R1.B, R1.C 
FROM R R1 
WHERE NOT EXISTS ( 
 SELECT * 
 FROM S 
 WHERE NOT EXISTS ( 
 SELECT * 
 FROM R R2 
 WHERE R2.D=S.D AND R2.E=S.E 
 AND R1.A=R2.A AND R1.B=R2.B AND R1.C=R2.C )) 
Ví dụ 11 
 Tìm tên các nhân viên được phân công làm tất 
cả các đồ án 
 Tìm tên các nhân viên mà không có đề án nào là 
không được phân công làm 
 Tập bị chia: PHANCONG(MA_NVIEN, SODA) 
 Tập chia: DEAN(MADA) 
 Tập kết quả: KQ(MA_NVIEN) 
 Kết KQ với NHANVIEN để lấy ra TENNV 
63 
Hàm kết hợp 
 COUNT 
 COUNT(*) đếm số dòng 
 COUNT() đếm số giá trị khác NULL của 
thuộc tính 
 COUNT(DISTINCT ) đếm số giá trị khác 
nhau và khác NULL của thuộc tính 
 MIN 
 MAX 
 SUM 
 AVG 
 Các hàm kết hợp được đặt ở mệnh đề SELECT 
64 
Ví dụ 14 
 Cho biết số lượng nhân viên của từng phòng 
ban 
65 
SL_NV 
5 
4 
3 
3 
PHG 
1 1 
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 
Tam Tran 07/31/1972 543 MTL Q1 Nu 25000 5 
Hang Bui 07/19/1968 33 NTH Q1 Nu 38000 4 
453453453 
999887777 
333445555 
987654321 
Thanh 
Ngoc 
Nhu Le 07620/1951 219 TD Q3 Nu 43000 4 987654321 888665555 Quynh 
Quang Tran 04/08/1969 980 LHP Q5 Nam 25000 4 
Vinh Pham 11/10/1945 450 TV HN Nam 55000 1 
987987987 
888665555 
987654321 
NULL 
Hong 
Van 
Gom nhóm 
 Cú pháp 
 Sau khi gom nhóm 
 Mỗi nhóm các bộ sẽ có cùng giá trị tại các thuộc 
tính gom nhóm 
66 
SELECT 
FROM 
WHERE 
GROUP BY 
Ví dụ 15 
 Với mỗi nhân viên cho biết mã số, họ tên, số 
lượng đề án và tổng thời gian mà họ tham gia 
67 
SODA THOIGIAN 
1 32.5 
2 7.5 
123456789 
123456789 
MA_NVIEN 
2 10.0 
3 10.0 
333445555 
333445555 
10 10.0 333445555 
20 20.0 
10 35.0 
888665555 
987987987 
30 5.0 987987987 
30 20.0 987654321 
20 15.0 987654321 
1 20.0 453453453 
2 20.0 453453453 
Ví dụ 16 
 Cho biết những nhân viên tham gia từ 2 đề án 
trở lên 
68 
SODA THOIGIAN 
1 32.5 
2 7.5 
123456789 
123456789 
MA_NVIEN 
2 10.0 
3 10.0 
333445555 
333445555 
10 10.0 333445555 
20 20.0 
10 35.0 
888665555 
987987987 
30 5.0 987987987 
30 20.0 987654321 
20 15.0 987654321 
1 20.0 453453453 
2 20.0 453453453 
bị loại ra 
Điều kiện trên nhóm 
 Cú pháp 
69 
SELECT 
FROM 
WHERE 
GROUP BY 
HAVING 
Chú ý : Nếu 1 câu Select có đầy đủ các thành phần trên thì phải theo 
thứ tự này  nếu không câu truy vấn sẽ báo lỗi. 
Nhận xét 
 Mệnh đề GROUP BY 
 Các thuộc tính trong mệnh đề SELECT (trừ những 
thuộc tính trong các hàm kết hợp) phải xuất hiện 
trong mệnh đề GROUP BY 
 Mệnh đề HAVING 
 Sử dụng các hàm kết hợp trong mệnh đề SELECT để 
kiểm tra một số điều kiện nào đó 
 Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện 
lọc trên từng bộ 
 Sau khi gom nhóm điều kiện trên nhóm mới được 
thực hiện 
70 
Nhận xét (tt) 
 Thứ tự thực hiện câu truy vấn có mệnh đề 
GROUP BY và HAVING 
 (1) Chọn ra những dòng thỏa điều kiện trong mệnh đề 
WHERE 
 (2) Những dòng này sẽ được gom thành nhiều nhóm 
tương ứng với mệnh đề GROUP BY 
 (3) Áp dụng các hàm kết hợp cho mỗi nhóm 
 (4) Bỏ qua những nhóm không thỏa điều kiện trong 
mệnh đề HAVING 
 (5) Rút trích các giá trị của các cột và hàm kết hợp 
trong mệnh đề SELECT 
71 
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 
72 
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 
73 
SELECT 
FROM R1, R2, () AS tên_bảng 
WHERE 
Điều kiện kết ở mệnh đề FROM 
 Kết bằng 
 Kết ngoài 
74 
SELECT 
FROM R1 [INNER] JOIN R2 ON 
WHERE 
SELECT 
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON 
WHERE 
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 
75 
CASE 
 WHEN THEN 
 WHEN THEN 
 … 
 [ELSE ] 
END 
Kết luận 
76 
SELECT 
FROM 
[WHERE ] 
[GROUP BY ] 
[HAVING ] 
[ORDER BY ] 
Nội dung 
 Giới thiệu 
 Định nghĩa dữ liệu 
 Truy vấn dữ liệu 
 Cập nhật dữ liệu 
 insert 
 delete 
 update 
 Khung nhìn (view) 
 Chỉ mục (index) 
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 
78 
Lệnh INSERT (tt) 
 Cú pháp (thêm 1 dòng) 
79 
INSERT INTO () 
VALUES () 
Ví dụ 
80 
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) 
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ị 
81 
Lệnh INSERT (tt) 
 Cú pháp (thêm nhiều dòng) 
82 
I
            
        
        
    
                    