کاربرد دستورهای JOIN در MySQL — راهنمای جامع

۴۴۴ بازدید
آخرین به‌روزرسانی: ۲۲ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
کاربرد دستورهای JOIN در MySQL — راهنمای جامع

ما در بخش‌های پیشین راهنمای جامع MySQL دیدیم که چگونه می‌توان داده‌ها را هر زمان از یک جدول MySQL دریافت کرد. این وضعیت برای وظایف ساده کفایت می‌کند؛ اما در کاربردهای واقعی MySQL در اغلب موارد باید داده‌ها را در یک کوئری منفرد از چندین جدول دریافت کنید. البته چنین کاری در MySQL از طریق عملگر JOIN (الحاق) امکان‌پذیر است. عمل Join کردن MySQL به معنی ترکیب کردن دو یا چند جدول در یک جدول است.

از JOIN می‌توان به همراه عبارت‌های SELECT، UPDATE، DELETE برای ادغام جدول‌ها استفاده کرد. در ادامه نمونه‌ای از عملگر LEFT JOIN می‌بینیم که از JOIN معمولی MySQL متفاوت است.

استفاده از Join در اعلان فرمان

فرض کنید دو جدول به نام‌های tcount_tbl و tutorials_tbl داریم. اینک مثال زیر را ملاحظه کنید.

مثال

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>

اینک می‌توانیم یک کوئری SQL برای الحاق این دو جدول بنویسیم. این کوئری همه نویسندگان را از جدول tutorials_tbl می‌گیرد و تعداد نوشته‌های متناظر با آن نویسنده را از جدول 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>

استفاده از Join در اسکریپت PHP

از هر یک از کوئری‌های SQL فوق‌الذکر در هر اسکریپت PHP می‌توان استفاده کرد. کافی است کوئری SQL را به تابع ()mysql_query در PHP ارسال کنید و سپس نتایج را به روش معمول دریافت کنید.

مثال

<?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);
?>

LEFT JOIN (الحاق چپ) در MySQL

دستور LEFT JOIN در MySQL از JOIN ساده متفاوت است. LEFT JOIN نسبت به JOIN معمولی اهمیت بیشتری به جدول سمت چپ می‌دهد. اگر از یک الحاق چپ در کوئری خود استفاده کنید، همه رکوردهایی را که در روش الحاق معمولی داشتیم، به دست می‌آوریم و به علاوه یک رکورد بیشتر برای هر رکورد نامنطبق در جدول چپ دریافت می‌کنیم. از این رو در مثال خودمان مطمئن می‌شویم که به همه نویسنده‌ها اشاره شده است.

مثال

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)

برای آشنایی بیشتر با عبرت JOIN باید تمرین عملی بیشتر بکنید. این مفهوم در MySQL و SQL به طور کلی، تا حدودی پیچیده است و صرفاً با انجام تمرین‌های عملی برای شما واضح‌تر می‌شود.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۵ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tutorialspoint
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *