Tới chương này, chúng ta mới chỉ lấy dữ liệu từ một bảng tại một thời điểm. Điều này là khá tốt cho những tác vụ đơn giản, nhưng trong thực tiễn khi sử dụng MySQL, chúng ta thường cần lấy dữ liệu từ nhiều bảng trong một truy vấn đơn.

Bạn có thể sử dụng nhiều bảng trong truy vấn SQL đơn. Hoạt động Join trong MySQL có thể được hiểu như là việc ghim hai hoặc nhiều bảng vào trong một bảng đơn.

Bạn có thể sử dụng JOIN trong các lệnh SELECT, UPDATE và DELETE để kết hợp các bảng MySQL. Chúng ta sẽ xem một ví dụ về LEFT JOIN cũng như sự khác nhau giữa các JOIN trong MySQL.

Sử dụng JOIN trong MySQL

Trước khi bắt đầu ví dụ, chúng ta cần tạo thêm một bảng hocphik60 trong cơ sở dữ liệu sinhvien. Bây giờ chúng ta có hai bảng như sau:

Bảng sinhvienk60 có dữ liệu:

Sử dụng JOIN trong MySQL

Tạo bảng hocphik60 và chèn dữ liệu vào bảng.

//Lua chon co so du lieu
USE sinhvien;
//Tao bang
CREATE TABLE hocphik60 (
 ten VARCHAR(255) NOT NULL,
hocphi INT NOT NULL
);

//Chen du lieu vao bang
INSERT INTO hocphik60 (ten, hocphi)
VALUES ('Nam', 4000000);

INSERT INTO hocphik60 (ten, hocphi)
VALUES ('Thanh', 3500000);

INSERT INTO hocphik60 (ten, hocphi)
VALUES ('Cao', 4500000);

INSERT INTO hocphik60 (ten, hocphi)
VALUES ('Huong', 3000000);

Sau đó, bạn sử dụng lệnh SELECT * FROM hocphik60 ta sẽ có bảng như sau:

Sử dụng JOIN trong MySQL

Bây giờ, chúng ta có thể viết một truy vấn SQL để kết hợp hai bảng trên. Truy vấn này sẽ lựa chọn tất cả ten từ bảng sinhvienk60 và sẽ lựa chọn số hocphi tương ứng từ bảng hocphik60.

SELECT a.mssv, a.ten, b.hocphi
    FROM sinhvienk60 a, hocphik60 b
    WHERE a.ten = b.ten;

Kết quả là:

Sử dụng JOIN trong MySQL

Sử dụng JOIN trong PHP Script

Bạn có thể sử dụng bất kỳ truy vấn SQL nào ở trên trong PHP Script. Bạn chỉ cần truyền truy vấn SQL vào trong hàm PHP là mysql_query() và sau đó bạn sẽ lấy các kết quả theo cách thức thông thường.

Dưới đây là ví dụ minh họa sự sử dụng JOIN trong PHP script:

<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '123456';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Khong the ket noi: ' . mysql_error());
}
$sql = 'SELECT a.mssv, a.ten, b.hocphi
        FROM sinhvienk60 a, hocphik60 b
        WHERE a.ten = b.ten';

mysql_select_db('sinhvien');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Khong the lay du lieu: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{
    echo "Ten:{$row['ten']}  <br> ".
         "Hoc Phi: {$row['hocphi']} <br> ".
         "MSSV : {$row['mssv']} <br> ".
         "--------------------------------<br>";
} 
echo "Lay du lieu thanh cong\n";
mysql_close($conn);
?>

RIGHT JOIN trong MySQL

RIGHT JOIN trong SQL trả về tất cả hàng từ bảng bên phải, ngay cả khi không có so khớp nào trong bảng bên trái. Nghĩa là nếu mệnh đề ON so khớp với 0 bản ghi trong bảng bên trái, thì RIGHT JOIN sẽ vẫn trả về một hàng trong kết quả, nhưng với NULL trong mỗi cột từ bảng bên trái.

Bạn thử ví dụ minh họa RIGHT JOIN với hai bảng trên như sau:

SELECT a.mssv, a.ten, b.hocphi
    FROM sinhvienk60 a RIGHT JOIN hocphik60 b
    ON a.ten = b.ten;

Kết quả là:

Sử dụng JOIN trong MySQL

Bạn cần làm nhiều bài thực hành để làm quen với các JOIN trong MySQL. Đây là một khái niệm khá phức tạp trong MySQL/SQL và bạn sẽ hiểu rõ hơn trong khi thực hành các ví dụ thực tế.

Hoặc bạn có thể tham khảo cách sử dụng JOIN trong SQL được trình bày trong loạt bài hướng dẫn về SQL của s2sontech:

Các loại JOIN trong SQL

Trong SQL, có một số loại JOIN có sẵn là:

    • INNER JOIN trong SQL: Trả về các hàng khi có một so khớp (match) trong các bảng.

    • LEFT JOIN trong SQL: Trả về tất cả các hàng từ bảng bên trái, ngay cả khi không có so khớp nào trong bảng bên phải.

    • RIGHT JOIN trong SQL: Trả về tất cả các hàng từ bảng bên phải, ngay cả khi không có so khớp nào trong bảng bên trái.

    • FULL JOIN trong SQL: Trả về các hàng khi có một so khớp ở một trong các bảng.

    • SELF JOIN trong SQL: Được sử dụng để kết hợp một bảng với chính nó, khi nếu table đó là hai bảng dữ liệu, thay tên tạm thời cho ít nhất một bảng trong lệnh SQL.

    • CARTESIAN JOIN trong SQL: Trả về tích Đề-các của tập hợp các bản ghi từ hai hoặc nhiều bảng kết hợp.

Các bài học MySQL phổ biến khác tại s2sontech:




Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Learning English Everyday