VD
+ Cho biết danh sách các nhân viên sắp tên theo thứ tự ALphabet
SELECT MANV,TENNV,PHAI,LUONG
FROM NHANVIEN
ORDER BY TENNV
+ Cho biết danh sách các nhân viên theo từng phòng ban, trong từng phòng ban tên nhân viên sắp thep thứ tự
SELECT PHG,MANV,TENNV,PHAI,LUONG
ORDER BY PHG,TENNV
để hỗ trợ tìm kiếm có điều kiện, sử dụng mệnh đề WHERE trong câu lệnh SELECT với vị trí như sau:
1. AND và OR
SELECT ... FROM ... WHERE (DK1) AND/OR ....(ĐKn)
ví dụ SINHVIEN(MASV,HOTEN,NGSINH,LOP), tìm sinh viên lớp th01 và có năm sinh 2000
SELECT * FROM SINHVIEN WHERE LOP='th01' AND YEAR(NAMSINH)=2000
2. BETWEEN...AND
Cho biết các nhân viên sinh trong khoảng năm 1955 đến 1960
SELECT * FROM NHANVIEN WHERE YEAR(NGSINH) BETWEEN 1955 AND 1960
3. IS NULL VÀ IS NOT NULL
IS NULL và IS NOT NULL : Để kiểm tra một giá trị có phải là NULL | NOT NULL hay không Cho biết các nhân viên không có người quản lý trực tiếp
SELECT HONV,TENNV FROM NHANVIEN WHERE MANGUOIQUANLY IS NULL
4. IN VÀ NOT IN
IN VÀ NOT IN dùng để kiểm tra một giá trị nằm trong hay Không nằm trong một tập hợp nào đó hay không. Cho biết các đơn đặt hàng có đặt mặt hàng H1, H2, H3.
SELECT MADH FORM DONHANG WHERE MAHH IN ('H1','H2','H3')
C. Tìm kiếm có xử lý xâu ký tự
Để xử lý với các dữ liệu thuộc dạng xâu ký tự, ngôn ngữ SQL có hỗ trợ phép LIKE. Thông thường khi so sánh thuộc tính có kiểu dữ liệu thuộc dạng xâu ký tự thì người ta thường dùng LIKE chứ không dùng phép bằng = VD: Hiện ra các sinh viên tên Trang SELECT * FROM SINHVIEN WHERE HOTEN LIKE '%Trang'
%: dùng để đại diện cho nhiều ký tự đứng trước từ 'Trang'.
Ngoài ra còn các ký tự sau để mô tả mẫu cần tìm: _thay thế cho ký tự bất kỳ
Chú ý: Like “ab\%cd%” cho ra những chuỗi bắt đầu với “ab%cd” Like “ab\\cd%” cho ra những chuỗi bắt đầu với “ab\cd”
D. Tìm kiếm có điều kiện liên quan đến ngày tháng
VD: DDH(MADH, NGAYDH, MAKH) CTDH(MADH, MAHH, SOLUONG, DONGIA) Cho biết những đơn đặt hàng đặt trước ngày 01/01/2001 SELECT MADH,NGAYDH FROM DONHANG WHERE DATEDIFF (D,NGAYDH,'01/01/2001')>0
Cho biết các nhân viên sinh ngày 30/4/1975 SELECT * FORM NHANVIEN WHERE DATEDIFF (D, NGAYSINH, '1/1/1965')=0
SELECT * FROM NHANVIEN, PHONGBAN
WHERE NHANVIEN.MAPB = PHONGBAN.MAPB
G. DÙNG TOÁN TỬ SOME, ALL, EXISTS, NOT EXISTS
SQL sử dụng các hàm sau: Count, Max, Min, Sum, Avg. Hàm Count dùng đối số * có nghĩa là đếm tất cả các mẫu tin thỏa điều kiện đếm mà không cần quan tâm đến bất kỳ cột nào. Có tất cả bao nhiêu sinh viên trong lớp th01
select count(*) from sinhvien where lop='th01'
Ví dự cho danh sách các nhân viên có ít nhất 1 thân nhân
SELECT MANV,TENNV FROM NHANVIEN
WHERE (SELECT COUNT(*)
FROM THANNHAN
WHERE THANNHAN.MA_NVIEN=NHANVIEN.MANV)>0
+ Cho biết sinh viên có điểm trung bình cao nhất
SELECT MASV, AVG(DIEM)
FROM KETQUA
FROUP BY MASV
WHERE AVG(DIEM)>= ALL (SELECT AVG(DIEM)
GROUP BY MASV)
LỒNG PHÂN CẤP
+ Tìm những nhân viên có lương lớn hơn lương của tất cả nhân viên ở phòng 4
SELECT MANV,TENNV
WHERE LUONG > (SELECT MAX(LUONG)
WHERE PHG=4)
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.
+ Tìm những nhân viên không có thân nhân nào
FROM NHANVIEN N
WHERE NOT EXITS
(SELECT * D
FROM THANNHAN T
WHERE T.MANV=N.MANV)
Có 2 cách thực hiện:
Cách 1: Sử dụng NOT EXISTS + NOT IN hoặc NOT EXISTS + NOT EXISTS
Cách 2: Sử dụng mệnh đề GROUP BY + HAVING
VD: + Tìm nhân viên được phân công làm việc trong tất cả các đề án do phòng Nghiên cứu quản lí Cách 1: Sử dụng NOT EXISTS + NOT IN
SELECT N.TENNV
WHERE NOT EXISTS (
SELECT *
FROM PHONGBAN PV, DEAN D
WHERE D.MAPHONG=PB.MAPHONG
AND PB.TENPG='NGHIÊN CỨU' AND D.MADA NOT IN
(
SELECT PC.MADA
FROM PHANCONG PC
WHERE PC.MA_NVIEN = N.MANV)
)
Sử dụng NOT EXISTS + NOT EXISTS
FROM NHANVIEN N, PHANCONG PC, PHONGBANPB1, DEAN D1
WHERE N.MANV=PC.MA_NV AND PC.MADA =D1.MADA AND D1.PHONG=PB1.MAPHG AND PB1.TENPHG= ' NGHIÊN CỨU'
GROUP BY N.MANV,N.TENNV
HAVING COUNT( DISTINCT PB.MADA) = (SELECT COUNT (DISTINCT D2.MADA FROM DEAN D2, PHONGBAN PB2
WHERE D2.PHONG=PB2.MAPHG AND PB2.TENPHG = ' NGHIÊN CỨU)
cho biết họ tên nhan vên đã đến tuổi về hưu ( nam 60 nữ 55)
SELECT TENNV
WHERE YEAR(GETDATE()- YEAR(NGSINH)>= (CASE PHAI WHEN 'Nam' THEN 60 WHEN 'Nu' THEN 55 END)