RIGHT JOIN: نگهداشتن همهی ردیفهای سمت راست
RIGHT JOIN دقیقاً آینهی LEFT JOIN است: بهجای نگهداشتن همهی ردیفهای جدول سمت چپ، همهی ردیفهای جدول سمت راست را نگه میدارد — حتی اگر تطبیقی در سمت چپ نداشته باشند.
ساختار پایه
یادت هست درس «هنر» در جدول courses هیچ دانشآموزی ندارد؟ حالا با RIGHT JOIN میتوانیم آن را هم در نتیجه نگه داریم:
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;
بیا ببینیم:
full_name = NULL در نتیجه ظاهر شده — چون RIGHT JOIN همهی ردیفهای courses (جدول سمت راست) را نگه داشته، حتی بدون هیچ دانشآموزی.چرا RIGHT JOIN در کد واقعی کمتر دیده میشود
نکتهی جالب این است: هر RIGHT JOIN را میتوان با جابهجا کردن ترتیب جدولها، به یک LEFT JOIN کاملاً معادل تبدیل کرد:
-- این پرسوجو دقیقاً همان نتیجهی بالا را میدهد: 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;
بیا این را هم امتحان کن تا خودت ببینی نتیجه یکسان است:
RIGHT JOIN را ممنوع میکنند و همیشه از LEFT JOIN استفاده میکنند — چون همیشه میشود با جابهجایی ترتیب FROM، هر RIGHT JOIN را به یک LEFT JOIN تبدیل کرد، و یکدستبودن سبک، خواندن کد تیمی را سادهتر میکند.جمعبندی این درس
RIGHT JOINهمهی ردیفهای جدول سمت راست را نگه میدارد، حتی بدون تطبیق در سمت چپ.- هر
RIGHT JOINرا میتوان با جابهجایی ترتیب جدولها به یکLEFT JOINمعادل تبدیل کرد. - به همین دلیل، در عمل بیشتر برنامهنویسها فقط از
LEFT JOINاستفاده میکنند وRIGHT JOINکمتر در کد واقعی دیده میشود.
در درس بعدی سراغ FULL JOIN میرویم: ترکیب هر دو حالت — نگهداشتن ردیفهای بدون تطبیق از هر دو سمت همزمان.
تمرینهای خودآزمایی
اول خودت جواب بده، بعد پاسخ را باز کن و مقایسه کن.
۱A RIGHT JOIN B را با LEFT JOIN بازنویسی کن.نمایش پاسخ
با جابهجایی جدولها: B LEFT JOIN A همان نتیجه را میدهد.
۲چرا در عمل LEFT JOIN بیشتر از RIGHT JOIN دیده میشود؟نمایش پاسخ
خوانایی: جدول اصلی اول میآید و همهی ردیفهایش حفظ میشود؛ ذهن راحتتر از چپ به راست دنبال میکند.