”);
kết quả của câu hỏi con được sử dụng trong phép so sánh với một giá
trị khác trong biểu thức điều kiện của câu hỏi b ao nó. Các phép so sánh có
dạng
<phep so sánh>[<lượng từ>](select - câu hỏi co n) trong đó phép so sánh có thể là phép so sánh số h ọc hoặc phép so sánh trên tập hợp (chúng tôi đã đề cập ở phần 3.1) <lượng từ > có thể là ALL,AN Y (hoặc SOME). Phép so sánh bằng
ANYcó thể được thay tương đương bằng phép to án IN, phép so sánh <>ALL
có thể thay tương đương bằng phép toán NOT IN.
3.6.GOM NHÓM DỮ LIỆU– MỆNH ĐỀ GROUP BY Y
Khi cần tính toán trên các bộ theo một nhó m nào đó - theo một thuộc
tính nào đó, thì ta dùng mệnh đề GROUP BY, c hẳng hạn cần tính điểm trung
bình chung tất cả các môn học cho tất cả các si nh viên, hay là cần tính số
Trường Trung cấp Kinh tế - Kỹ thuật Hà Nội I Giáo Trình Cơ Sở Dữ Liệu
lượng sinh viên cho mỗi lớp, mỗi khoa, đếm số lượng sinh viên nữ của mỗi
khoa, đếm số lượng sinh viên của mỗi tỉnh,…
Mệnh đề GROUP BY <thuộc tính> dùng để phân nhóm dữ liệu. những
bộ của bảng có cùng giá trị trên các thuộc tính này sẽ tạo thành một nhóm.
Ví dụ 3.12:
Lập bảng điểm trung bình lần 1 các môn họ c của các sinh viên của lớp
có mã lớp là CDTH2A. Danh sách cần: MA SV, HOTENSV,DIEMTB( (trong đó
DIEMTB là thuộc tính tự đặt).
SELECT KETQUA.MASV, HOTENSV,AVG(D IEMTHI) AS DIEMTB
FROM SINHVIEN,KETQUA
WHERE MALOP=”CDTH2A” AND LANTHI= 1 AND
SINHVIEN.MASV=KETQUA.MASV GROUP BY KETQUA.MASV, HOTENSV
Mệnh đề HAVING <điều kiện trên nhóm>
Nếu cần kiểm tra điều kiện của một nhóm t hì dùng mệnh đề Having ,
chẳng hạn như cho biết những sinh viên nào có điểm trung bình các môn ≥ 8,
những khoa nào có nhiều hơn 100 sinh viên nữ,… Lưu ý những thuộc tính có tham gia vào m ệnh đề GROUP BY để phân
nhóm phải được liệt kê trong danh sách thuộc tính the o sau từ khóa SELECT.
Mệnh đề HAVING <điều kiện trên nhóm> đ ược sử dụng như là phép
chọn phối hợp với việc phân nhóm dữ liệu.
Giống như ở ví dụ 3.11 nhưng có thêm điề u kiện là điểm trung bình các
môn đã thi lớn hơn hoặc bằng 8.0.
SELECT KETQUA.MASV, HOTENSV,AVG(D IEMTHI) AS DIEMTB
FROM SINHVIEN,KETQUA,LOP
WHERE MALOP=”CDTH2A” AND LANTHI= 1 AND
SINHVIEN.MASV=KETQUA.MASV GROUP BY KETQUA.MASV, HOTENSV HAVING AVG(DIEMTHI)>=8.0;
Trường Trung cấp Kinh tế - Kỹ thuật Hà Nội I Giáo Trình Cơ Sở Dữ Liệu
Trang 40
Trong một lệnh truy vấn tổng hợp, ngoại trừ thành phần SELECT
bắt
buộc phải đặt lên đầu, thứ tự của các thành phần khác là tùy ý. Thứ tự dịch một
lệnh truy vấn tổng hợp là như sau:
FROM WHEREGROUP BY HAVING
SELECT ORDER BY
Suy cho cùng, các chương trình quản lý cũn g là việc kết xuất các báo
cáo từ các quan hệ, mà SQL cho phép tạo ra những qu an hệ này một cách tiện
lợi. Vì thế hiểu và vận dụng tốt lệnh truy vấn dữ liệu l à một việc làm cực kỳ hiệu
Trường Trung cấp Kinh tế - Kỹ thuật Hà Nội I Giáo Trình Cơ Sở Dữ Liệu
Trang 41
BÀI TẬP