Bài học theo mô-đun (1/4)
Nối hai bảng: INNER JOIN
Cho đến bây giờ chúng ta đã đọc từng bảng một. Tuy nhiên, trong thế giới thực, dữ liệu
trải rộng trên nhiều bảng có liên quan: ví dụ: trong tập dữ liệu của chúng tôi, mỗi bảng
nhân viên có department_id trỏ đến bảng departments. Để xem
tên của bộ phận (và không chỉ id của nó), chúng ta cần tham gia vào
hai cái bàn. Toán tử thực hiện việc này được gọi là JOIN.
Cú pháp cơ bản
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;Đọc bằng tiếng Anh: "lấy table_a, đính kèm table_b vào đó bằng cách ghép nối mỗi
hàng trong đó table_a.x bằng table_b.y". Kết quả là một ảo mới
table với các cột của cả hai.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;Phần sau ON được gọi là điều kiện nối: nó cho biết
engine "hai hàng này gần giống nhau, xếp thẳng hàng nhé". trong
phần lớn các trường hợp đó là sự bình đẳng giữa khóa chính và khóa ngoại
khóa (ở đây departments.id và employees.department_id).
INNER JOIN, chi tiết
Từ khóa đầy đủ là INNER JOIN, nhưng JOIN chỉ là tiêu chuẩn
từ đồng nghĩa. "Bên trong" có nghĩa là chỉ những hàng có kết quả khớp trong cả hai
các bảng được trả về:
- nếu nhân viên có
department_id = NULL, họ sẽ không xuất hiện trong kết quả; - nếu một bộ phận không có nhân viên, nó sẽ không xuất hiện trong kết quả.
Tên cột đủ điều kiện
Khi hai bảng có các cột có cùng tên (ở đây cả hai đều có id và
cả hai đều có name nếu bạn nghĩ về điều đó), bạn cần chỉ định bảng nào
một cột được tạo ra bằng cách viết table.column. Để tránh lặp lại tên dài,
các bí danh thường được sử dụng (bạn đã thấy chúng trong Mô-đun 2):
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS ở đây cũng là tùy chọn: FROM employees e hoạt động tương tự.
Hãy thử nó
Đối với mỗi nhân viên trong bộ phận Ingegneria, hãy hiển thị tên (first_name), họ (last_name) và thành phố của bộ phận (departments.city). Ba cột, một hàng cho mỗi nhân viên.
Hiển thị gợi ý
Hoàn thành điều kiện BẬT với đẳng thức giữa e.department_id và d.id, sau đó chọn d.city làm cột thứ ba.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Liệt kê tên (first_name) và họ (last_name) của tất cả nhân viên làm việc trong bộ phận có trụ sở tại Milano. Lọc theo Department.city, không phải theo tên bộ phận.
Hiển thị gợi ý
Tương tự THAM GIA như bài tập trước, nhưng lọc theo d.city = 'Milano' thay vì theo tên bộ phận.
Giải pháp khả dụng sau 3 lần thử