اجتماع و اشتراک مجموعهها در پایگاه داده
اجتماع (Join) و اشتراک (Union) دو مفهوم مهم در پایگاه داده هستند که برای ترکیب دادهها از جداول مختلف استفاده میشوند. در ادامه به توضیح هر یک میپردازیم:
1. اجتماع (Join)
اجتماع عملیاتی است که برای ترکیب رکوردهای دو یا چند جدول بر اساس یک شرط مشترک استفاده میشود. انواع مختلفی از Join وجود دارد:
- Inner Join: فقط رکوردهایی که در هر دو جدول مطابقت داشته باشند را برمیگرداند.
- Left Join (یا Left Outer Join): تمام رکوردهای جدول سمت چپ و رکوردهای مطابقتدار از جدول سمت راست را برمیگرداند. اگر مطابقتی وجود نداشته باشد، مقادیر سمت راست
NULLخواهند بود. - Right Join (یا Right Outer Join): تمام رکوردهای جدول سمت راست و رکوردهای مطابقتدار از جدول سمت چپ را برمیگرداند. اگر مطابقتی وجود نداشته باشد، مقادیر سمت چپ
NULLخواهند بود. - Full Join (یا Full Outer Join): تمام رکوردهای هر دو جدول را برمیگرداند. اگر در یکی از جداول مطابقتی وجود نداشته باشد، مقادیر مربوطه
NULLخواهند بود. - Cross Join: هر رکورد از جدول اول را با هر رکورد از جدول دوم ترکیب میکند (حاصلضرب دکارتی).
مثال:
SELECT Employees.Name, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
2. اشتراک (Union)
اشتراک عملیاتی است که برای ترکیب نتایج دو یا چند query استفاده میشود. شرط اصلی این است که تعداد و نوع ستونهای بازگشتی از هر query باید یکسان باشد. Union به طور پیشفرض مقادیر تکراری را حذف میکند، اما اگر بخواهید مقادیر تکراری نیز حفظ شوند، از UNION ALL استفاده میکنید.
مثال:
SELECT Name FROM Employees
UNION
SELECT Name FROM Managers;
در این مثال، نامهای تمام کارمندان و مدیران که در دو جدول مختلف هستند، ترکیب شده و به عنوان یک لیست واحد بازگردانده میشوند.
تفاوتهای کلیدی:
- Join: برای ترکیب رکوردها از جداول مختلف بر اساس یک شرط مشترک استفاده میشود.
- Union: برای ترکیب نتایج دو یا چند query استفاده میشود و تعداد و نوع ستونها باید یکسان باشد.
این مفاهیم در مدیریت و کار با پایگاههای داده رابطهای (Relational Databases) بسیار پرکاربرد هستند.
Union All
UNION ALL یک عملگر در SQL است که برای ترکیب نتایج دو یا چند query استفاده میشود. برخلاف UNION که مقادیر تکراری را حذف میکند، UNION ALL تمام رکوردها را بدون حذف مقادیر تکراری برمیگرداند. این باعث میشود که UNION ALL عملکرد سریعتری نسبت به UNION داشته باشد، زیرا نیازی به بررسی و حذف مقادیر تکراری نیست.
ویژگیهای UNION ALL:
- حفظ مقادیر تکراری: تمام رکوردها از تمام queryها را بدون حذف مقادیر تکراری برمیگرداند.
- عملکرد سریعتر: چون نیازی به بررسی تکراری بودن رکوردها نیست، سریعتر از
UNIONعمل میکند. - تعداد و نوع ستونها: تعداد و نوع ستونهای بازگشتی از هر query باید یکسان باشد.
مثال:
فرض کنید دو جدول داریم: Employees و Managers. هر دو جدول دارای ستون Name هستند و میخواهیم لیستی از تمام نامها از هر دو جدول داشته باشیم، حتی اگر برخی نامها تکراری باشند.
SELECT Name FROM Employees
UNION ALL
SELECT Name FROM Managers;
در این مثال، تمام نامهای موجود در جدول Employees و Managers بدون حذف مقادیر تکراری ترکیب میشوند.
تفاوت UNION و UNION ALL:
UNION: مقادیر تکراری را حذف میکند.UNION ALL: مقادیر تکراری را حفظ میکند.
مثال تفاوت:
-- با استفاده از UNION
SELECT Name FROM Employees
UNION
SELECT Name FROM Managers;
-- با استفاده از UNION ALL
SELECT Name FROM Employees
UNION ALL
SELECT Name FROM Managers;
در حالت UNION، اگر نام “John” هم در جدول Employees و هم در جدول Managers وجود داشته باشد، فقط یک بار در خروجی نمایش داده میشود. اما در حالت UNION ALL، نام “John” دو بار در خروجی نمایش داده میشود.
کاربرد UNION ALL:
- زمانی که میخواهید تمام رکوردها را بدون حذف مقادیر تکراری ترکیب کنید.
- زمانی که عملکرد سریعتر مهم است و نیازی به حذف مقادیر تکراری ندارید.
این عملگر در بسیاری از سناریوهای عملی، مانند گزارشگیری و تجمیع دادهها از منابع مختلف، بسیار مفید است.
Intersect یعنیچه؟
INTERSECT یک عملگر در SQL است که برای بازگرداندن رکوردهای مشترک بین دو یا چند query استفاده میشود. به عبارت دیگر، INTERSECT فقط رکوردهایی را برمیگرداند که در نتایج تمام queryهای مشخص شده وجود داشته باشند.
ویژگیهای INTERSECT:
- رکوردهای مشترک: فقط رکوردهایی که در تمام queryها وجود دارند را برمیگرداند.
- تعداد و نوع ستونها: تعداد و نوع ستونهای بازگشتی از هر query باید یکسان باشد.
- حذف مقادیر تکراری: مانند
UNION،INTERSECTنیز مقادیر تکراری را حذف میکند.
مثال:
فرض کنید دو جدول داریم: Employees و Managers. هر دو جدول دارای ستون Name هستند و میخواهیم لیستی از نامهایی داشته باشیم که هم در جدول Employees و هم در جدول Managers وجود دارند.
SELECT Name FROM Employees
INTERSECT
SELECT Name FROM Managers;
در این مثال، فقط نامهایی که هم در جدول Employees و هم در جدول Managers وجود دارند، بازگردانده میشوند.
تفاوت INTERSECT با UNION و UNION ALL:
UNION: تمام رکوردها از تمام queryها را ترکیب میکند و مقادیر تکراری را حذف میکند.UNION ALL: تمام رکوردها از تمام queryها را ترکیب میکند و مقادیر تکراری را حفظ میکند.INTERSECT: فقط رکوردهای مشترک بین تمام queryها را برمیگرداند.
مثال تفاوت:
-- با استفاده از UNION
SELECT Name FROM Employees
UNION
SELECT Name FROM Managers;
-- با استفاده از UNION ALL
SELECT Name FROM Employees
UNION ALL
SELECT Name FROM Managers;
-- با استفاده از INTERSECT
SELECT Name FROM Employees
INTERSECT
SELECT Name FROM Managers;
- در حالت
UNION، تمام نامهای منحصر به فرد از هر دو جدول ترکیب میشوند. - در حالت
UNION ALL، تمام نامها از هر دو جدول، حتی اگر تکراری باشند، ترکیب میشوند. - در حالت
INTERSECT، فقط نامهایی که در هر دو جدول وجود دارند، بازگردانده میشوند.
کاربرد INTERSECT:
- زمانی که میخواهید رکوردهای مشترک بین دو یا چند مجموعه داده را پیدا کنید.
- در سناریوهایی مانند مقایسه دادهها از منابع مختلف یا یافتن اشتراکهای بین جداول مختلف.
این عملگر در بسیاری از سناریوهای عملی، مانند تحلیل دادهها و گزارشگیری، بسیار مفید است.
Except چیست؟
EXCEPT یک عملگر در SQL است که برای بازگرداندن رکوردهای منحصر به فرد از query اول که در query دوم وجود ندارند، استفاده میشود. به عبارت دیگر، EXCEPT تفاوت بین دو مجموعه داده را برمیگرداند و فقط رکوردهایی را شامل میشود که در query اول وجود دارند اما در query دوم وجود ندارند.
ویژگیهای EXCEPT:
- رکوردهای منحصر به فرد: فقط رکوردهایی که در query اول وجود دارند اما در query دوم وجود ندارند را برمیگرداند.
- تعداد و نوع ستونها: تعداد و نوع ستونهای بازگشتی از هر query باید یکسان باشد.
- حذف مقادیر تکراری: مانند
UNIONوINTERSECT،EXCEPTنیز مقادیر تکراری را حذف میکند.
مثال:
فرض کنید دو جدول داریم: Employees و Managers. هر دو جدول دارای ستون Name هستند و میخواهیم لیستی از نامهایی داشته باشیم که در جدول Employees وجود دارند اما در جدول Managers وجود ندارند.
SELECT Name FROM Employees
EXCEPT
SELECT Name FROM Managers;
در این مثال، فقط نامهایی که در جدول Employees وجود دارند اما در جدول Managers وجود ندارند، بازگردانده میشوند.
تفاوت EXCEPT با UNION، UNION ALL و INTERSECT:
UNION: تمام رکوردها از تمام queryها را ترکیب میکند و مقادیر تکراری را حذف میکند.UNION ALL: تمام رکوردها از تمام queryها را ترکیب میکند و مقادیر تکراری را حفظ میکند.INTERSECT: فقط رکوردهای مشترک بین تمام queryها را برمیگرداند.EXCEPT: فقط رکوردهایی که در query اول وجود دارند اما در query دوم وجود ندارند را برمیگرداند.
مثال تفاوت:
-- با استفاده از UNION
SELECT Name FROM Employees
UNION
SELECT Name FROM Managers;
-- با استفاده از UNION ALL
SELECT Name FROM Employees
UNION ALL
SELECT Name FROM Managers;
-- با استفاده از INTERSECT
SELECT Name FROM Employees
INTERSECT
SELECT Name FROM Managers;
-- با استفاده از EXCEPT
SELECT Name FROM Employees
EXCEPT
SELECT Name FROM Managers;
- در حالت
UNION، تمام نامهای منحصر به فرد از هر دو جدول ترکیب میشوند. - در حالت
UNION ALL، تمام نامها از هر دو جدول، حتی اگر تکراری باشند، ترکیب میشوند. - در حالت
INTERSECT، فقط نامهایی که در هر دو جدول وجود دارند، بازگردانده میشوند. - در حالت
EXCEPT، فقط نامهایی که در جدولEmployeesوجود دارند اما در جدولManagersوجود ندارند، بازگردانده میشوند.
کاربرد EXCEPT:
- زمانی که میخواهید رکوردهای منحصر به فرد یک مجموعه داده را نسبت به مجموعه داده دیگر پیدا کنید.
- در سناریوهایی مانند مقایسه دادهها از منابع مختلف یا یافتن تفاوتهای بین جداول مختلف.
این عملگر در بسیاری از سناریوهای عملی، مانند تحلیل دادهها، گزارشگیری و اشکالزدایی دادهها، بسیار مفید است.
دیدگاه شما