2. Giới thiệu SQL
Là ngôn ngữ chuẩn để truy vấn và thao tác
trên CSDL quan hệ
Là ngôn ngữ phi thủ tục
Khởi nguồn của SQL là SEQUEL - Structured
English Query Language, năm 1974)
Các chuẩn SQL
SQL89
SQL92 (SQL2)
SQL99 (SQL3)
2
3. Nội dung chính
Ngôn ngữ định nghĩa dữ liệu: tạo bảng,
sửa cấu trúc bảng̣, xóa bảng
Ngôn ngữ thao tác dữ liệu: thêm, xóa, sửa
dữ liệu, và truy vấn dữ liệu.
Ngôn ngữ điều khiển dữ liệu: cấp quyền và
thu hồi quyền sử dụng trên cơ sở dữ liệu.
Tương quan giữa SQL và ngôn ngữ ĐSQH
3
4. Ngôn ngữ định nghĩa dữ liệu
Ngôn ngữ định nghĩa dữ liệu (DDL– Data
Definition Language)
Bao gồm:
Lệnh tạo bảng (CREATE...)
Lệnh sửa cấu trúc bảng (ALTER...)
Lệnh xóa bảng (DROP...)
4
6. Ngôn ngữ điều khiển dữ liệu
Ngôn ngữ điều khiển dữ liệu (DCL – Data
Control Language)
Bao gồm:
Lệnh cấp quyền cho người sử dụng cơ sở
dữ liệu (GRANT...)
Lệnh thu hồi quyền hạn của người sử dụng
cơ sở dữ liệu (REVOKE...)
6
7. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng (1)
Cú pháp
CREATE TABLE tên_bảng
(
tên_cột1 kiểu_dữ_liệu [not null],
tên_cột2 kiểu_dữ_liệu [not null],
…
tên_cộtn kiểu_dữ_liệu [not null],
khai báo khóa chính, khóa ngoại, ràng buộc
toàn vẹn
) 7
8. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng (2)
Các kiểu dữ liệu SQL Server Oracle
Chuỗi ký tự varchar(n), char(n), varchar2(n),
Text nchar(n),
nvarchar2(n)
Số tinyint,smallint,int number(n),
numeric, decimal, number(n,m)
float, real
Ngày tháng smalldatetime, date
datetime
8
9. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng (3)
Cho lược đồ CSDL “quản lý đề án cty” như sau
NHANVIEN (MaNV, HoNV, TenLot, TenNV, Phai,
Luong, Phong, NgaySinh, DiaChi, Ma_NQL)
PHONGBAN (MaPHG, TenPHG, TrPHG,
NG_NhanChuc)
DEAN (MaDA, TenDA, DDIEM_DA, Phong)
PHANCONG (MaNV, MaDA, ThoiGian)
DIADIEM_PHG (MaPHG, DIADIEM)
THANNHAN (MaNV, TenTN, Phai, NGSinh,QuanHe)
9
10. Ngôn ngữ định nghĩa dữ liệu
Tạo bảng (4)
Ví dụ: câu lệnh để tạo một bảng nhân viên
CREATE TABLE NHANVIEN
( MANV varchar(10) NOT NULL,
HONV varchar(50) NOT NULL, TENLOT varchar(50) NOT NULL,
TENNV varchar(50) NOT NULL, NGAYSINH datetime,
PHAI varchar(3) NOTNULL, DIACHI varchar(100),
MA_NQL varchar(10),
PHONG varchar(10),
LUONG numeric,
CONSTRAINT PK_NV PRIMARY KEY (MANV),
CONSTRAINT FK_NV_PB FOREIGN KEY (PHONG)
REFERENCES PHONGBAN (MAPHG) )
10
11. Ngôn ngữ định nghĩa dữ liệu
Sửa cấu trúc bảng (1)
Thêm thuộc tính
ALTER TABLE tên_bảng ADD tên_cột
kiểu_dữ_liệu
Ví dụ: thêm cột Ghi_chú vào bảng nhân viên
ALTER TABLE NHANVIEN ADD GHI_CHU
varchar(20)
Sửa kiểu dữ liệu thuộc tính
ALTER TABLE tênbảng ALTER COLUMN
tên_cột kiểu_dữ_liệu_mới
11
12. Ngôn ngữ định nghĩa dữ liệu
Sửa cấu trúc bảng ( 2)
Ví dụ: sửa kiểu dữ liệu của cột Ngày sinh
ALTER TABLE NHANVIEN ALTER COLUMN
NGAYSINH SMALLDATETIME
Xóa thuộc tính
ALTER TABLE tên_bảng DROP COLUMN
tên_cột
Ví dụ: xóa cột Ghi_chú từ bảng nhân viên
ALTER TABLE NHANVIEN DROP COLUMN
GHI_CHU
12
14. Ngôn ngữ định nghĩa dữ liệu
Sửa cấu trúc bảng ( 4)
Ví dụ
ALTER TABLE NHANVIEN ADD CONSTRAINT
PK_NV PRIMARY KEY (MANV)
ALTER TABLE NHANVIEN ADD CONSTRAINT
FK_NV_PB FOREIGN KEY (PHONG)
REFERENCES PHONGBAN(MAPHG)
ALTER TABLE NHANVIEN ADD CONSTRAINT
CHK CHECK ( PHAI IN (‘Nam') OR (‘Nu’))
ALTER TABLE NHANKHAU ADD
CONSTRAINT UQ_NK UNIQUE (CMND)
14
15. Ngôn ngữ định nghĩa dữ liệu
Sửa cấu trúc bảng ( 5)
Xóa ràng buộc toàn vẹn
ALTER TABLE tên_bảng DROP
CONSTRAINT tên_ràng_buộc
Ví dụ
ALTER TABLE NHANVIEN DROP
CONSTRAINT FK_NV_PB
15
16. Ngôn ngữ định nghĩa dữ liệu
Xóa bảng
Cú pháp
DROP TABLE tên_bảng
Ví dụ: xóa bảng (table) nhân viên
DROP TABLE NHANVIEN
Ví dụ: xóa bảng (table) phân công
DROP TABLE PHANCONG
16
17. Ngôn ngữ thao tác dữ liệu
Thêm dữ liệu vào bảng
Cú pháp
INSERT INTO tên_bảng VALUES (giá_trị_1,
giá_trị_2,…, giá_trị_n)
INSERT INTO tên_bảng (cột1, cột2) VALUES
(giá_trị_1, giá_trị_2)
Ví dụ
INSERT INTO NHANVIEN VALUES (‘001’,
‘Vuong’, ‘Ngoc’, ‘Quyen’, ’01/01/1977’, ‘Nu’,
’450 Trung Vuong, Ha Hoi’, ‘12345’, ‘QL’,
2000)
17
18. Ngôn ngữ thao tác dữ liệu
Sửa dữ liệu của bảng
Cú pháp
UPDATE tên_bảng SET cột_1 = giá_trị_1,
cột_2 = giá_trị_2 [WHERE điều_kiện]
Ví dụ: Sửa họ nhân viên có mã số ‘001’ thành
‘Nguyen’
UPDATE NHANVIEN SET HONV = ‘Nguyen’
WHERE MANV=‘001’
18
19. Ngôn ngữ thao tác dữ liệu
Sửa dữ liệu của bảng
Cú pháp
Ví dụ: Sửa họ tên của nhân viên có mã số
‘001’ thành ‘Nguyen Thanh Tung’ và ngày sinh
mới là 1/1/1978
UPDATE NHANVIEN SET HONV = ‘Nguyen’,
TENLOT = ‘Thanh’, TENNV = Tung’,
NGAYSINH=‘1/1/1978’
WHERE MANV=‘001’
19
20. Ngôn ngữ thao tác dữ liệu
Xóa dữ liệu trong bảng
Cú pháp
DELETE FROM tên_bảng [WHERE
điều_kiện]
Ví dụ: xóa nhân viên có mã số ‘001’
DELETE FROM NHANVIEN
WHERE MANV=‘001’
Ví dụ: xóa toàn bộ nhân viên
DELETE FROM NHANVIEN
20
21. Ngôn ngữ thao tác dữ liệu
Câu truy vấn SELECT
Câu truy vấn tổng quát
SELECT [DISTINCT] tên_cột | hàm
FROM bảng
[WHERE điều_kiện]
[GROUP BY cột]
[HAVING điều_kiện]
[ORDER BY cột ASC | DESC]
21
23. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (2)
Các toán tử so sánh khác
BETWEEN - định nghĩa một đoạn giá trị liên tục
IS NULL - kiểm tra giá trị thuộc tính có null hay không
LIKE – kiểm tra chuỗi ký tự tương tự
IN – kiểm tra giá trị thuộc tính có thuộc tập hợp các giá
trị đã định nghĩa hay không
EXISTS – mang giá trị TRUE nếu mệnh đề so sánh
trả về ít nhất một bộ (record), FALSE nếu ngược lại
23
24. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (3)
Toán tử BETWEEN
Ví dụ
SELECT * FROM NHANVIEN WHERE
year(NGAYSINH) BETWEEN 1965 AND 1977
SELECT n.MANV, n.TENNV, p.TENPHG
FROM NHANVIEN n, PHONGBAN p
WHERE n.PHONG=p.MAPHG
AND n.LUONG NOT BETWEEN 1000 AND
3000 24
25. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (4)
Toán tử IS NULL
Ví dụ
a. SELECT * FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
b. SELECT h.MAHV,h.HOTEN,h.DIACHI
FROM HOCVIEN h, BIENLAI b
WHERE h.MAHV=b.MAHV AND b.TIENNOP IS
NULL 25
26. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (5)
Toán tử LIKE
So sánh chuỗi tương đối
Cú pháp: s LIKE p, p có thể chứa % hoặc _
% : thay thế một chuỗi ký tự bất kỳ
_ : thay thế một ký tự bất kỳ
Ví dụ SELECT * FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen%’
26
27. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (6)
Toán tử IN
Ví dụ
a. SELECT * FROM NHANVIEN
WHERE PHONG IN (‘NC’,’QL’,’DH’)
b. SELECT MANV, TENNV, DIACHI
FROM NHANVIEN
WHERE MANV NOT IN (SELECT MANV
FROM 27
28. Ngôn ngữ thao tác dữ liệu
Toán tử truy vấn (7)
Toán tử EXISTS
Ví dụ
a. SELECT d.TENDA, p.TENPHG FROM PHONGBAN p,
DEAN d
WHERE p.MAPHG = d.PHONG
AND EXISTS (SELECT pc.MADA FROM PHANCONG
pc
WHERE d.MADA=pc.MADA)
b. SELECT * FROM NHANVIEN n WHERE NOT EXISTS
(SELECT * FROM DEAN d WHERE NOT EXISTS
(SELECT * FROM PHANCONG p WHERE
28
29. Ngôn ngữ thao tác dữ liệu
Mệnh đề GROUP BY (1)
Mệnh đề GROUP BY
Chia các dòng thành các nhóm dựa trên tập con của
các thuộc tính
Tất cả các thành viên của nhóm đều thỏa các thuộc
tính này.
Mỗi nhóm được mô tả bằng một dòng các thuộc tính,
được giới hạn bởi:
Các thuộc tính chung của tất cả thành viên thuộc
nhóm (được liệt kê trong mệnh đề GROUP BY).
Các phép toán trên nhóm. 29
30. Ngôn ngữ thao tác dữ liệu
Mệnh đề GROUP BY (2)
Chia các dòng thành các
a nhóm dựa trên tập con
a của các thuộc tính
b
b
c
nhóm
c
c
c
c
d
d
d
Các thuộc tính GROUP
30
BY
31. Ngôn ngữ thao tác dữ liệu
Mệnh đề GROUP BY (3)
Các hàm SQL cơ bản
COUNT: Đếm số bộ dữ liệu của thuộc tính
MIN: Tính giá trị nhỏ nhất
MAX: Tính giá trị lớn nhất
AVG: Tính giá trị trung bình
SUM: Tính tổng giá trị các bộ dữ liệu
31
32. Ngôn ngữ thao tác dữ liệu
Mệnh đề GROUP BY (4)
Ví dụ: tìm tổng lương, lương lớn nhất, lương ít nhất và
lương trung bình của các nhân viên
SELECT SUM(LUONG), MAX(LUONG),
MIN(LUONG), AVG(LUONG) FROM NHANVIEN ;
Ví dụ: tìm tổng lương, lương lớn nhất, lương ít nhất và
lương trung bình của các nhân viên phòng “Nghiên
cứu”
SELECT SUM(LUONG), MAX(LUONG),
MIN(LUONG), AVG(LUONG) from NHANVIEN ,
PHONGBAN WHERE MAPHG=PHONG AND
TENPHG='Nghien cuu';
Ví dụ: cho biết số lượng nhân viên
32
SELECT COUNT(*) FROM NHANVIEN;
33. Ngôn ngữ thao tác dữ liệu
Mệnh đề GROUP BY (5)
Ví dụ
SELECT n.MANV, n.TENNV, n.PHONG,
MIN(p.THOIGIAN) thap_nhat,
MAX (p.THOIGIAN) cao_nhat,
AVG(p.THOIGIAN) trung_binh,
SUM (p.THOIGIAN) tong_so_gio
FROM NHANVIEN n, PHANCONG p
WHERE n.MANV=p.MANV
GROUP BY n.MANV, n.HOTEN, n.PHONG
33
34. Ngôn ngữ thao tác dữ liệu
Mệnh đề HAVING
Mệnh đề HAVING
Lọc kết quả theo điều kiện, sau khi đã
gom nhóm
Điều kiện của HAVING là các thuộc
tính trong danh sách GROUP BY và
các phép tính toán khác.
34
35. Ngôn ngữ thao tác dữ liệu
Mệnh đề HAVING
Ví dụ: cho biết tên từng phòng ban và tổng số nhân
viên, mức lương trung bình của các phòng có mức
lương trung bình trên 2000
SELECT p.TENPHG, COUNT(*) so_luong_nv,
AVG(n.LUONG) luong_tb
FROM NHANVIEN n, PHONGBAN p
WHERE n.PHONG = p.MAPHG
GROUP BY p.TENPHB
HAVING AVG(n.LUONG) > 2000
35
36. Ngôn ngữ thao tác dữ liệu
Truy vấn con (Subquery)
Subquery
Các mệnh đề SELECT được lồng vào
nhau
Kết quả của câu SELECT này là điều kiện
của câu SELECT khác.
Các mệnh đề SELECT được nối với nhau
bằng các phép so sánh <,>,<>,=,>=,<=,
IN, EXISTS, ALL, ANY, SOME,…
36
37. Ngôn ngữ thao tác dữ liệu
Truy vấn con (Subquery)
Ví dụ
Liệt kê nhân viên có số giờ làm việc nhiều nhất
trong công ty.
SELECT n.MANV, n.TENNV, SUM (p.THOIGIAN)
FROM NHANVIEN n, PHANCONG p
WHERE n.MANV = p.MANV
GROUP BY n.MANV, n.HOTEN
HAVING SUM (p.THOIGIAN) >= ALL (SELECT
SUM(THOIGIAN) FROM PHANCONG GROUP BY
37
38. Tương quan giữa SQL và ĐSQH
• Phép chọn: σ<condition>(<relation>) tương ứng mệnh đề
WHERE trong SQL
• Phép chiếu: Π <attribute-list> (<relation>) tương ứng mệnh
đề SELECT trong SQL
• Các phép toán tập hợp: Hợp tương ứng mệnh đề UNION
trong SQL
• Tích Descartes (R × S: tên khác nhau ) tương ứng mệnh
đề FROM trong SQL
• Kết (theta): chỉ là các liên từ trong điều kiện
– Equi-join: Tất cả đều là phép so sánh bằng
– Natural Join: Kết trên các thuộc tính có cùng tên
– Outer Join: 1) kết o fr and s, 2) r, not s, 3) s, not r
38
39. Tương quan giữa SQL và
ĐSQH
• Phép chia: R/S, tìm các thể hiện trong R
thỏa tất cả các bộ trong S
Ví dụ: SELECT C.TENNV
FROM NHANVIEN C
WHERE C.MANV = ‘001’
Cách tiếp cận:
–Mệnh đề FROM tạo tích Descartes của
các bảng được liệt kê.
39
40. Tương quan giữa SQL và ĐSQH
– Mệnh đề WHERE gán các dòng vào trong C
theo trình tự và tạo bảng chỉ chứa các dòng
thỏa điều kiện.
– Mệnh đề SELECT chỉ lưu lại các cột được
liệt kê
– Tương đương với: πTenNVσMaNV=‘001’(NhanVien)
40