JOIN دستور
- دستور JOIN با هدف ترکیب دو یا چند جدول مورد استفاده قرار میگیرد.
- دقت کنید برای اینکه بتوانیم جداول را با هم JOIN بزنیم حتما باید آن جداول یک ستون مشترک داشته باشند تا ادغام جداول از طریق آن ستون های مشترک صورت بگیرد.
- مثال:
تصور کنید جدولی با نام Products و ستون های ProductID, ProductName داشته باشیم.
همچنین جدول دیگری با نام Sellers و ستون های SellerID, ProductID, City نیز داشته باشیم.
حالا اگر بخواهیم مشخصات فروشنده ها همراه با کالاهایی که میفروشند داشته باشیم میتوانیم این دو جدول را ادغام کنیم.
SELECT S.SellerID, P.ProductID, P.ProductName, S.City FROM Products AS P JOIN Sellers AS S ON P.ProductID=S.ProductID
خروجی این کوئری یک جدول با ستون های SellerID, ProductID, ProductName, City خواهد بود.
جدول Products
ProductName | ProductID |
---|---|
TV | 4433 |
Shoes | 8899 |
Mobile | 4155 |
Mobile | 7556 |
LapTop | 7889 |
Shoes | 7455 |
جدول Sellers
City | ProductID | SellerID |
---|---|---|
Tehran | 5486 | 1006571 |
Tehran | 8899 | 1000897 |
Isfahan | 4155 | 1005465 |
Yazd | 7556 | 1001849 |
Tehran | 7889 | 1000654 |
Kerman | 7455 | 1006588 |
نتیجه:
City | ProductName | ProductID | SellerID |
---|---|---|---|
Tehran | Shoes | 8899 | 1000897 |
Isfahan | Mobile | 4155 | 1005465 |
Yazd | Mobile | 7556 | 1001849 |
Tehran | LapTop | 7889 | 1000654 |
Kerman | Shoes | 7455 | 1006588 |
بر روی سه جدول JOIN
- در این مثال ابتدا با استفاده از دستور SELECT ستون هایی که قصد چاپ آن ها را داریم مشخص میکنیم.
- دقت کنید نام جدول را قبل از نام ستون ذکر کنید مثلا Orders.OrderID یعنی انتخاب ستون OrderID موجود در جدول Orders
- سپس در قسمت FROM سه جدول را JOIN زدیم.
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName FROM ((Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID) JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID)
- JOIN انواع مختلفی دارد از جمله: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN که در ادامه بیشتر با آن ها آشنا میشویم.
INNER JOIN
- در این حالت سطرهایی از دو جدول که با یکدیگر اشتراک دارند به عنوان خروجی چاپ میشوند.
- نحوه استفاده از INNER JOIN:
براساس Syntax پیش رو table1 و table2 در سطرهایی ادغام میشوند که مقدار column_name در هر دو جدول یکسان باشد.
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name
مثال:
در نمونه پیش رو روی دو جدول Products و Sellers ادغام انجام دادیم. این دو جدول یک ستون به نام ProductID دارند و سطرهایی از هر دو جدول که ProductID یکسان دارند با یکدیگر ادغام شده و جدول جدید نمایش داده میشود.
SELECT S.SellerID, P.ProductID, P.ProductName, S.City FROM Products AS P INNER JOIN Sellers AS S ON P.ProductID=S.ProductID
LEFT JOIN
- در این نوع از JOIN تمام مقادیر جدول سمت چپ در نتیجه قرار میگیرند اما تنها مقادیری از جدول سمت راست در جدول نهایی چاپ میشوند که مقدار یکسانی با جدول سمت چپ در ستون مشابه داشته باشد.
- در مواردی که جدول سمت چپ و راست اشتراکی ندارند مقادیر جدول چپ در جدول نهایی درج شده و بجای مقادیر ناموجود جدول سمت راست نیز NULL درج میشود.
- Syntax مربوط به استفاده از LEFT JOIN:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name
مثال:
در این مثال دو جدول Sellers و Products بر روی ستون مشترک ProductID ادغام میشوند و در نهایت تمامی سطرهای جدول Products در نتیجه نهایی چاپ میشوند و از جدول سمت راست نیز فقط مقادیری که ProductID مشترک با ProductID جدول Products دارند در جدول نهایی درج میشوند و به ازای مقادیر ناموجودشان نیز مقدار NULL درنظر گرفته خواهد شد.
SELECT S.SellerID, P.ProductID, P.ProductName, S.City FROM Products AS P LEFT JOIN Sellers AS S ON P.ProductID=S.ProductID
نتیجه:
City | ProductName | ProductID | SellerID |
---|---|---|---|
NULL | TV | 4433 | NULL |
Tehran | Shoes | 8899 | 1000897 |
Isfahan | Mobile | 4155 | 1005465 |
Yazd | Mobile | 7556 | 1001849 |
Tehran | LapTop | 7889 | 1000654 |
Kerman | Shoes | 7455 | 1006588 |
RIGHT JOIN
- در این مورد نیز تمام مقادیر جدول سمت راست همراه با مقادیر مشترک از جدول سمت چپ در نتیجه قرار میگیرند.
- بجای مقادیر نامشترک از جدول سمت چپ نیز مقدار NULL درج میشود.
- طرز استفاده از دستور RIGHT JOIN:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
مثال:
SELECT S.SellerID, P.ProductID, P.ProductName, S.City FROM Products AS P LEFT JOIN Sellers AS S ON P.ProductID=S.ProductID
نتیجه:
City | ProductName | ProductID | SellerID |
---|---|---|---|
Tehran | Shoes | 8899 | 1000897 |
Isfahan | Mobile | 4155 | 1005465 |
Yazd | Mobile | 7556 | 1001849 |
Tehran | LapTop | 7889 | 1000654 |
Kerman | Shoes | 7455 | 1006588 |
FULL JOIN
- در این نوع از ادغام تمام مقادیر از دو جدول در نتیجه نهایی قرار میگیرند و در مواردی که اشتراکی با یکدیگر نداشته باشند مقدار NULL جایگزین مقادیر نامشترک خواهد شد.
SELECT column_name(s) FROM table1 FULL JOIN table2 ON table1.column_name = table2.column_name WHERE condition
SELF JOIN
- تفاوت این دستور با دستورات join که تا الان معرفی کردیم در این است که تمامی دستورات معرفی شده هدفشان ادغام دو جدول متفاوت است اما این دستور برای ادغام مقادیر موجود در یک جدول مورد استفاده قرار میگیرد.
- کاربرد دستور SELF JOIN بیشتر مقایسه مقادیر موجود در یک جدول است.
- syntax استفاده از SELF JOIN:
در دستور نمایش داده شده یک یا چند ستون بخصوص (column_name) از جدول table1 با یکدیگر ادغام شدند.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition
جدول Customers
CustomerID | CustomerName | City | PostalCode | Country |
---|---|---|---|---|
4568 | Maryam | Tehran | 12209 | Iran |
4558 | Ali | Tehran | 05021 | Iran |
6587 | Zahra | Tabriz | 05023 | Iran |
مثال:
- در مثال زیر به جدول Customers یکبار نام مستعار A و یکبار هم نام مستعار B اختصاص داده شده است.
- سپس مقادیر ستون CustomerName یکبار از جدول A با نام CustomerName1 و یکبار هم از جدول B با نام CustomerName2 واکشی شده است.
- در نهایت CustomerNameهایی که نام شهرشان یکسان است اما CustomerID متفاوتی دارند در کنار یکدیگر قرار گرفتند.
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City FROM Customers AS A, Customers AS B WHERE A.CustomerID <> B.CustomerID AND A.City = B.City ORDER BY A.City;55
CustomerName1 | CustomerName2 | City |
---|---|---|
Zahra | NULL | Tabriz |
Maryam | Ali | Tehran |