دستور SQL Join

 

در این مطلب دستور SQL Join را به صورت دیاگرام تصویری خواهید دید. در راهنماهای فارسی SQL جستجو کردم و دیدم دستور SQL Join به صورت تصویری بیان نشده است. دیاگرام‌های مختلفی را هم دیدم و اغلب‌شان به طور کامل دستور SQL Join را نگفته بودند. این مطلب در سایت کدپروجکت هم به صورت مفصل توضیح داده و هم این که فایل‌های مثال اجرا شده را برای دانلود گذاشته بود. این مطلب را ترجمه کرده‌ام.

نمودارهای ون را با استفاده از ویزیو آفیس ۲۰۱۳ ترسیم کرده‌ام. روش کار را اینجا توضیح داده‌ام.

در این مطلب ۷ دستور بازیابی اطلاعات دو جدول مرتبط را به جز Cross Join و Self Referencing Join را خواهم گفت. دستورات به شرح زیر اند:

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. OUTER JOIN
  5. LEFT JOIN EXCLUDING INNER JOIN
  6. RIGHT JOIN EXCLUDING INNER JOIN
  7. OUTER JOIN EXCLUDING INNER JOIN

در عین حال موارد ۵، ۶ و ۷ را

LEFT EXCLUDING JOIN
RIGHT EXCLUDING JOIN
OUTER EXCLUDING JOIN

خواهم نامید. ممکن است بعضی از شما بگویید که موارد ۵، ۶ و ۷ دستور Join بین دو جدول نباشند. با این حال بخاطر سادگی بحث من به این‌ها هم اشاره خواهم کرد چون شما دستور SQL Join را در هر یک از این‌ها استفاده می‌کنید، فقط برخی رکوردها را با دستور Where از خروجی نهایی حذف می‌کنید.

دو جدول A و B را در مثال‌ها استفاده کرده‌ام که محتویات آن‌ها را در ادامه می‌بینید. PK=Primary Key یا همان کلید اولیه است. Value هم یک فیلد فرضی است که مقدار رشته‌ای دارد.

 

 

دستور SQL Inner Join

 

 

sql inner join command

این دستور SQL Join ساده‌ترین و قابل فهم ترین و در واقع عمومی‌ترین است. این کوئری تمام رکوردهای جدول سمت چپ (Table A) را که رکوردهای منطبق در جدول سمت راست (Table B) دارند، برمی‌گرداند. دستور SQL Join برای حالت Inner Join به شکل زیر نوشته می‌شود:

اجرای دستور SQL Inner Join با دو جدول مثال به شکل زیر خواهد بود:

دستور SQL Left Join

این کوئری تمام رکوردهای جدول سمت چپ (Table A) بدون توجه به این که در جدول سمت راست (Table B) باشند، برمی‌گرداند. علاوه بر این رکوردهای منطبق از جدول سمت راست را هم شامل خواهد شد. دستور SQL Join برای حالت Left Join به شکل زیر است:

نتیجه اجرای دستور SQL Left Join با جدول‌های مثال به شکل زیر است:

 

دستور SQL Join در حالت Left Excluding Join

این کوئری تمام رکوردهای جدول سمت چپ (Table A) که در جدول سمت راست (Table B) نیستند، نشان خواهد داد. دستور SQL Join برای این حالت به شکل زیر نوشته می‌شود:

نتیجه اجرای دستور بالا به شکل زیر است:

 

دستور SQL Right Join

این کوئری تمام رکوردهای جدول سمت راست (Table B) بدون توجه به این که در جدول سمت چپ (Table A) باشند، برمی‌گرداند. به علاوه، رکوردهای منطبق از جدول سمت چپ را هم شامل خواهد شد. دستور SQL Join برای حالت Left Join به شکل زیر است:

نتیجه اجرای دستور SQL Right Join با دو جدول مثال به شکل زیر خواهد بود:

دستور SQL Join در حالت Right Excluding Join

این کوئری تمام رکوردهای جدول سمت راست (Table B) که در جدول سمت چپ (Table A) نیستند، نشان خواهد داد. دستور SQL Join برای این حالت به شکل زیر نوشته می‌شود:

نتیجه اجرای دستور با دو جدول مثال به شکل زیر است:

دستور SQL Outer Join

sql-outer-join-command
این دستور با عنوان Full Outer Join و Full Join نیز نامیده می‌شود. این کوئری تمام رکوردهای دو جدول را با اتصال رکوردهایی از جدول سمت چپ (Table A) که منطبق با رکوردهای جدول سمت راست (Table B) باشند نشان می‌دهد. دستور آن به شکل زیر است:

نتیجه اجرای دستور SQL Outer Join با دو جدول مثال به شکل زیر است:

 

دستور SQL Join در حالت  Outer Excluding JOIN

این کوئری تمام رکوردهای جدول سمت چپ (Table A) و تمام رکوردهای جدول سمت راست (Table B) را که منبطق نباشند بر می‌گرداند. به زبان ریاضی اگر بگوییم اشتراک A و B را از اجتماع A و B حذف می‌کند و باقیمانده را برمی‌گرداند. دستور SQL آن به شکل زیر است:

نتیجه اجرای دستور SQL Excluding Outer Join با دو جدول مثال به شکل زیر است:

sql-outer-join-command

توجه داشته باشید در حالت Outer Join اول رکوردهای Inner Join برگردانده می‌شوند، سپس رکوردهای Right Join و در آخر رکوردهای Left Join. این شیوه حداقل در Microsoft SQL Server بدون نیاز به عبارت Order By اجرا می‌شود.

نکات بیشتر در خصوص دستور SQL Join

در لینک زیر دستور SQL Join به شکلی دیگر نمایش داده شده است. نویسنده، شیوه‌ی استفاده شده در این مطلب یعنی نمودار ون و نظریه مجموعه‌ها را، دارای اشکالاتی می‌داند و با شکل‌های دیگر آن را یاد داده است. در صورتی که فرصتی دست بدهد ممکن است آن را هم ترجمه کنم و به همین مطلب اضافه کنم:

Say NO to Venn Diagrams When Explaining JOINs

برای اطلاعات بیشتر در خصوص دستور SQL Join می‌توانید به لینک ویکیپدیا مراجعه کنید. در زمان نگارش نخست این مطلب، هنوز لینک ویکیپدیای مربوط به دستور SQL Join به فارسی ترجمه نشده است. اگر تازه وارد و جویای نام و اعتبار هستید و البته نگارش و انشای‌تان خوب است، توصیه می‌کنم مطلب ویکیپدیا را ترجمه کنید.

لینک‌های منبع:

Pin It on Pinterest

Shares