دستور SQL Join
در این مطلب دستور SQL Join را به صورت دیاگرام تصویری خواهید دید. در راهنماهای فارسی SQL جستجو کردم و دیدم دستور SQL Join به صورت تصویری بیان نشده است. دیاگرامهای مختلفی را هم دیدم و اغلبشان به طور کامل دستور SQL Join را نگفته بودند. این مطلب در سایت کدپروجکت هم به صورت مفصل توضیح داده و هم این که فایلهای مثال اجرا شده را برای دانلود گذاشته بود. این مطلب را ترجمه کردهام.
نمودارهای ون را با استفاده از ویزیو آفیس ۲۰۱۳ ترسیم کردهام. روش کار را اینجا توضیح دادهام.
در این مطلب ۷ دستور بازیابی اطلاعات دو جدول مرتبط را به جز Cross Join و Self Referencing Join را خواهم گفت. دستورات به شرح زیر اند:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- OUTER JOIN
- LEFT JOIN EXCLUDING INNER JOIN
- RIGHT JOIN EXCLUDING INNER JOIN
- OUTER JOIN EXCLUDING INNER JOIN
در عین حال موارد ۵، ۶ و ۷ را
LEFT EXCLUDING JOIN
RIGHT EXCLUDING JOIN
OUTER EXCLUDING JOIN
خواهم نامید. ممکن است بعضی از شما بگویید که موارد ۵، ۶ و ۷ دستور Join بین دو جدول نباشند. با این حال بخاطر سادگی بحث من به اینها هم اشاره خواهم کرد چون شما دستور SQL Join را در هر یک از اینها استفاده میکنید، فقط برخی رکوردها را با دستور Where از خروجی نهایی حذف میکنید.
دو جدول A و B را در مثالها استفاده کردهام که محتویات آنها را در ادامه میبینید. PK=Primary Key یا همان کلید اولیه است. Value هم یک فیلد فرضی است که مقدار رشتهای دارد.
TABLE_A PK Value ---- ---------- ۱ FOX ۲ COP ۳ TAXI ۶ WASHINGTON ۷ DELL ۵ ARIZONA ۴ LINCOLN ۱۰ LUCENT TABLE_B PK Value ---- ---------- ۱ TROT ۲ CAR ۳ CAB ۶ MONUMENT ۷ PC ۸ MICROSOFT ۹ APPLE ۱۱ SCOTCH
دستور SQL Inner Join
این دستور SQL Join سادهترین و قابل فهم ترین و در واقع عمومیترین است. این کوئری تمام رکوردهای جدول سمت چپ (Table A) را که رکوردهای منطبق در جدول سمت راست (Table B) دارند، برمیگرداند. دستور SQL Join برای حالت Inner Join به شکل زیر نوشته میشود:
SELECT <select_list> FROM Table_A A INNER JOIN Table_B B ON A.Key = B.Key
اجرای دستور SQL Inner Join با دو جدول مثال به شکل زیر خواهد بود:
-- INNER JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A INNER JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- ۱ FOX TROT 1 ۲ COP CAR 2 ۳ TAXI CAB 3 ۶ WASHINGTON MONUMENT 6 ۷ DELL PC 7 (۵ row(s) affected)
دستور SQL Left Join
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key
نتیجه اجرای دستور SQL Left Join با جدولهای مثال به شکل زیر است:
-- LEFT JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A LEFT JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- ۱ FOX TROT 1 ۲ COP CAR 2 ۳ TAXI CAB 3 ۴ LINCOLN NULL NULL ۵ ARIZONA NULL NULL ۶ WASHINGTON MONUMENT 6 ۷ DELL PC 7 ۱۰ LUCENT NULL NULL (۸ row(s) affected)
دستور SQL Join در حالت Left Excluding Join
این کوئری تمام رکوردهای جدول سمت چپ (Table A) که در جدول سمت راست (Table B) نیستند، نشان خواهد داد. دستور SQL Join برای این حالت به شکل زیر نوشته میشود:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key WHERE B.Key IS NULL
نتیجه اجرای دستور بالا به شکل زیر است:
-- LEFT EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A LEFT JOIN Table_B B ON A.PK = B.PK WHERE B.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- ۴ LINCOLN NULL NULL ۵ ARIZONA NULL NULL ۱۰ LUCENT NULL NULL (۳ row(s) affected)
دستور SQL Right Join
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key
نتیجه اجرای دستور SQL Right Join با دو جدول مثال به شکل زیر خواهد بود:
-- RIGHT JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A RIGHT JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- ۱ FOX TROT 1 ۲ COP CAR 2 ۳ TAXI CAB 3 ۶ WASHINGTON MONUMENT 6 ۷ DELL PC 7 NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 (۸ row(s) affected)
دستور SQL Join در حالت Right Excluding Join
این کوئری تمام رکوردهای جدول سمت راست (Table B) که در جدول سمت چپ (Table A) نیستند، نشان خواهد داد. دستور SQL Join برای این حالت به شکل زیر نوشته میشود:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL
نتیجه اجرای دستور با دو جدول مثال به شکل زیر است:
-- RIGHT EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A RIGHT JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 (۳ row(s) affected)
دستور SQL Outer Join
این دستور با عنوان Full Outer Join و Full Join نیز نامیده میشود. این کوئری تمام رکوردهای دو جدول را با اتصال رکوردهایی از جدول سمت چپ (Table A) که منطبق با رکوردهای جدول سمت راست (Table B) باشند نشان میدهد. دستور آن به شکل زیر است:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key
نتیجه اجرای دستور SQL Outer Join با دو جدول مثال به شکل زیر است:
-- OUTER JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A FULL OUTER JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- ۱ FOX TROT 1 ۲ COP CAR 2 ۳ TAXI CAB 3 ۶ WASHINGTON MONUMENT 6 ۷ DELL PC 7 NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 ۵ ARIZONA NULL NULL ۴ LINCOLN NULL NULL ۱۰ LUCENT NULL NULL (۱۱ row(s) affected)
دستور SQL Join در حالت Outer Excluding JOIN
این کوئری تمام رکوردهای جدول سمت چپ (Table A) و تمام رکوردهای جدول سمت راست (Table B) را که منبطق نباشند بر میگرداند. به زبان ریاضی اگر بگوییم اشتراک A و B را از اجتماع A و B حذف میکند و باقیمانده را برمیگرداند. دستور SQL آن به شکل زیر است:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL
نتیجه اجرای دستور SQL Excluding Outer Join با دو جدول مثال به شکل زیر است:
-- OUTER EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A FULL OUTER JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 ۵ ARIZONA NULL NULL ۴ LINCOLN NULL NULL ۱۰ LUCENT NULL NULL (۶ row(s) affected)
نکات بیشتر در خصوص دستور SQL Join
در لینک زیر دستور SQL Join به شکلی دیگر نمایش داده شده است. نویسنده، شیوهی استفاده شده در این مطلب یعنی نمودار ون و نظریه مجموعهها را، دارای اشکالاتی میداند و با شکلهای دیگر آن را یاد داده است. در صورتی که فرصتی دست بدهد ممکن است آن را هم ترجمه کنم و به همین مطلب اضافه کنم:
برای اطلاعات بیشتر در خصوص دستور SQL Join میتوانید به لینک ویکیپدیا مراجعه کنید. در زمان نگارش نخست این مطلب، هنوز لینک ویکیپدیای مربوط به دستور SQL Join به فارسی ترجمه نشده است. اگر تازه وارد و جویای نام و اعتبار هستید و البته نگارش و انشایتان خوب است، توصیه میکنم مطلب ویکیپدیا را ترجمه کنید.
لینکهای منبع:
با سلام و خسته نباشی
اقا دم شما گرم عالی بود مرسی
ممنون برای توضیح با عکس