Mệnh đề GROUP BY...được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có GROUP BY ta không thể nào tí[r]
(1)BÀI 29:
(2)29.1 HÀM KẾT HỢP
29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Cú pháp hàm COUNT:
SELECT COUNT(tên_cột) FROM tên_bảng:
Hàm COUNT(*):
Hàm COUNT(*) trả số lượng dòng chọn bảng
(3)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Câu lệnh sau trả số lượng dòng bảng:
SELECT COUNT(*) FROM Persons kết trả :
Câu lệnh sau trả số lượng người lớn 20 tuổi:
SELECT COUNT(*) FROM Persons WHERE Age > 20 kết trả là:
Hàm COUNT(column):
(4)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Ví dụ ta có bảng Persons sau:
Câu lệnh sau trả số lượng người mà cột Age bảng không rỗng:
(5)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Mệnh đề COUNT DISTINCT
Lưu ý: Các ví dụ hoạt động với CSDL Oracle MS SQL Server, không hoạt động MS Access (chưa thử nhiệm với hệ CSDL khác!)
Từ khoá DISTINCT COUNT dùng chung với để đếm số lượng kết không trùng
Cú pháp sau:
(6)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Ví dụ ta có bảng Orders sau:
Câu lệnh SQL sau:
(7)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
SQL có sẵn nhiều hàm để thực đếm và tính tốn.
Cú pháp:
(8)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
SQL có sẵn nhiều hàm để thực đếm Bảng liệu dùng ví sụ tiếp theo:
Câu lệnh SQL sau:
(9)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Hàm AVG(column)
Hàm AVG trả giá trị trung bình tính theo cột định dịng chọn Các giá trị NULL không xét đến tính giá trị trung bình
Ví dụ:
Câu lệnh sau tính số tuổi trung bình người có tuổi 20:
(10)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Hàm MAX(column)
Hàm MAX trả giá trị lớn cột Các giá trị NULL không xét đến
Ví dụ:
(11)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Hàm MIN(column)
Hàm MAX trả giá trị nhỏ cột Các giá trị NULL không xét đến
Ví dụ:
SELECT MIN(Age) FROM Persons kết trả về: 19
(12)29.1.1 HÀM COUNT(), MIN(), MAX(), SUM(), AVG()
Hàm SUM(column)
Hàm SUM trả tổng giá trị cột Các giá trị NULL khơng xét đến
Ví dụ:
Tìm tổng số tuổi tất người có bảng: SELECT SUM(Age) FROM Persons
kết trả về: 98
Ví dụ:
Tìm tổng số tuổi tất người có tuổi lớn 20:
(13)29.2 HÀM GOM NHÓM 29.2.1 CÚ PHÁP
Các hàm tập hợp (ví dụ SUM) thông thường cần thêm chức mệnh đề GROUP BY
GROUP BY
Mệnh đề GROUP BY thêm vào SQL hàm tập hợp (như SUM) trả tập hợp giá trị cột chúng gọi, khơng có GROUP BY ta khơng thể tính tổng giá trị theo nhóm riêng lẻ cột
Cú pháp GROUP BY sau:
(14)29.2.1 CÚ PHÁP
Ví dụ sử dụng GROUP BY:
Giả sử ta có bảng Sales sau:
Câu lệnh SQL sau:
(15)29.2.1 CÚ PHÁP
Kết trả mà ta mong đợi Ta thêm mệnh đề GROUP BY vào câu lệnh SQL:
SELECT Company, SUM(Amount) FROM Sales GROUP BY Company
và kết trả lần là:
(16)29.2.2 ĐIỀU KIỆN GOM NHÓM
HAVING
Mệnh đề HAVING thêm vào SQL mệnh đề
WHERE không áp dụng hàm tập hợp (như SUM) Nếu khơng có HAVING, ta khơng thể kiểm tra điều kiện với hàm tập hợp
Cú pháp HAVING sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột
HAVING SUM(tên_cột) điều_kiện giá_trị
Ta sử dụng lại bảng Sales Câu lệnh SQL sau: SELECT Company, SUM(Amount) FROM Sales GROUP BY Company
(17)29.2.2 ĐIỀU KIỆN GOM NHĨM Sẽ trả kết quả:
Với SQL, bí danh sử dụng cho tên cột tên bảng.
Bí danh cột:
Cú pháp bí danh cột sau:
SELECT tên_cột AS bí_danh_cột FROM tên_bảng
Bí danh bảng:
Bí danh bảng có cú pháp sau:
(18)29.2.2 ĐIỀU KIỆN GOM NHĨM
Ví dụ sử dụng bí danh cột:
Ta có bảng Persons sau:
Câu lệnh SQL sau:
SELECT LastName AS Họ, FirstName AS Tên FROM Persons
(19)29.3 THỨ TỰ THỰC HIỆN CÂU TRUY VẤN CÓ MỆNH ĐỀ GROUP BY VÀ HAVING
Mệnh đề GROUP BY
Các thuộc tính mệnh đề SELECT (trừ thuộc tính hàm kết hợp) phải xuất mệnh đề GROUP BY
Mệnh đề HAVING
Sử dụng hàm kết hợp mệnh đề SELECT để kiểm tra số điều kiện
Chỉ kiểm tra điều kiện nhóm, khơng điều kiện lọc
(20)29.3 THỨ TỰ THỰC HIỆN CÂU TRUY VẤN CÓ MỆNH ĐỀ GROUP BY VÀ HAVING
Thứ tự thực câu truy vấn có mệnh đề GROUP BY HAVING
(1) Chọn dòng thỏa điều kiện mệnh đề WHERE
(2) Những dòng gom thành nhiều nhóm tương ứng với mệnh đề GROUP BY
(3) Áp dụng hàm kết hợp cho nhóm
(4) Bỏ qua nhóm khơng thỏa điều kiện mệnh đề HAVING
(21)29.4 BÀI TẬP LIÊN QUAN ĐẾN HÀM KẾT HỢP VÀ GOM NHÓM
(22)29.5.1 TRUY VẤN CON Ở MỆNH ĐỀ FROM Kết trả câu truy vấn phụ bảng
- Bảng trung gian trình truy vấn - Khơng có lưu trữ thật
(23)29.5.1 TRUY VẤN CON Ở MỆNH ĐỀ FROM Ví dụ:
Trong sở liệu quản lý vật tư, muốn hiển thị tên nhân viên xuất vật tư ngày ‘12/08/2008’, câu lệnh truy vấn sau thực yêu cầu
SELECT nv.ten_nv FROM nhan_vien As nv, (SELECT manv_xuat FROM phieu_xuat WHERE ngay_xuat = ‘08/12/2008’) As Temp
(24)29.5.2 ĐIỀU KIỆN KẾT NỐI CỦA MỆNH ĐỀ FROM
29.5.2.1 KẾT NỐI BẰNG
(25)29.5.2.2 KẾT NỐI NGOÀI
LEFT JOIN : Trả tất hàng từ bảng thứ R1, cho dù không so trùng bảng thứ hai R2 Nếu hàng bảng R1 không so trùng bảng R2, hàng liệt kê (thay giá trị NULL)
(26)