Truy vấn dữ liệu - Phần 3¶
Tóm lược nội dung
Bài này trình bày câu lệnh truy vấn SELECT và INNER JOIN để trích xuất dữ liệu từ nhiều bảng.
Yêu cầu về cơ sở dữ liệu¶
Tiếp tục sử dụng cơ sở dữ liệu school_db
đã tạo ở bài trước.
Nếu gặp trục trặc về cơ sở dữ liệu, hãy xoá school_db
(1) và tạo lại từ đầu (2).
-
1. Trong pgAdmin, click chuột phải vào school_db và chọn Delete.
2. Trong hộp thoại hiện ra, chọn Yes để xác nhận xoá.
-
Chạy tập tin school_db_script.sql bằng pdAdmin của PostgreSQL.
Truy vấn hai bảng¶
Để truy vấn dữ liệu từ hai bảng, ta dùng từ khoá INNER JOIN
để liên kết hai bảng theo các thuộc tính liên kết.
INNER JOIN
chỉ trả về các mẫu tin mà các thuộc tính liên kết có giá trị khớp nhau. Nếu mẫu tin nào mà thuộc tính liên kết có giá trị không khớp thì mẫu tin đó sẽ không được trả về.
Cú pháp truy vấn hai bảng bằng INNER JOIN
Ví dụ:
Yêu cầu: Lập danh sách học sinh, kèm theo lớp và phòng học.
Phân tích:
Dữ liệu về học sinh được lưu trong bảng students
, dữ liệu về lớp học được lưu trong bảng classrooms
.
Hai bảng này đều có thuộc tính classroom_id
, được dùng làm thuộc tính liên kết.
Như vậy, mệnh đề INNER JOIN
sẽ là inner join classrooms on students.classroom_id = classrooms.classroom_id
.
Mã lệnh SQL:
Với truy vấn trên, nếu những học sinh nào (trong bảng students
) mà thuộc tính classroom_id
không có giá trị hoặc giá trị không khớp với bảng classrooms
thì sẽ không được trả về.
Output:
Ví dụ:
Yêu cầu: Cũng với danh sách vừa lập ở trên, hãy bổ sung mã lớp học.
Phân tích:
Thuộc tính mã lớp học classroom_id
được lưu trong cả hai bảng: classrooms
và students
.
Để tránh sự nhầm lẫn, ta cần chỉ rõ tên bảng nào sẽ trích xuất thuộc tính classroom_id
. Chẳng hạn, ta chọn bảng students
.
Như vậy, trong mệnh đề SELECT
, ta bổ sung: students.classroom_id
.
Mã lệnh SQL:
Output:
Truy vấn ba bảng¶
Cú pháp truy vấn ba bảng bằng INNER JOIN
Yêu cầu: In ra bảng điểm kiểm tra cuối kỳ môn Khoa học máy tính của tất cả học sinh.
Phân tích:
Quan sát lược đồ trên, ta thấy:
Dữ liệu về điểm kiểm tra cuối kỳ được lưu trong bảng scores
, dữ liệu về môn học được lưu trong bảng subjects
.
Hai bảng này đều có thuộc tính subject_id
, được dùng làm thuộc tính liên kết.
Dữ liệu về học sinh được lưu trong bảng students
, có thuộc tính student_id
cũng làm thuộc tính liên kết.
Như vậy, mệnh đề INNER JOIN
sẽ là inner join subjects on scores.subject_id = subjects.subject_id inner join students on scores.student_id = students.student_id
.
Mã lệnh SQL:
Output:
Các loại liên kết khác
Ngoài INNER JOIN
, còn có các loại liên kết khác như: LEFT JOIN
, RIGHT JOIN
, FULL JOIN
, OUTER JOIN
, CROSS JOIN
, SELF JOIN
, THETA JOIN
, NATURAL JOIN
, EQUI JOIN
, SEMI JOIN
, ANTI JOIN
, v.v...
Sơ đồ tóm tắt nội dung¶
Sơ đồ tóm tắt về liên kết bảng INNER JOIN
Some English words¶
Vietnamese | Tiếng Anh |
---|---|
liên kết | join |
Mã nguồn¶
Các đoạn mã trong bài được đặt tại GitHub.