Sử dụng MySQl Joins

Trong các chương trước, chúng ta đang lấy dữ liệu từ một bảng tại một thời điểm. Điều này đủ tốt cho những thao tác đơn giản, nhưng trong hầu hết các cách sử dụng MySQL trong thế giới thực, bạn thường sẽ cần lấy dữ liệu từ nhiều bảng trong một truy vấn duy nhất.

Bạn có thể sử dụng nhiều bảng trong một truy vấn SQL của mình. Hành động tham gia trong MySQL đề cập đến việc đập hai hoặc nhiều bảng thành một bảng duy nhất.

Bạn có thể sử dụng JOINS trong các câu lệnh SELECT, UPDATE và DELETE để tham gia các bảng MySQL. Chúng ta sẽ thấy một ví dụ về LEFT JOIN cũng khác với MySQL JOIN đơn giản.

Sử dụng Tham gia tại Dấu nhắc Lệnh

Giả sử chúng ta có hai bảng tcount_tbltutorials_tbl, trong TUTORIALS. Bây giờ hãy xem các ví dụ dưới đây -

Thí dụ

Các ví dụ sau -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|      mahran     |       20       |     
|      mahnaz     |      NULL      |        
|       Jen       |      NULL      |          
|      Gill       |       20       |          
|    John Poul    |        1       |      
|     Sanjay      |        1       |        
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      1      |  Learn PHP     |     John Poul   |    2007-05-24   |   
|      2      |  Learn MySQL   |      Abdul S    |    2007-05-24   |   
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

Bây giờ chúng ta có thể viết một truy vấn SQL để nối hai bảng này. Truy vấn này sẽ chọn tất cả các tác giả từ bảngtutorials_tbl và sẽ chọn số lượng hướng dẫn tương ứng từ tcount_tbl.

mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a, tcount_tbl b
   -> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |        1       |
|      3      |     Sanjay      |        1       |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

Sử dụng tham gia trong tập lệnh PHP

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

Thí dụ

Ví dụ sau -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
      FROM tutorials_tbl a, tcount_tbl b
      WHERE a.tutorial_author = b.tutorial_author';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "Tutorial ID: {$row['tutorial_id']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQL THAM GIA TRÁI

Một phép nối trái MySQL khác với một phép nối đơn giản. MySQL LEFT JOIN cung cấp thêm một số cân nhắc cho bảng ở bên trái.

Nếu tôi làm một LEFT JOIN, Tôi nhận được tất cả các bản ghi khớp theo cùng một cách và TRONG BỔ SUNG, tôi nhận được thêm một bản ghi cho mỗi bản ghi chưa khớp trong bảng bên trái của phép nối: do đó đảm bảo (trong ví dụ của tôi) rằng mọi AUTHOR đều được đề cập.

Thí dụ

Hãy thử ví dụ sau để hiểu THAM GIA TRÁI.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
   -> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |       1        |
|      2      |     Abdul S     |      NULL      |
|      3      |     Sanjay      |       1        |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

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