خانه/ ارتباطات و JOINها/ RIGHT JOIN

RIGHT JOIN: نگه‌داشتن همه‌ی ردیف‌های سمت راست

مبتدی ۱۰ دقیقه مطالعه

RIGHT JOIN دقیقاً آینه‌ی LEFT JOIN است: به‌جای نگه‌داشتن همه‌ی ردیف‌های جدول سمت چپ، همه‌ی ردیف‌های جدول سمت راست را نگه می‌دارد — حتی اگر تطبیقی در سمت چپ نداشته باشند.

ساختار پایه

یادت هست درس «هنر» در جدول courses هیچ دانش‌آموزی ندارد؟ حالا با RIGHT JOIN می‌توانیم آن را هم در نتیجه نگه داریم:

sql
SELECT s.full_name, c.title
FROM students s
INNER JOIN enrollments e ON s.id = e.student_id
RIGHT JOIN courses c ON e.course_id = c.id;

بیا ببینیم:

امتحانش کن — RIGHT JOIN
«هنر» با full_name = NULL در نتیجه ظاهر شده — چون RIGHT JOIN همه‌ی ردیف‌های courses (جدول سمت راست) را نگه داشته، حتی بدون هیچ دانش‌آموزی.

چرا RIGHT JOIN در کد واقعی کمتر دیده می‌شود

نکته‌ی جالب این است: هر RIGHT JOIN را می‌توان با جابه‌جا کردن ترتیب جدول‌ها، به یک LEFT JOIN کاملاً معادل تبدیل کرد:

sql
-- این پرس‌وجو دقیقاً همان نتیجه‌ی بالا را می‌دهد:
SELECT s.full_name, c.title
FROM courses c
LEFT JOIN enrollments e ON e.course_id = c.id
LEFT JOIN students s ON s.id = e.student_id;

بیا این را هم امتحان کن تا خودت ببینی نتیجه یکسان است:

امتحانش کن — همان نتیجه با LEFT JOIN معکوس
به همین دلیل خیلی از تیم‌های برنامه‌نویسی در استانداردهای کدنویسی‌شان اصلاً RIGHT JOIN را ممنوع می‌کنند و همیشه از LEFT JOIN استفاده می‌کنند — چون همیشه می‌شود با جابه‌جایی ترتیب FROM، هر RIGHT JOIN را به یک LEFT JOIN تبدیل کرد، و یکدست‌بودن سبک، خواندن کد تیمی را ساده‌تر می‌کند.

جمع‌بندی این درس

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

در درس بعدی سراغ FULL JOIN می‌رویم: ترکیب هر دو حالت — نگه‌داشتن ردیف‌های بدون تطبیق از هر دو سمت هم‌زمان.