Join là gì? lệnh sql kết hợp dữ liệu từ nhiều bảng dựa trên khóa chung
Join là lệnh SQL dùng kết hợp dữ liệu từ nhiều bảng dựa trên cột chung, khác biệt với UNION. Lệnh này giúp bạn trả lời các câu hỏi phức tạp bằng cách đối sánh giá trị giữa các bảng liên quan. Việc sử dụng đúng cú pháp sẽ giúp bạn truy xuất thông tin hiệu quả.
Join là lệnh SQL dùng kết hợp dữ liệu từ nhiều bảng dựa trên cột chung, khác biệt với UNION. Lệnh này giúp bạn trả lời các câu hỏi phức tạp bằng cách đối sánh giá trị giữa các bảng liên quan. Việc sử dụng đúng cú pháp sẽ giúp bạn truy xuất thông tin hiệu quả.
Nền tảng: Khóa chính và khóa ngoại

Khóa chính (Primary Key) là cột định danh duy nhất, không trùng lặp (ví dụ: account_id). Khóa ngoại (Foreign Key) là cột tham chiếu đến khóa chính của bảng khác, tạo mối quan hệ giữa chúng (ví dụ: customer_id trong bảng account trỏ về bảng customer). Hiểu rõ hai cột này là chìa khóa để viết đúng điều kiện ON khi kết nối bảng.
Tại sao nên dùng JOIN thay vì WHERE

JOIN xử lý việc ghép bảng ngay tại cơ sở dữ liệu (DBMS), giúp bạn lấy dữ liệu liên quan chỉ với một câu lệnh. Cách này giảm tải đáng kể so với việc chạy nhiều lệnh WHERE rời rạc rồi ghép thủ công trong ứng dụng, nhờ đó tiết kiệm băng thông mạng và tài nguyên server.
Các loại JOIN phổ biến trong SQL

Mỗi loại JOIN lọc dữ liệu khác nhau tùy nhu cầu:
- INNER JOIN: Mặc định của SQL. Chỉ trả về bản ghi khớp chính xác ở cả hai bảng.
- LEFT JOIN: Giữ nguyên mọi dòng bảng trái, ghép dữ liệu bảng phải. Dòng nào không khớp sẽ hiện
NULL. - RIGHT JOIN: Ngược lại LEFT JOIN. Giữ nguyên bảng phải, ghép bảng trái. Không khớp thì
NULL. - FULL JOIN: Lấy tất cả dòng từ cả hai bảng. Không khớp thì điền
NULL. - CROSS JOIN: Tạo tích Descartes – mọi dòng bảng A ghép với mọi dòng bảng B. Số dòng kết quả = số dòng A × số dòng B.
- SELF JOIN: Bảng tự ghép với chính nó. Thường dùng để so sánh dữ liệu nội bộ (ví dụ: nhân viên với quản lý trực tiếp).
Cú pháp JOIN và phân biệt với UNION

Cú pháp chuẩn:
SELECT col1, col2
FROM table1 AS t1
[INNER|LEFT|RIGHT|FULL|CROSS] JOIN table2 AS t2
ON t1.common_col = t2.common_col;
AS là biệt danh (alias) giúp rút gọn tên bảng. Nếu tên cột chung trùng nhau ở cả hai bảng, có thể thay ON t1.col = t2.col bằng USING(col).
Phân biệt với UNION: JOIN ghép cột ngang (bảng A + bảng B thành 1 bảng rộng hơn). UNION ghép dòng dọc (nối các bảng có cùng cấu trúc cột thành 1 danh sách dài hơn).
Ứng dụng SELF JOIN trong thực tế
Dùng khi cần so sánh dòng này với dòng khác trong cùng một bảng:
- Cơ cấu phân cấp: Ghép bảng
employeevới chính nó quamanager_idđể xem ai quản lý ai. - Luồng tuần tự: Theo dõi trạng thái đơn hàng hoặc quy trình qua
prev_id→next_id. - Đồ thị & Lặp dữ liệu: Tìm đường đi liên kết (ví dụ: thành phố A → B → C) hoặc quét trùng lặp để dọn dẹp dữ liệu.
Chưa có bình luận nào