با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. در مثال های بخش های قبلی، ما داده ها را فقط از یک جدول استخراج کرده و یا دستکاری می کردیم. در حالت عادی و در یک دستور SQL فقط می توانیم روی داده های موجود در یک جدول کار کنیم، اما برای انتخاب و یا دستکاری همزمان داده های چند جدول در یک دستور SQL یک راهکار ساده و پرکاربرد وجود دارد و آن استفاده از دستور JOIN در MySQL است، این دستور به شما امکان تعریف چندین جدول در یک خط کد SQL را برای اعمال مختلف می دهد، که در ادامه ی مبحث به کار با دستور JOIN در MySQL آشنا خواهیم شد.
در این آموزش شما را با طرز کار و روش های استفاده از دستور JOIN در MySQL آشنا خواهیم کرد.
شما می توانید از دستور JOIN در MySQL در دستورات SELECT, UPDATE و DELETE برای دستکاری همزمان چند جدول استفاده کنید.
ما فرض می کنیم که دو جدول tcount_tbl و tutorials_tbl را در TUTORIALS داریم.
مثال-۱
مثال زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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> |
حالا ما می توانیم یک query از SQL بنویسیم که دو جدول فوق را به هم بپیوندد.
این query تمام نویسندگان (author) را از جدول tutorials_tbl انتخاب کرده و tutorial مرتبط با آن ها را از جدول tcount_tbl انتخاب می کند:
1 2 3 4 5 6 7 8 9 10 11 | 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> |
همانطور که قبلا هم اشاره کردیم برای اجرای هر یک از queryهای SQL در PHP از تابع ()mysql_query استفاده می شود.
و سپس می توانیم از توابع دیگری مانند mysql_fetch_array نتایج را استخراج کنیم.
مثال-۲
مثال زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?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 LEFT JOIN با یک دستور join ساده فرق دارد، این دستور به جدولی که در سمت چپ است بیشتر توجه می کند.
اگر ما از دستور LEFT JOIN استفاده کنیم، تمام رکوردهای دو جدول که با هم مطابقت دارند استخراج می شود و در نهایت رکوردهای باقی مانده از جدول سمت چپ که مطابقت نداشته اند نیز به نتایج اضافه می شوند.
مثال-۳
مثال زیر درک شما را از عملکرد LEFT JOIN راحت تر می کند :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 به صورتی که در مباحث فوق اشاره شد، استفاده کنیم.