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 میرویم: ترکیب هر دو حالت — نگهداشتن ردیفهای بدون تطبیق از هر دو سمت همزمان.