Mệnh đề JOIN có tính ứng dụng rất lớn khi cần kết hợp dữ liệu giữa các bảng, để trở thành một người quản trị database hoặc là một backend developer thì bạn cần hiểu và nắm rõ mệnh đề này.
MySQL JOIN, đặt ra vấn đề trong cơ sở dữ liệu chúng ta đang có 2 bảng là bảng posts để lưu trữ danh sách bài viết, bảng thứ hai là bảng category lưu trữ phân loại bài viết. Và mỗi bài viết thì có 1 trường tham chiếu tới id trong bảng category. Vậy làm sao để chỉ trong một câu lệnh SELECT mà ta có thể truy vấn được chi tiết bài viết đó(lấy được cả thông tin phân loại của bài viết), vậy lúc này ta sẽ dùng tới mệnh đề JOIN.
Mệnh đề JOIN trong MySQL
Mệnh đề JOIN được sử dụng để kết hợp nhiều dòng từ hai hay nhiều bảng trong SQL, dựa trên một cột được liên kết giữa chúng.
Mệnh đề JOIN kết hợp dữ liệu bằng cách dựa trên cột ta đã xác định, mỗi hàng trong bảng 1 có dữ liệu tại cột đó bằng với cột được xác định trong bảng 2 thì 2 hàng trong bảng 1 và bảng 2 này sẽ được kết hợp lại thành một hàng.
>>XEM THÊM: Câu lệnh UPDATE trong MysQL – Lệnh sửa đổi dữ liệu bảng
Cú pháp
CAU_LENH
FROM bang_1
JOIN bang_2 ON bang_2.column_name = bang_1.column_name
Trong đó:
- CAU_LENH: Có thể là một câu lệnh SELECT.
- bang_1: Bảng số 1
- bang_2: Bảng số 2 cần kết hợp dữ liệu
- column_name: Tên cột liên kết giữa hai bảng này.
Mệnh đề sau ON ta có thể hiểu nó chính là điều kiện để kết hợp, nếu đúng thì được chọn và sai thì bỏ qua.
Mệnh đề JOIN cũng có thể dùng để kết hợp dữ liệu từ 3 hoặc nhiều bảng.
CAU_LENH
FROM bang_1
JOIN bang_2 ON bang_1.column_name = bang_2 .column_name
JOIN bang_3 ON bang_3 .column_name = bang_3 .column_name
.....
JOIN ....
ON .......
Ví dụ sử dụng
Ta có 2 bảng là bảng posts và category như bên dưới.
- Bảng category
- Bảng posts
Với vấn đề đã đặt ra trong đầu bài viết, ta sẽ sử dụng mệnh đề JOIN để kết hợp dữ liệu như sau, Viết lệnh SQL.
SELECT * FROM `posts`
JOIN category ON posts.cate_id = category.id
Kết quả khi thực hiện lệnh SELECT và sử dụng mệnh đề JOIN để kết hợp dữ liệu giữa 2 bảng.
*Lưu ý: Khi kết hợp bảng nếu tên các cột bị trùng nhau để phân biệt được bạn nên đặt lại tên cột trong select bằng thuộc tính AS nhé*
Như vậy dữ liệu 2 bảng đã được kết hợp với nhau.
>>XEM THÊM: Toán tử so sánh trong MySQL – So sánh bằng, lớn hơn, nhỏ hơn
Thêm một ví dụ nữa, lúc này mình cần chèn thêm 2 dòng tại bảng posts để bạn có thể dễ dàng theo dõi hơn.
Mệnh đề WHERE cũng có thể sử dụng để loại bỏ bản ghi(các hàng) sau khi kết hợp dữ liệu bằng JOIN.
Lúc này ta chỉ lấy ra các bài viết có category id là 1(name cate Hài hước), viết lệnh SQL như sau.
SELECT * FROM `posts`
JOIN category ON category.id = posts.cate_id
WHERE posts.cate_id = 1
Kết quả khi thực hiện lệnh trên.
*Lưu ý: Khi kết hợp bảng nếu tên các cột bị trùng nhau để phân biệt được bạn nên đặt lại tên cột trong select bằng thuộc tính AS nhé*
hoặc ta cũng có thể viết lại lệnh trên như sau.
SELECT * FROM `posts`
JOIN category ON category.id = posts.cate_id
WHERE category.id = 1
Bởi vì kết hợp 2 bảng dựa vào 2 cột là cột id trong bảng category và cột cate_id trong bảng posts, nên khi kết hợp 2 cột này là như nhau.
Trong các bài viết tiếp theo chúng ta sẽ cùng tìm hiểu thêm các lệnh JOIN là INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, SELF JOIN,, FULL OUTER JOIN.
Cảm ơn bạn đã đọc hết bài viết! Chúc bạn học tốt!
[XEM TẤT CẢ CÁC BÀI HƯỚNG DẪN MYSQL TẠI ĐÂY]
XEM THÊM Câu lệnh INSERT INTO trong MySQL – Lệnh chèn dữ liệu vào bảng Câu lệnh CREATE TABLE trong MySQL – Lệnh tạo bảng mới Các kiểu dữ liệu trong MySQL (Data Types) – Học MySQL Câu lệnh SELECT trong MySQL – Khi nào thì dùng lệnh SELECT Toán tử so sánh trong MySQL – So sánh bằng, lớn hơn, nhỏ hơn