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:
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:
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 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à:
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ế.