با سلام و احترام خدمت شما همراهان روکسو، همانطور که از جلسه ی قبل به یاد دارید در زبان SQL کلیدواژه ای به نام JOIN وجود دارد که خود شامل چند نوع مختلف می شد: INNER JOIN و LEFT JOIN و RIGHT JOIN و FULL JOIN و SELF JOIN. امروز ما قصد بررسی تمام این دستورات را داریم.
این دستور ردیف هایی را انتخاب می کند که در هر دو جدول وجود داشته باشند. به شکل زیر دقت کنید:
این دستور دارای ساختار کلی زیر است:
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
اگر بین ستون ها مقادیر قابل انطباقی وجود داشته باشد دستور INNER JOIN تمام ردیف ها را از هر دو جدول می گیرد. بنابراین اگر ردیف هایی در جدول Orders باشند که مقادیر منطبقی در جدول Customers نداشته باشند به نمایش در نمی آیند.
مثال اول - کد زیر تمام سفارشات را به همراه اطلاعات مشتری انتخاب می کند:
SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
اجرای این دستور در پایگاه داده ی Northwind
مثال دوم - کد زیر سه جدول را با هم ادغام می کند؛ این کد تمام سفارشات را به همراه اطلاعات مشتری و اطلاعات ارسال کننده انتخاب می کند:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName FROM ((Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID) INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
اجرای این دستور در پایگاه داده ی Northwind
این دستور تمام ردیف ها را از جدول سمت چپ (جدول 1) انتخاب کرده و سپس ردیف های منطبق را از جدول سمت راست می گیرد. اگر هیچ مقدار منطبقی وجود نداشته باشد، نتیجه ی جدول سمت راست NULL خواهد بود.
این دستور دارای ساختار کلی زیر است:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
دستور LEFT JOIN تمام ردیف ها را از جدول سمت چپ انتخاب می کند، حتی اگر هیچ مقدار قابل انطباقی از جدول دیگر پیدا نشود.
نکته: در برخی از پایگاه های داده به جای دستور LEFT JOIN از LEFT OUTER JOIN استفاده می شود.
مثال: کد زیر تمام مشتری ها را به همراه سفارشات شان (اگر سفارشی داشته باشند) انتخاب می کند:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY Customers.CustomerName;
اجرای این دستور در پایگاه داده ی Northwind
این دستور تمام ردیف ها را از جدول سمت راست (جدول 2) انتخاب کرده و سپس ردیف های منطبق را از جدول سمت چپ می گیرد. اگر هیچ مقدار منطبقی وجود نداشته باشد، نتیجه ی جدول سمت چپ NULL خواهد بود.
این دستور دارای ساختار کلی زیر است:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
دستور RIGHT JOIN تمام ردیف ها را از جدول سمت راست انتخاب می کند، حتی اگر هیچ مقدار قابل انطباقی از جدول دیگر پیدا نشود.
نکته: در برخی از پایگاه های داده به جای دستور RIGHT JOIN
از RIGHT OUTER JOIN
استفاده می شود.
مثال: کد زیر تمام کارمندان را به همراه سفارشات شان (اگر سفارشی داشته باشند) انتخاب می کند:
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName FROM Orders RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID ORDER BY Orders.OrderID;
اجرای این دستور در پایگاه داده ی Northwind
اگر مقدار قابل انطباقی در جدول 1 یا 2 وجود داشته باشد تمام ردیف ها را بر میگرداند.
هشدار: دستور FULL OUTER JOIN می تواند result-set های بسیار بزرگی را برگرداند. هنگام استفاده از آن مراقب باشید.
این دستور دارای ساختار کلی زیر است:
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
دستور FULL OUTER JOIN تمام ردیف ها را از جدول سمت چپ به همراه تمام ردیف های جدول سمت راست را بر میگرداند. اگر ردیف هایی در جدول سمت چپ باشند که در جدول دیگر مقادیر قابل انطباقی نداشته باشند و یا بالعکس، باز هم نمایش داده می شوند.
ابتدا نگاهی به قسمتی از جدول Customers بیندازیم:
Country | PostalCode | City | Address | ContactName | CustomerName | CustomerID |
Germany | 12209 | Berlin | Obere Str. 57 | Maria Anders | Alfreds Futterkiste | 1 |
Mexico | 05021 | México D.F. | Avda. de la Constitución 2222 | Ana Trujillo | Ana Trujillo Emparedados y helados | 2 |
Mexico | 05023 | México D.F. | Mataderos 2312 | Antonio Moreno | Antonio Moreno Taquería | 3 |
و قسمتی از جدول Orders:
ShipperID | OrderDate | EmployeeID | CustomerID | OrderID |
3 | 1996-09-18 | 7 | 2 | 10308 |
1 | 1996-09-19 | 3 | 37 | 10309 |
2 | 1996-09-20 | 8 | 77 | 10310 |
مثال: کد زیر تمام مشتریان و تمام سفارشات را برمیگرداند:
SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName;
خروجی این کد بسیار بزرگ است. قسمتی از این خروجی به شکل زیر خواهد بود:
OrderID | CustomerName |
Alfreds Futterkiste | |
10308 | Ana Trujillo Emparedados y helados |
10365 | Antonio Moreno Taquería |
10382 | |
10351 |
قسمت هایی که خالی هستند، اشتباه تایپی نیستند. در این موارد سفارشی وجود نداشته است.
self JOIN در واقع یک JOIN معمولی است با این تفاوت که جدول با خودش ادغام می شود.
این دستور دارای ساختار کلی زیر است:
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
مثال: کد زیر مشتریانی را انتخاب می کند که از یک شهر باشند:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City FROM Customers A, Customers B WHERE A.CustomerID <> B.CustomerID AND A.City = B.City ORDER BY A.City;
اجرای این دستور در پایگاه داده ی Northwind
در این قسمت با انواع مختلف دستور JOIN آشنا شدیم که شامل INNER JOIN و LEFT JOIN و RIGHT JOIN و FULL JOIN و SELF JOIN بودند. سپس برای هر کدام مثال هایی زدیم تا جای اشتباه و شبهه باقی نماند. امیدوارم از این قسمت لذت برده باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.