اجتماع و اشتراک مجموعهها در پایگاه داده
اجتماع (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
:
- زمانی که میخواهید رکوردهای منحصر به فرد یک مجموعه داده را نسبت به مجموعه داده دیگر پیدا کنید.
- در سناریوهایی مانند مقایسه دادهها از منابع مختلف یا یافتن تفاوتهای بین جداول مختلف.
این عملگر در بسیاری از سناریوهای عملی، مانند تحلیل دادهها، گزارشگیری و اشکالزدایی دادهها، بسیار مفید است.
دیدگاه شما