btvn.vn

Kết nối bảng và tổng hợp SQL

Lưu trên thiết bị này
Cơ sở dữ liệu và SQL · Chọn bài khác

Khi thông tin nằm ở hai bảng

Bảng học sinh giữ mã lớp; bảng lớp giữ tên giáo viên phụ trách. Muốn xem cả học sinh và giáo viên, ta nối hai bảng theo khóa phù hợp.

Ghép đúng rồi mới tổng hợp

JOIN ... ON nêu điều kiện ghép. INNER JOIN chỉ giữ các cặp khớp; LEFT JOIN giữ mọi hàng bên trái, phần bên phải không khớp được biểu diễn bằng NULL. Thiếu hoặc sai điều kiện có thể làm số hàng tăng ngoài ý muốn. COUNT(*) đếm hàng; COUNT(cột) đếm giá trị khác NULL của cột; SUM tính tổng, AVG tính trung bình các giá trị khác NULL. GROUP BY chia nhóm để tổng hợp. WHERE lọc hàng trước khi nhóm; HAVING lọc kết quả nhóm. Trong các ví dụ, cột điểm đều có giá trị số, không NULL.

Nối học sinh với lớp

Bảng HocSinh: (H01, An, A), (H02, Binh, A). Bảng Lop: (A, CoLan), (B, CoHoa). ```sql SELECT h.HoTen, l.GiaoVien FROM HocSinh AS h JOIN Lop AS l ON h.MaLop = l.MaLop; ``` Kết quả An–CoLan và Binh–CoLan. Mỗi học sinh ghép với lớp đúng mã, không ghép với mọi lớp chỉ vì hai bảng đều có dữ liệu.

Thử vận dụng

Hàm nào đếm tất cả hàng trong nhóm, kể cả khi một cột có NULL?
Chọn một đáp án

Tổng hợp theo lớp

Dùng bảng HocSinh của bài SELECT (An 12A 8; Binh 12B 6; Chi 12A 9; Dung 12B 8): ```sql SELECT Lop, COUNT(*) AS SoHS, AVG(Diem) AS DiemTB FROM HocSinh GROUP BY Lop ORDER BY Lop; ``` Kết quả 12A có 2 học sinh, trung bình 8,5; 12B có 2 học sinh, trung bình 7. Ta tính trong từng nhóm, không lấy trung bình toàn bảng cho mọi lớp.

Ví dụ xem cách làm

Trong ví dụ nối bảng, nếu bỏ điều kiện và ghép mọi học sinh với mọi lớp, có bao nhiêu cặp?

Ví dụ xem cách làm

Muốn chỉ xem nhóm lớp có từ 2 học sinh trở lên, dùng điều kiện nào sau GROUP BY Lop?

Những điều cần nhớ

Đọc điều kiện nối trước khi đếm hàng. Phân biệt lọc hàng và lọc nhóm; COUNT(*) không giống COUNT(cột) khi có NULL.

Đang học