Mệnh đề JOIN trong MariaDB
Trong các truy vấn SQL trước đây, ta đã thao tác trên một bảng hoặc truy xuất nhiều giá trị từ nhiều nguồn dữ liệu. Tuy nhiên, trong thực tế, hầu hết các truy vấn dữ liệu phức tạp hơn nhiều, đòi hỏi phải tổng hợp, so sánh và lấy dữ liệu từ nhiều bảng khác nhau.

JOIN
là một công cụ mạnh mẽ giúp kết hợp dữ liệu từ hai hoặc nhiều bảng thành một bảng kết quả duy nhất. Nó có thể được sử dụng trong các câu lệnh SELECT
, UPDATE
, và DELETE
.
Giới thiệu về mệnh đề JOIN trong MariaDB
Mệnh đề JOIN
cho phép kết hợp dữ liệu từ nhiều bảng dựa trên mối quan hệ giữa các cột chung.
???? Một số điểm cần lưu ý:
Bài viết này được đăng tại [free tuts .net]
- Cú pháp
JOIN
hiện đại giúp câu lệnh dễ đọc, dễ bảo trì và tuân thủ best practices. - Cú pháp cũ sử dụng
WHERE
để kết hợp bảng, nhưng không khuyến khích sử dụng. - Có nhiều loại
JOIN
, bao gồm:INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
(MariaDB không hỗ trợ mặc định, nhưng có thể thay thế bằngUNION
).
Cú pháp chung của JOIN trong MariaDB
SELECT cot1, cot2, ... FROM bang1 INNER JOIN bang2 ON bang1.cot_chung = bang2.cot_chung;
Giải thích:
INNER JOIN
: Lấy chỉ những bản ghi có giá trị khớp ở cả hai bảng.ON
: Điều kiện để nối dữ liệu giữa hai bảng dựa vào cột chung.
Sử dụng JOIN trong dòng lệnh (Command Prompt) trong MariaDB
Ví dụ: Truy vấn dữ liệu từ bảng products
và inventory
root@host# mysql -u root -p Enter password:******* mysql> USE PRODUCTS; Database changed mysql> SELECT products.ID_number, products.Nomenclature, inventory.inventory_ct FROM products INNER JOIN inventory ON products.ID_number = inventory.ID_number;
Giải thích:
- Truy vấn lấy dữ liệu từ bảng
products
vàinventory
. INNER JOIN
giúp chỉ lấy những sản phẩm có thông tin tồn kho trong bảnginventory
.
Kết quả hiển thị:
ID_number | Tên sản phẩm | Số lượng tồn kho |
---|---|---|
12345 | Orbitron 4000 | 150 |
12346 | Orbitron 3000 | 200 |
12347 | Orbitron 1000 | 0 |
Dữ liệu hiển thị chỉ bao gồm những sản phẩm có trong cả hai bảng.
Sử dụng JOIN trong PHP trong MariaDB
Ví dụ: Truy vấn dữ liệu với JOIN trong PHP
Lưu ý: mysql_query()
đã lỗi thời, nên sử dụng mysqli
hoặc PDO
.
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'rootpassword'; $dbname = 'PRODUCTS'; // Kết nối đến cơ sở dữ liệu $conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); // Kiểm tra kết nối if ($conn->connect_error) { die("Kết nối thất bại: " . $conn->connect_error); } // Câu lệnh SELECT sử dụng JOIN $sql = "SELECT a.product_id, a.product_manufacturer, b.product_count FROM products_tbl a INNER JOIN pcount_tbl b ON a.product_manufacturer = b.product_manufacturer"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "Nhà sản xuất: " . $row['product_manufacturer'] . "<br>"; echo "Số lượng: " . $row['product_count'] . "<br>"; echo "Mã sản phẩm: " . $row['product_id'] . "<br>"; echo "--------------------------------<br>"; } } else { echo "Không tìm thấy dữ liệu."; } // Đóng kết nối $conn->close(); ?>
Giải thích:
- INNER JOIN kết hợp dữ liệu từ bảng
products_tbl
vàpcount_tbl
dựa trên nhà sản xuất (product_manufacturer
). - Hiển thị danh sách nhà sản xuất, số lượng tồn kho và mã sản phẩm.
Kết quả hiển thị trên trình duyệt:
Nhà sản xuất: XYZ Corp Số lượng: 150 Mã sản phẩm: 12345 -------------------------------- Nhà sản xuất: QFT Corp Số lượng: 200 Mã sản phẩm: 12346 -------------------------------- Nhà sản xuất: LMN Corp Số lượng: 0 Mã sản phẩm: 12347 --------------------------------
Chỉ hiển thị những sản phẩm có thông tin trong cả hai bảng.
Các loại JOIN khác trong MariaDB trong MariaDB
INNER JOIN (Lấy dữ liệu có trong cả hai bảng)
SELECT * FROM products INNER JOIN inventory ON products.ID_number = inventory.ID_number;
Chỉ lấy sản phẩm có dữ liệu tồn kho.
LEFT JOIN (Lấy tất cả dữ liệu từ bảng bên trái, nếu không có dữ liệu khớp thì hiển thị NULL)
SELECT * FROM products LEFT JOIN inventory ON products.ID_number = inventory.ID_number;
Lấy tất cả sản phẩm, nếu không có tồn kho thì hiển thị NULL
.
RIGHT JOIN (Ngược với LEFT JOIN, lấy tất cả từ bảng bên phải)
SELECT * FROM products RIGHT JOIN inventory ON products.ID_number = inventory.ID_number;
Lấy tất cả dữ liệu từ bảng inventory
, nếu không có sản phẩm tương ứng thì hiển thị NULL
.
FULL JOIN (MariaDB không hỗ trợ trực tiếp, có thể dùng UNION)
SELECT * FROM products LEFT JOIN inventory ON products.ID_number = inventory.ID_number UNION SELECT * FROM products RIGHT JOIN inventory ON products.ID_number = inventory.ID_number;
Kết hợp cả LEFT JOIN
và RIGHT JOIN
, lấy tất cả dữ liệu từ cả hai bảng.
Kết bài
JOIN
là công cụ mạnh mẽ giúp kết hợp dữ liệu từ nhiều bảng.INNER JOIN
chỉ lấy dữ liệu khớp giữa hai bảng.LEFT JOIN
lấy tất cả dữ liệu từ bảng bên trái, nếu không có dữ liệu phù hợp thì hiển thịNULL
.RIGHT JOIN
lấy tất cả dữ liệu từ bảng bên phải.FULL JOIN
không được hỗ trợ trực tiếp, nhưng có thể mô phỏng bằngUNION
.- Khi dùng
JOIN
trong PHP, nên sử dụngmysqli
hoặcPDO
thay vìmysql_query()
để đảm bảo bảo mật.
Sử dụng JOIN hợp lý giúp tối ưu hóa truy vấn và tổ chức dữ liệu tốt hơn!