Mệnh đề JOIN trong MySQL
Trần Thị Vân
- 1165
- 15/08/2025
Chức năng của Mệnh đề JOIN trong MySQL
Mệnh đề JOIN trong MySQL gồm có nhiều loại nhưng có mục đích chung là nối các bảng lại với nhau rồi lấy các cột của các bảng chỉ trong một câu lệnh select.
Các loại Mệnh đề JOIN trong MySQL
INNER JOIN trong Mệnh đề JOIN
INNER JOIN trong Mệnh đề JOIN dùng để nối nhiều bảng lại với nhau thông qua một cột giống nhau của các bảng, giúp lấy ra các cột của các bảng, và các hàng được lấy sẽ có giá trị giống nhau trong cột nối, ví dụ ở tb_sinhvien có mssv bằng 3 và ở bảng tb_hocphi cũng có mssv bằng 3 thì hàng chứa mssv này sẽ được lấy.
select tb_sinhvien.mssv,tb_sinhvien.hoten, tb_hocphi.hocphi from tb_sinhvien INNER JOIN tb_hocphi ON tb_sinhvien.mssv = tb_hocphi.mssv;
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'xgZwEfQWE'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// Xem bảng tb_sinhvien
echo "<b>Xem bảng tb_sinhvien</b><br>";
$sql ="select mssv,hoten from tb_sinhvien";
$ketquamot = mysql_query($sql,$conn);
if(!$ketquamot){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquamot, MYSQL_ASSOC)){
echo "mssv: {$row['mssv']} <br> ".
"hoten: {$row['hoten']} <br> ".
"--------------------------------<br>";
}
// Xem bảng tb_hocphi
echo "<b>Xem bảng tb_hocphi</b><br>";
$sql ="select mssv,hocphi from tb_hocphi";
$ketquahai = mysql_query($sql,$conn);
if(!$ketquahai){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquahai, MYSQL_ASSOC)){
echo "mssv: {$row['mssv']} <br> ".
"hocphi: {$row['hocphi']} <br> ".
"--------------------------------<br>";
}
//INNER JOIN
echo "<b>INNER JOIN</b><br>";
$sql ="select tb_sinhvien.mssv,tb_sinhvien.hoten, tb_hocphi.hocphi from tb_sinhvien INNER JOIN tb_hocphi ON tb_sinhvien.mssv = tb_hocphi.mssv";
$ketquaba = mysql_query($sql,$conn);
if(!$ketquaba){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketquaba, MYSQL_ASSOC)){
echo "mssv: {$row['mssv']} <br> ".
"hoten: {$row['hoten']} <br> ".
"hocphi: {$row['hocphi']} <br> ".
"--------------------------------<br>";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
Xem bảng tb_sinhvien
mssv: 1
hoten: Bùi Tấn Lực
--------------------------------
mssv: 2
hoten: Trần Thị Vân
--------------------------------
mssv: 3
hoten: Bùi Đan Trúc Quỳnh
--------------------------------
mssv: 4
hoten: Nguyễn Thùy Dung
--------------------------------
mssv: 5
hoten: Nguyễn Thảo Nhật Hạ
--------------------------------
Xem bảng tb_hocphi
mssv: 1
hocphi: 5000000
--------------------------------
mssv: 2
hocphi: 6000000
--------------------------------
mssv: 3
hocphi: 5500000
--------------------------------
INNER JOIN
mssv: 1
hoten: Bùi Tấn Lực
hocphi: 5000000
--------------------------------
mssv: 2
hoten: Trần Thị Vân
hocphi: 6000000
--------------------------------
mssv: 3
hoten: Bùi Đan Trúc Quỳnh
hocphi: 5500000
--------------------------------
Cách sử dụng JOIN trong MySQL hiệu quả
JOIN phát huy hiệu quả khi truy vấn cần lấy dữ liệu liên quan từ nhiều bảng. Thay vì xử lý từng bảng riêng biệt, bạn có thể xác định mối liên hệ giữa các cột và xây dựng một câu lệnh truy vấn rõ ràng, dễ kiểm soát.
Xác định cột liên kết giữa các bảng
Trước khi viết JOIN, cần xác định cột nào chứa mối quan hệ giữa các bảng. Thông thường, một bảng có khóa chính và bảng còn lại lưu khóa ngoại tương ứng. Điều này giúp MySQL ghép đúng bản ghi thay vì tạo ra kết quả không mong muốn.
SELECT users.name, orders.order_date
FROM users
JOIN orders ON users.id = orders.user_id;
Trong ví dụ trên, users.id được liên kết với orders.user_id. Mỗi đơn hàng vì thế có thể được truy xuất cùng thông tin người dùng tương ứng.
Đặt bí danh cho bảng khi sử dụng JOIN
Khi truy vấn nhiều bảng, tên bảng dài hoặc có các cột trùng tên sẽ khiến câu lệnh khó đọc. Bí danh giúp rút gọn câu SQL và làm rõ cột đang lấy từ bảng nào.
SELECT u.name, o.order_date
FROM users AS u
JOIN orders AS o ON u.id = o.user_id;
Cách viết này đặc biệt hữu ích khi câu truy vấn có nhiều JOIN. Bí danh nên được đặt ngắn gọn nhưng dễ nhận biết để người đọc nhanh chóng hiểu nguồn dữ liệu.
Kết hợp JOIN với WHERE để lọc dữ liệu
JOIN dùng để kết nối dữ liệu, còn WHERE có thể tiếp tục giới hạn những bản ghi cần lấy. Kết hợp hai phần này giúp truy vấn chỉ trả về dữ liệu phù hợp với mục đích sử dụng.
SELECT u.name, o.order_date
FROM users AS u
JOIN orders AS o ON u.id = o.user_id
WHERE o.order_date >= '2026-01-01';
Nên phân biệt điều kiện liên kết với điều kiện lọc: ON xác định cách các bảng kết nối với nhau, còn WHERE xác định bản ghi nào được giữ lại trong kết quả.
Sử dụng JOIN khi truy vấn nhiều bảng
Khi dữ liệu cần lấy nằm ở ba bảng trở lên, có thể nối từng bảng theo mối quan hệ tương ứng. Mỗi JOIN nên có điều kiện liên kết rõ ràng để tránh tạo ra quá nhiều dòng hoặc kết quả sai.
SELECT u.name, o.order_date, p.name
FROM users AS u
JOIN orders AS o ON u.id = o.user_id
JOIN products AS p ON o.product_id = p.id;
Với truy vấn nhiều bảng, nên chọn đúng các cột cần thiết thay vì lấy toàn bộ dữ liệu. Cách này giúp kết quả gọn hơn và thuận tiện cho việc kiểm tra, xử lý cũng như tối ưu truy vấn về sau.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Mệnh đề JOIN trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *