Cơ sở dữ liệu - Chương 5: Ngôn ngữ SQL

−SQL: Structured Query Language.

−SQL là ngôn ngữchuẩncủa nhiều HQT CSDL, gồm

các câu lệnhđịnh nghĩadữliệu, truy vấnvàcập

nhậtdữliệu.

−SQL sơkhaiđượcgọi là SEQUEL (Structured

English Query Language), do IBM phát triển trong

hệthống System R, 1974-1976.

−Gồm các phiên bản:

ƒ Chuẩn SQL-86 (SQL1) do ANSI (American National

Standards Institute) và ISO (International Standards

Organization).

ƒ Chuẩn SQL-92 (SQL2).

ƒ Chuẩn SQL-99 (SQL3).

pdf29 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 3277 | Lượt tải: 1download
Tóm tắt nội dung Cơ sở dữ liệu - Chương 5: Ngôn ngữ SQL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
SELECT MADA
FROM PHANCONG
− Câu trên cho kết quả trùng. Để loại bỏ sự
trùng lắp dữ liệu, ta viết:
SELECT DISTINCT MADA
FROM PHANCONG
Tính toán trên thuộc tính
− Ví dụ: Cho danh sách gồm có 3 cột: mã nhân
viên, họ tên, lương nếu tăng 10% giá trị lương
hiện tại.
SELECT MANV, HONV + ‘ ’ + TENLOT + 
‘ ’ + TENNV, LUONG*1.1
FROM NHANVIEN
12
Bí danh
− Tương ứng với phép đổi tên thuộc tính trong 
ĐSQH.
− Kết quả ví dụ 4 cho ra các cột có tên khó
hiểu, do cách đặt tên tự động của HQT CSDL 
đối với các thuộc tính có tính toán trên đó.
− Ta viết như sau:
SELECT HONV, HONV + ‘ ’ + TENLOT + 
‘ ’ + TENNV AS HOTEN, LUONG*1.1 
AS LUONGMOI
FROM NHANVIEN
Tìm dữ liệu thỏa điều kiện
− Điều kiện được thành lập trên 1 thuộc tính. 
Có những kiểu điều kiện như sau:
1. So sánh: =, , , =.
2. Miền.
3. Tập hợp.
4. Tìm chuỗi thỏa mẫu cho trước.
5. Null.
ƒ Điều kiện phức được thành lập dựa trên
điều kiện đơn, bằng cách dùng các toán tử
logic: AND, OR, NOT.
13
So sánh
− Ví dụ: Cho danh sách các nhân viên có lương nhiều
hơn 2500000.
SELECT MANV, HONV, TENLOT, TENNV, LUONG
FROM NHANVIEN
WHERE LUONG > 2500000
− Ví dụ: Cho danh sách các đề án diễn ra ở HCM 
hoặc Đà Nẳng.
SELECT MADA, TENDA, DIADIEM_DA
FROM DEAN
WHERE DIADIEM_DA = ‘HCM’ OR DIADIEM = 
‘Đà Nẳng’
Điều kiện liên quan đến miền
− Ví dụ: Cho danh sách các nhân viên có lương
từ 3000000 đến 4000000.
SELECT MANV, HONV, TENLOT, TENNV, LUONG
FROM NHANVIEN
WHERE LUONG BETWEEN 300000 AND 4000000
14
Điều kiện liên quan đến tập hợp
− Ví dụ: Cho danh sách các đề án diễn ra ở
HCM hoặc Đà Nẳng.
SELECT MADA, TENDA, DIADIEM_DA
FROM DEAN
WHERE DIADIEM_DA IN (‘HCM’, ‘Đà
Nẳng’)
Tìm chuỗi
1. % : chuỗi bất kỳ, có thể rỗng.
2. _ : ký tự đơn bất kỳ.
3. DIACHI LIKE ‘H%’: địa chỉ bắt đầu bởi chữ
H.
4. DIACHI LIKE ‘H_ _ ’: địa chỉ có đúng 3 ký
tự, bắt đầu bởi H.
5. DIACHI LIKE ‘%e’: địa chỉ là chuỗi bất kỳ
kết thúc bởi ký tự e.
6. DIACHI NOT LIKE ‘H%’: địa chỉ không bắt
đầu bởi H.
15
− Ví dụ: Cho danh sách các nhân viên ở Tp. 
HCM.
SELECT MANV, HONV, TENLOT, TENNV, 
DIACHI
FROM NHANVIEN
WHERE DIACHI LIKE ‘%Tp. HCM%’
Điều kiện liên quan giá trị Null
− Ví dụ: Cho danh sách các nhân viên chưa
được bố trí phòng.
SELECT *
FROM NHANVIEN
WHERE PHG IS NULL
16
Sắp xếp dựa trên 1 cột
− Từ khóa theo sau thuộc tính dùng để sắp
xếp: ASC (sắp tăng, mặc định), DESC (sắp
giảm).
Ví dụ: Cho danh sách nhân viên sắp theo mã
phòng.
SELECT *
FROM NHANVIEN
ORDER BY PHG
Sắp xếp dựa trên nhiều cột
Ví dụ: Cho danh sách nhân viên sắp tăng dần
theo mã phòng, đối với từng phòng sắp theo
thứ tự lương giảm dần.
SELECT *
FROM NHANVIEN
ORDER BY PHG, LUONG DESC
17
Hàm tính toán
− Count:đếm số giá trị khác null của trường đối 
số.
− Sum: tính tổng các giá trị của trường đối số.
− Avg: tính giá trị trung bình của trường đối số.
− Min: trả về giá trị nhỏ nhất trên trường đối số.
− Max: trả về giá trị lớn nhất trên trường đối số.
− Đặc điểm:
ƒ Nhận đối số là 1 trường và trả về 1 giá trị.
ƒ Count, min, max áp dụng cho trường kiểu số lẫn 
kiểu không phải là số.
ƒ Sum, avg chỉ áp dụng trên trường kiểu số.
Hàm tính toán
− Các hàm tính toán chỉ thao tác trên các giá trị
khác null, trừ count (*).
− Count(*) đếm số dòng của 1 bảng, dù dòng 
đó có giá trị null hay giá trị trùng.
− DISTINCT dùng để loại bỏ sự trùng lặp trước 
khi vận dụng hàm, nhưng DISTINCT không 
có tác dụng đối với min, max.
18
Hàm tính toán
− Nếu câu SELECT có dùng hàm tính toán và
không có mệnh đề GROUP BY thì không 
được liệt kê ở mệnh đề SELECT các thuộc 
tính không phải là đối số của hàm tính toán 
đã dùng.
− Ví dụ: Câu sau đây SAI:
SELECT PHG, COUNT(LUONG)
FROM NHANVIEN
Count()
− Ví dụ: Cho biết có tất cả bao nhiêu nhân viên.
SELECT COUNT (*)
FROM NHANVIEN
− Ví dụ: Cho biết có bao nhiêu nhân viên có 
lương lớn hơn 3000000.
SELECT COUNT(*)
FROM NHANVIEN
WHERE LUONG > 3000000 
19
Count DISTINCT
− Có bao nhiêu đề án đã được phân công.
Câu SAI:
SELECT COUNT (MADA)
FROM PHANCONG
Câu đúng:
SELECT COUNT(DISTINCT MADA)
FROM PHANCONG
− Có bao nhiêu nhân viên thuộc phòng số 5 và tổng lương của 
họ.
SELECT COUNT (*), SUM(LUONG)
FROM NHANVIEN
WHERE PHG = 5
− Ví dụ: Tìm lương thấp nhất, cao nhất và 
lương trung bình của các nhân viên.
SELECT MIN (LUONG) AS THAPNHAT, MAX 
(LUONG) AS CAONHAT, AVG(LUONG) AS 
TRUNGBINH
FROM NHANVIEN
20
Group by
− GROUP BY được dùng để tạo ra các nhóm dữ liệu 
trước khi vận dụng hàm.
− Các thuộc tính sau mệnh đề GROUP BY gọi là
thuộc tính gom nhóm.
ƒ Hàm sẽ được thực hiện trên từng nhóm khi câu truy vấn 
có mệnh đề GROUP BY.
ƒ Mỗi thuộc tính liệt kê sau SELECT sẽ có 1 giá trị đối với 
từng nhóm.
ƒ Tất cả các thuộc tính sau SELECT phải xuất hiện ở mệnh 
đề GROUP BY (trừ thuộc tính mang giá trị là hàm).
ƒ Có thể có các thuộc tính xuất hiện ở mệnh đề GROUP 
BY nhưng không xuất hiện sau SELECT.
ƒ Hai dòng mang giá trị null trên thuộc tính gom nhóm sẽ 
được gom thành cùng một nhóm.
ƒ Thứ tự thực hiện: (1) điều kiện sau WHERE (2) GROUP 
BY (3) hàm tính toán trên nhóm (4) điều kiền sau 
HAVING.
Group by
− Ví dụ: Cho biết mỗi phòng ban có bao nhiêu nhân viên và
tổng lương của các nhân viên trong từng phòng.
SELECT PHG, COUNT(*), SUM (LUONG)AS TONG
FROM NHANVIEN
GROUP BY PHG
− Ví dụ: Cho biết lương trung bình của nhân viên nam và nhân 
viên nữ trong phòng số 5.
SELECT PHAI, AVG(LUONG)AS TRUNGBINH
FROM NHANVIEN
WHERE PHG = 5
GROUP BY PHAI
21
Having
− Ví dụ: Cho danh sách các phòng ban có 
lương trung bình của các nhân viên nam lớn 
hơn 4000000
SELECT PHG, AVG (LUONG)
FROM NHANVIEN
WHERE PHAI = ‘Nam’
GROUP BY PHG
HAVING AVG (LUONG) > 4000000
Câu truy vấn con
− Là câu truy vấn xuất hiện trong một câu truy 
vấn khác. Kết quả của câu truy vấn con sẽ 
được dùng cho mệnh đề SELECT khác.
− Một câu truy vấn con có thể được dùng trong 
các mệnh đề: WHERE, HAVING, INSERT, 
UPDATE, DELETE.
− Câu truy vấn con có thể trả về:
ƒ Một giá trị, tức một dòng một cột.
ƒ Nhiều dòng một cột.
ƒ Nhiều dòng nhiều cột.
22
Câu truy vấn con
− Ví dụ: Cho danh sách các nhân viên thuộc 
phòng ban tên là ‘Nghiên cứu’
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG =(SELECT MAPB
FROM PHONGBAN
WHERE TENPB = ‘Nghien 
cuu’)
Câu truy vấn con
− Có thể dùng câu truy vấn con sau một toán 
tử so sánh ở mệnh đề WHERE hoặc 
HAVING.
− Ví dụ: Cho danh sách các nhân viên có lương 
lớn hơn lương trung bình của toàn bộ nhân 
viên.
SELECT MANV,HONV,TENLOT,TENNV
FROM NHANVIEN
WHERE LUONG > (SELECT AVG(LUONG)
FROM NHANVIEN)
23
Câu truy vấn con - IN
− Ví dụ: Cho biết danh sách các nhân viên có 
tham gia đề án.
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE MANV IN (SELECT MANV
FROM PHANCONG)
ANY & ALL
− Nếu câu truy vấn con cho kết quả rỗng thì mệnh đề
ALL có giá trị TRUE còn mệnh đề ANY có giá trị
FALSE.
− Chuẩn ISO dùng SOME tương đương với ANY.
− Ví dụ: Cho biết nhân viên nào có lương lớn hơn ít 
nhất giá trị lương bất kỳ của một nhân viên thuộc 
phòng số 5.
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE LUONG > SOME (SELECT LUONG
FROM NHANVIEN
WHERE PHG = 5)
24
− Ví dụ: Cho biết nhân viên nào có lương lớn 
hơn tất cả giá trị lương của các nhân viên 
thuộc phòng số 5.
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE LUONG > ALL (SELECT LUONG
FROM NHANVIEN
WHERE PHG = 5)
Truy vấn từ nhiều bảng
− Ta có thể truy xuất dữ liệu từ nhiều bảng.
− Ví dụ: Cho danh sách các nhân viên thuộc 
phòng ban tên là ‘Nghiên cứu’.
SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN N, PHONGBAN P
WHERE N.PHG = P.MAPB AND TENPB = 
‘Nghien cuu’
25
Kết trái (Left join)
−Ví dụ: Cho biết tên các nhân viên và mã đề án 
mà nhân viên đó có tham gia, những ai không 
có tham gia đề án thì thông tin đề án là NULL.
SELECT MANV, TENNV, MADA
FROM NHANVIEN NV LEFT JOIN PHANCONG 
PC ON NV.MANV = PC.MANV
Tương tự có kết phải (Right join), và kết ngoài 
(full outer join). Kết quả của phép kết ngoài là
hội của kết quả phép kết trái và kết phải.
Exists, not exists
− Được dùng trong câu truy vấn con, EXISTS 
trả về TRUE nếu kết quả câu truy vấn con có
ít nhất 1 dòng. 
− Ví dụ: Cho danh sách các nhân viên có tham 
gia đề án.
SELECT *
FROM NHANVIEN NV
WHERE EXISTS (SELECT * FROM 
PHANCONG WHERE MANV = NV.MANV)
26
− Ví dụ: Cho danh sách các nhân viên không 
có tham gia đề án.
SELECT *
FROM NHANVIEN NV
WHERE NOT EXISTS (SELECT * FROM 
PHANCONG WHERE MANV = NV.MANV)
Hội
− Ví dụ: Cho danh sách các nhân viên có tham 
gia đề án tên ‘X’ hoặc ‘Y’.
SELECT MANV, TENNV
FROM NHANVIEN NV, PHANCONG PC, DEAN 
DA
WHERE NV.MANV = PC.MANV AND 
PC.MADA = DA.MADA AND (TENDA = ‘X’
OR TENDA = ‘Y’)
27
Giao
− Ví dụ: Cho danh sách các nhân viên vừa tham gia 
đề án tên ‘X’ vừa tham gia đề án tên ‘Y’.
SELECT MANV, TENNV
FROM NHANVIEN 
WHERE MANV IN (SELECT MANV FROM PHANCONG 
PC1, DEAN DA1 WHERE PC1.MADA = 
DA1.MADA AND TENDA = ‘X’)
AND MANV IN (SELECT MANV FROM PHANCONG 
PC2, DEAN DA2 WHERE PC2.MADA = 
DA2.MADA AND TENDA = ‘Y’)
Hiệu
− Ví dụ: Cho danh sách các nhân viên có tham gia đề
án tên ‘X’ nhưng không có tham gia đề án tên ‘Y’.
SELECT MANV, TENNV
FROM NHANVIEN 
WHERE MANV IN (SELECT MANV FROM PHANCONG 
PC1, DEAN DA1 WHERE PC1.MADA = 
DA1.MADA AND TENDA = ‘X’)
AND MANV NOT IN (SELECT MANV FROM 
PHANCONG PC2, DEAN DA2 WHERE PC2.MADA 
= DA2.MADA AND TENDA = ‘Y’)
28
Insert
− Ví dụ: Phân công nhân viên mã 001 làm đề
án mã là DAX trong thời gian 10 giờ.
Insert into PHANCONG values (‘001’, 
‘DAX’, 10)
− Ví dụ: Phân công nhân viên mã 001 làm tất 
cả các đề án do phòng số 5 chủ trì.
Insert into PHANCONG (SELECT 001, 
MADA, NULL FROM DEAN WHERE PHONG 
= 5)
Update
− Ví dụ: Cập nhật lương của các trưởng phòng 
tăng 10%.
UPDATE NHANVIEN
SET LUONG = LUONG*1.1
WHERE MANV IN (SELECT TRPHG FROM 
PHONGBAN)
29
Delete
− Ví dụ: Xóa các phân công liên quan đến 
nhân viên mã là ‘001’
DELETE PHANCONG WHERE MANV = ‘001’

File đính kèm:

  • pdfChuong_5_SQL.pdf
Tài liệu liên quan