کاربرد دستورهای 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 به طور کلی، تا حدودی پیچیده است و صرفاً با انجام تمرینهای عملی برای شما واضحتر میشود.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای پایگاه داده و سیستم های مدیریت اطلاعات
- مفاهیم مقدماتی MySQL — راهنمای جامع
- مجموعه آموزشهای مهندسی نرم افزار
- اتصال به پایگاه داده MySQL با استفاده از زبان جاوا — آموزش گام به گام
- چگونه دیتابیس MySQL را بر روی ویندوز نصب کنیم؟
- نصب MySQL — راهنمای گام به گام
- کوئری INSERT در MySQL — راهنمای جامع
==