Professional Documents
Culture Documents
Buoi6 7 8 9 - SQL - SV
Buoi6 7 8 9 - SQL - SV
1. Giới thiệu
2. Các ngôn ngữ giao tiếp
3. Ngôn ngữ định nghĩa dữ liệu
4. Ngôn ngữ thao tác dữ liệu
5. Ngôn ngữ truy vấn dữ liệu có cấu trúc
6. Ngôn ngữ điều khiển dữ liệu
Cú pháp
DROP TABLE tên_bảng
Ví dụ: xóa bảng KHACHHANG.
DROP TABLE KHACHHANG
Lưu ý: khi muốn xóa một bảng phải xóa tất
cả những khóa ngoại tham chiếu tới bảng đó
trước.
Cú pháp
DELETE FROM tên_bảng [WHERE điều_kiện]
Ví dụ:
◼ Xóa toàn bộ nhân viên
DELETE FROM NHANVIEN
◼ Xóa những sản phẩm do Trung Quốc sản xuất có giá thấp
hơn 10000
DELETE FROM SANPHAM
WHERE (Gia <10000) and (Nuocsx=‘Trung Quoc’)
NHANVIEN
SELECT
◼ Tương đương phép chiếu của ĐSQH
◼ Liệt kê các thuộc tính cần hiển thị trong kết quả
WHERE
◼ Tương ứng với điều kiện chọn trong ĐSQH
◼ Điều kiện liên quan tới thuộc tính, sử dụng các phép nối
luận lý AND, OR, NOT, các phép toán so sánh,
BETWEEN
FROM
◼ Liệt kê các quan hệ cần thiết, các phép kết
Khoa HTTT - Đại học CNTT 31
5.3 Truy vấn đơn giản(2)
Sử dụng between
SANPHAM
masp tensp dvt nuocsx gia
BB03 But bi hop Thai Lan 100000
BC01 But chi cay Singapore 3000
BC02 But chi cay Singapore 2500
ST04 So tay quyen Thai Lan 55000
ST05 So tay mong quyen Thai Lan 20000
Toán tử LIKE
Hiển thị sản phẩm có masp bắt đầu là B, kết thúc là 1
SANPHAM
masp tensp dvt nuocsx gia
BB21 But bi hop Thai Lan 100000
BC01 But chi cay Singapore 3000
BC02 But chi cay Singapore 2500
ST04 So tay quyen Thai Lan 55000
ST01 So tay mong quyen Thai Lan 20000
Select masp, tensp
masp tensp
From SANPHAM BB21 But bi
Where masp like 'B%1' BC01 But chi
Toán tử LIKE
Tìm sản phẩm (masp, tensp) mà mã sản phẩm chứa ký tự thứ 2 là C
SANPHAM
masp tensp dvt nuocsx gia
BB21 But bi hop Thai Lan 100000
BC01 But chi cay Singapore 3000
CS02 Cuốn sách quyen Singapore 2500
ST04 So tay quyen Thai Lan 55000
ST01 So tay mong quyen Thai Lan 20000
NHANVIEN
manv hoten dthoai manv ho va ten
NV01 Nguyen Nhu Nhut 0927345678 NV01 Nguyen Nhu Nhut
NV02 Le Thi Phi Yen 0987567390 NV02 Le Thi Phi Yen
NV03 Nguyen Van B 0997047382 NV03 Nguyen Van B
NV04 Ngo Thanh Tuan 0913758498 NV04 Ngo Thanh Tuan
NV05 Nguyen Thi Truc Thanh 0918590387 NV05 Nguyen Thi Truc Thanh
SANPHAM
masp tensp dvt nuocsx gia
BB03 But bi hop Thai Lan 100000 nuocsx gia ban
BC01 But chi cay Singapore 3000 Singapore 3300
BC02 But chi cay Singapore 5000 Singapore 5500
ST04 So tay quyen Thai Lan 55000
ST05 So tay mong quyen Thai Lan 20000
NHANVIEN
MANV HOTEN LUONG
NHANVIEN
NV01 Nguyen Nhu Nhut 2.800.000 MANV HOTEN LUONG
NV02 Le Thi Phi Yen 2.000.000 NV01 Nguyen Nhu Nhut 2.800.000
NV03 Nguyen Van B 2.500.000 NV03 Nguyen Van B 2.500.000
NV04 Ngo Thanh Tuan 1.800.000 NV05 Nguyen Thi Truc Thanh 2.500.000
NV05 Nguyen Thi Truc Thanh 2.500.000
NHANVIEN
MANV HOTEN LUONG
NV01 Nguyen Nhu Nhut 2.800.000 LUONG
KETQUATHI
Cách khác:
Mahv Mamh Diem
SELECT hv.mahv, hoten, mamh, diem
HV01 CSDL 7.0
FROM hocvien hv, ketquathi kq
HV02 CSDL 8.5
WHERE hv.mahv=kq.mahv
HV01 CTRR 8.5
AND hv.mahv = ‘HV01’
HV03 CTRR 9.0
KETQUATHI
Cách khác:
Mahv Mamh Diem
SELECT hv.mahv, hoten -- Hoặc hv.*
HV01 CSDL 7.0
FROM hocvien hv, ketquathi kq
HV02 CSDL 8.5
WHERE hv.mahv=kq.mahv
HV01 CTRR 8.5
AND kq.mamh=‘CSDL’ AND diem<8
HV03 CTRR 9.0
PHONGBAN
Thực hiện những truy vấn sau bằng ngôn ngữ SQL:
1. Nhân viên nào (manv, hoten) có lương lớn hơn 2.500.000
2. Nhân viên nào không có người quản lý.
3. Hiển thị thông tin nhân viên (manv, hoten) và thông tin phòng ban
(tenph) mà nhân viên này làm việc.
4. Nhân viên nào (MANV, HOTEN) làm việc ở phòng tên là ‘nghien
cuu’.
5. Phòng nào (phong, tenph) có nhân viên nữ đạt được mức lương lớn hơn
2.500.000
6. Hiển thị thông tin phòng ban (phong, tenph) và tên trưởng phòng của
phòng ban này.
7. Hiển thị thông tin nhân viên (manv, hoten, luong) và tên người quản lý
của nhân viên này.
Khoa HTTT - Đại học CNTT 54
KHACHHANG (MAKH, HOTEN, NGSINH, DOANHSO)
SANPHAM (MASP,TENSP, NUOCSX)
HOADON (SOHD, NGHD, MAKH, TRIGIA)
CTHD (SOHD,MASP,SL). (số lượng (sl) luôn lớn hơn 0)
Cú pháp:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE [condition]
Ví dụ:
Sinhvien (masv, hoten, diachi, ngsinh, gioitinh)
Lấy ngẫu nhiên 4 sinh viên nữ trong bảng sinh viên
SELECT TOP 4 *
FROM SINHVIEN
WHERE GIOITINH=‘NU’
Viết câu truy vấn hiển thị đúng 3 dòng có điểm cao nhất
SELECT TOP 3 *
FROM DANGKY
ORDER BY Diem DESC
Viết câu truy vấn hiển thị duy nhất một dòng dữ liệu có điểm cao nhất
SELECT TOP 1 *
FROM DANGKY
ORDER BY Diem DESC
Sử dụng TOP WITH TIES để lấy thêm những dòng (row) mà trùng với
giá trị của dòng cuối cùng
SELECT TOP 3 WITH TIES *
FROM DANGKY
ORDER BY Diem DESC
MASV MAMH DIEM MASV MAMH DIEM
SV01 CSDL 9 SV01 CSDL 9
SV01 CTRR 9 SV01 CTRR 9 TOP 3
SV02 CSDL 8 SV02 CSDL 8
SV03 THDC 8 SV03 THDC 8
WITH TIES
SV03 CSDL 8 SV03 CSDL 8
SV04 CSDL 5
SV05 CTRR 3 Khoa HTTT - Đại học CNTT 76
Mệnh đề TOP trong SQL
Viết câu truy vấn hiển thị những mã sinh viên có điểm cao nhất
SELECT TOP 1 WITH TIES Masv
FROM DANGKY
ORDER BY Diem DESC
Cú pháp: OrderDetails
CASE OrderID ProductID Quantity
WHEN condition1 THEN result1
WHEN condition2 THEN result2 10248 11 12
WHEN conditionN THEN resultN 10248 42 10
ELSE result
END 10248 72 30
Ví dụ: 10249 14 9
SELECT OrderID, Quantity,
10249 51 40
CASE
WHEN Quantity > 30 THEN 'The quantity is greater than 30'
WHEN Quantity = 30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails
Khoa HTTT - Đại học CNTT 78
SQL CASE
OrderDetails
OrderID ProductID Quantity
10248 11 12
10248 42 10
10248 72 30
10249 14 9
10249 51 40
Cú pháp:
RANK() OVER ( [PARTITION BY expression, ]
ORDER BY expression (ASC | DESC) )
Trả về thứ hạng của mỗi hàng trong phân
vùng của tập hợp kết quả.
Cú pháp:
DENSE_RANK() OVER ( [PARTITION BY expression, ]
ORDER BY expression (ASC | DESC) )
Hàm này trả về thứ hạng của mỗi hàng trong
phân vùng tập hợp kết quả, không có khoảng
trống trong các giá trị xếp hạng.
NHANVIEN
MANV HOTEN PHAI MANQL PHONG LUONG
NV001 Nguyễn Ngọc Linh Nữ Null NC 2.800.000
NV002 Đinh Bá Tiến Nam NV002 DH 2.000.000
NV003 Nguyễn Văn Mạnh Nam NV001 NC 2.300.000
NV004 Trần Thanh Long Nam NV002 DH 1.800.000
NV005 Nguyễn Thị Hồng Vân Nữ NV001 NC 2.500.000
NV006 Nguyễn Minh Nam NV002 DH 2.000.000
NV007 Hà Duy Lập Nam NV003 NC 1.800.000
NV008 Trần Kim Duyên Nữ NV003 NC 1.800.000
NV009 Nguyễn Kim Anh Nữ NV003 NC 2.000.000
Khoa HTTT - Đại học CNTT 85
NHANVIEN (manv, hoten, phai, manql, phong, luong)
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
EXISTS (SELECT * KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
FROM hoadon hd KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
WHERE hd.makh =‘KH01’) KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
true SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
MAKH HOTEN 1009 28/10/2006 KH05 200,000
KH01 Nguyen Van A
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
EXISTS (SELECT * KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
FROM hoadon hd KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
WHERE hd.makh =‘KH02’) KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
true SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
MAKH HOTEN 1009 28/10/2006 KH05 200,000
KH01 Nguyen Van A
KH02 Tran Ngoc Han
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
EXISTS (SELECT * KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
FROM hoadon hd KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
WHERE hd.makh =‘ KH03’) KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
false SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
MAKH HOTEN 1009 28/10/2006 KH05 200,000
KH01 Nguyen Van A
KH02 Tran Ngoc Han
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
EXISTS (SELECT * KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
FROM hoadon hd KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
WHERE hd.makh =‘‘KH04’) KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
false SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
MAKH HOTEN 1009 28/10/2006 KH05 200,000
KH01 Nguyen Van A
KH02 Tran Ngoc Han
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
EXISTS (SELECT * KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
FROM hoadon hd KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
WHERE hd.makh =‘‘KH05’) KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
true SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
MAKH HOTEN 1009 28/10/2006 KH05 200,000
KH01 Nguyen Van A
KH02 Tran Ngoc Han
KH05 Le Nhat Minh
Khoa HTTT - Đại học CNTT 98
Tìm những khách hàng (makh, hoten) đã mua hàng
SELECT makh, hoten
FROM khachhang kh
WHERE EXISTS (SELECT *
FROM hoadon hd
WHERE hd.makh=kh.makh)
Khachhang
MAKH HOTEN DCHI
KH01 Nguyen Van A 731 Tran Hung Dao, Q5, TpHCM
KH02 Tran Ngoc Han 23/5 Nguyen Trai, Q5, TpHCM
KH03 Tran Ngoc Linh 45 Nguyen Canh Chan, Q1, TpHCM
KH04 Tran Minh Long 50/34 Le Dai Hanh, Q10, TpHCM
KH05 Le Nhat Minh 34 Truong Dinh, Q3, TpHCM
Hoadon
SOHD NGHD MAKH TRIGIA
1001 23/07/2006 KH01 320,000
1002 12/08/2006 KH01 840,000
1003 23/08/2006 KH02 100,000
1004 01/09/2006 KH02 180,000
1008 28/10/2006 KH01 440,000
1009 28/10/2006 KH05 200,000
In hoặc Exists
HOCVIEN
Tìm những học viên thi được 8.5 điểm
Mahv Hoten SELECT *
HV01 Nguyen Van Lan FROM hocvien
WHERE mahv IN (SELECT mahvien
HV02 Tran Hong Son
FROM ketquathi
HV03 Nguyen Le
WHERE diem=8.5)
HV04 Le Minh
KETQUATHI
SELECT *
FROM hocvien
Mahvien Mamh Diem
WHERE EXISTS (SELECT mahvien
HV01 CSDL 7.0 FROM ketquathi
HV02 CSDL 8.5 WHERE mahvien=mahv
HV01 CTRR 8.5 AND diem=8.5)
HV03 CTRR 9.0
Khoa HTTT - Đại học CNTT 100
5.8 Truy vấn lồng (3)
In hoặc Exists
CTHD (SOHD, MASP, SL)
Ví dụ: Tìm các số hóa đơn (sohd) mua cùng lúc 2 sản
phẩm có mã số “BB01” và “BB02”.
SELECT DISTINCT SOHD
FROM CTHD
WHERE MASP='BB01'
AND SOHD IN
(SELECT SOHD
FROM CTHD
WHEREMASP='BB02'
In hoặc Exists
CTHD (SOHD, MASP, SL)
Ví dụ: Tìm các số hóa đơn (sohd) mua cùng lúc 2 sản
phẩm có mã số “BB01” và “BB02”.
SELECT DISTINCT SOHD
FROM CTHD ct1
WHERE MASP= 'BB01'
AND EXISTS (SELECT *
FROM CTHD ct2
WHERE MASP='BB02' AND
ct2.SOHD=ct1.SOHD)
◼ Lượng từ All
◼ Where <Tên thuộc tính> <Phép so sánh>
All (<Tập hợp giá trị | truy vấn con> )
⚫ TRUE: khi một giá trị của thuộc tính thỏa mãn phép
so sánh với mọi phần tử trong tập hợp giá trị (hoặc tập
giá trị do truy vấn con trả ra).
⚫ FALSE: Ngược lại
HOCVIEN
Tìm những học viên thi được 8.5 điểm
Mahv Hoten SELECT *
HV01 Nguyen Van Lan FROM hocvien
WHERE mahv = ANY (SELECT mahv
HV02 Tran Hong Son
FROM ketquathi
HV03 Nguyen Le
WHERE diem=8.5)
HV04 Le Minh
=ANY tương đương với toán tử IN
KETQUATHI
Cách khác: sử dụng phép kết, …
Mahvien Mamh Diem
HV01 CSDL 7.0
HV02 CSDL 8.5
HV01 CTRR 8.5
HV03 CTRR 9.0
Khoa HTTT - Đại học CNTT 106
5.9 Phép chia
SELECT *
FROM hoadon
WHERE sohd= 'HD01' AND
NOT EXISTS
(SELECT * FROM sanpham
WHERE masp NOT IN
(SELECT masp FROM cthd
WHERE cthd.sohd= 'HD01' ))
SELECT *
FROM hoadon
WHERE
NOT EXISTS
(SELECT * FROM sanpham
WHERE masp NOT IN
(SELECT masp FROM cthd
WHERE cthd.sohd=hoadon.sohd ))