SQL (تلفظ “ess-que-el”) مخفف Structured Query Language به معنای زبان پرسوجوی ساختیافته است. SQL برای برقراری ارتباط با یک دیتابیس یا پایگاه داده استفاده میشود. طبق گفتهی ANSI (موسسهی استاندارد ملی آمریکا)، SQL یک زبان استاندارد برای سیستم مدیریت پایگاه دادههای رابطه است. کوئریهای SQL برای انجام کارهایی مانند بروزرسانی یا بازیابی دادهها از یک پایگاه داده استفاده میشود. برخی از سیستمهای رایج مدیریت پایگاهدادههای رابطهای که از SQL استفاده میکنند عبارتند از: Oracle، Sybase، Microsoft SQL Server، Access، Ingres و …. اگرچه اکثر سیستمهای پایگاه داده از SQL استفاده میکنند، اما اکثر آنها دارای پسوندهای اختصاصی دیگری نیز هستند که معمولاً فقط در همان سیستمها استفاده میشود. با این وجود، با استفاده از دستورات استاندارد SQL مانند”Select” ،”Insert” ،”Update” ، “Delete”، “Create” و “Drop” میتوان اکثر کارهایی که برای ارتباط با پایگاه داده نیاز است را انجام داد. یکی دیگر از دستورات کاربردی و مهم SQL هنگام کار با جداول، دستور JOIN است که در ادامه این مقاله با آن آشنا میشویم.
در زبان SQL، از دستور JOIN به منظور پیوند و ترکیب ردیفهای دو یا چند جدول از طریق یک فیلد مشترک بین آنها، استفاده میشود. این دستور به ویژه هنگامی مفید است که میخواهید دادههای مرتبط را از بیش از یک جدول پرسوجو کرده و نتیجهی معناداری کسب کنید. گاهی اوقات، این روابط ممکن است آشکار نباشند، اما میتوان از طریق SQL و دستور JOIN آنها را به روشهای مختلفی ترکیب کرد و بر اساس شرایطی که شما آنها را تعیین میکنید، نتایج مختلفی از ادغام جداول استخراج کنید.
به طور کلی چهار نوع JOIN وجود دارد که عبارتند از:
تصویر زیر مفهوم انواع JOIN را به خوبی نشان میدهد.
برای توضیح مفهوم انواع JOIN جدولهای زیر را در نظر بگیرید.
Inner join سادهترین نوع JOIN است که در آن هر سطر در یک جدول با تمام سطرهای جدول دیگر مطابقت دارد. به عبارت دیگر در این نوع JOIN، عمل JOIN و ترکیب ردیف تنها زمانی انجام میشود که شرط JOIN(تطابق سطرهای جداول)، TRUE ارزیابی شود. برای مثال، اگر شما یک عمل Inner join روی جداول Employee و Projects انجام دهید، تنها تاپلهایی که دارای مقادیر مطابق در هر دو جدول هستند، به عنوان خروجی تحویل داده میشوند.
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
INNER JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
مثال:
SELECT Employee.EmpID, Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
INNER JOIN Projects ON Employee.EmpID=Projects.EmpID;
full outer join یا full join مجموعهای از نتایج را در بر میگیرد که شامل تمام ردیفهای همسان هر دو جدول، در صورت وجود، میباشد. در صورت عدم مطابقت، مقدار رکورد برابر با NULL خواهد بود.
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
FULL JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID
FROM Employee
FULL JOIN Projects
ON Employee.EmpID = Projects.EmpID;
LEFT JOIN یا LEFT OUTER JOIN همهی ردیفهای همسان از جدول سمت راست و همچنین همهی ردیفها و سطرهای غیر همسان از جدول سمت چپ را باز میگرداند. به عبارت دیگر LEFT JOIN تمامی رکوردهای جدول سمت چپ و همچنین آن دسته از رکوردهای جدول سمت راست که با جدول سمت چپ مطابقت دارند را برمیگرداند. همچنین برای ستونهای موجود در جدول سمت راست، در ردیفهایی که مطابق با شرایط JOIN نیستند، مقدار NULL بازگردانده میشود.
نکته: جدول سمت چپ و راست با نام جداول ذکر شده در سمت چپ و راست کلمهی کلیدی JOIN مشخص میشوند.
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
LEFT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
LEFT JOIN
ON Employee.EmpID = Projects.EmpID ;
RIGHT JOIN یا RIGHT OUTER JOIN همهی ردیفهای همسان از جدول سمت چپ و همچنین همهی ردیفها و سطرهای غیر همسان از جدول سمت راست را باز میگرداند. به عبارت دیگر RIGHT JOIN تمامی رکوردهای جدول سمت راست و همچنین آن دسته از رکوردهای جدول سمت چپ با که با جدول سمت راست مطابقت دارند را برمیگرداند. همچنین برای ستونهای موجود در جدول سمت چپ، در ردیفهایی که مطابق با شرایط JOIN نیستند، مقدار NULL بازگردانده میشود.
SELECT Table1.Column1,Table1.Column2,Table2.Column1,....
FROM Table1
RIGHT JOIN Table2
ON Table1.MatchingColumnName = Table2.MatchingColumnName;
مثال:
SELECT Employee.EmpFname, Employee.EmpLname, Projects.ProjectID, Projects.ProjectName
FROM Employee
RIGHT JOIN
ON Employee.EmpID = Projects.EmpID;
در ادامه به برخی از متداولترین سوالات درباره JOIN پاسخ میدهیم.
تفاوت اصلی Natural Join و Inner Join در تعداد ستونهای برگشتی است. به مثال زیر توجه کنید:
در مثال بالا، به وضوح مشخص است که تعداد ستونهای برگشت یافته از Inner Join بیشتر از تعداد ستونهای برگشت یافته از Natural Join است. بنابراین، اگر میخواهید یک خروجی، با تعداد ستونهای کمتر داشته باشید، میتوانید از Natural Join استفاده کنید.
پاسخ:
hash join نیز یکی از انواع join است که برای ترکیب جداول بزرگ یا در مواردی که کاربر میخواهد تا بیشتر سطرهای جدول پیوست شده مورد استفاده قرار گیرد، استفاده میشود.
Cross Join :Cross Join نوعی از Join است که در آن عمل Join هر سطر از جدول به هر سطر از جدول دیگر اعمال میشود. همچنین، وقتی از شرط WHERE استفاده میشود، این نوع از JOIN به عنوان یک عضو INNER رفتار میکند و وقتی شرط WHERE موجود نباشد، مانند یک Cartesian product(ضرب دکارتی) رفتار میکند.
جمعبندی:
برای پیوند جداول در SQL از دستور JOIN استفاده میشود. خروجی و نتیجهی این دستور که یک جدول مجزاست، در بسیاری موارد اطلاعات مفیدی در اختیار ما قرار میدهد.
امیدواریم که از مطالعهی این مقاله لذت برده باشید؛ خوشحال میشویم که نظرات خود را با ما به اشتراک بگذارید.