مثال جامع و تخصصی استفاده از SQL Union
در نظر بگیرید که دو جدول به نام Employees و Departments در پایگاه داده خود دارید. جدول Employees شامل ستونهای EmployeeID، FirstName، LastName و DepartmentID است. جدول Departments شامل ستونهای DepartmentID، DepartmentName و ManagerID است.
هدف شما نمایش لیستی از تمام کارمندان به همراه نام دپارتمان و نام سرپرست آن دپارتمان است.
در اینجا یک پرس و جوی SQL با استفاده از UNION برای دستیابی به این هدف ارائه میشود:
SQL
SELECT
EmployeeID,
CONCAT(FirstName, ' ', LastName) AS FullName,
COALESCE(DepartmentName, 'N/A') AS DepartmentName,
COALESCE(ManagerName, 'N/A') AS ManagerName
FROM Employees
INNER JOIN Departments
ON Employees.DepartmentID = Departments.DepartmentID
UNION
SELECT
EmployeeID,
CONCAT(FirstName, ' ', LastName) AS FullName,
'N/A' AS DepartmentName,
'N/A' AS ManagerName
FROM Employees
WHERE DepartmentID IS NULL;
توضیح:
- این پرس و جو از دو بخش تشکیل شده است که با
UNIONبه هم متصل شدهاند. - بخش اول:
- اطلاعات مربوط به کارمندانی که در یک دپارتمان هستند را انتخاب میکند.
- از
INNER JOINبرای پیوستن به جداولEmployeesوDepartmentsبر اساس ستونDepartmentIDاستفاده میکند. - از
CONCATبرای ترکیب نام و نام خانوادگی کارمندان در ستونFullNameاستفاده میکند. - از
COALESCEبرای جایگزینی مقادیرNULLدر ستونهایDepartmentNameوManagerNameبا مقادیر پیشفرض “N/A” استفاده میکند.
- بخش دوم:
- اطلاعات مربوط به کارمندانی که در هیچ دپارتمانی نیستند را انتخاب میکند.
- از
WHEREclause برای انتخاب کارمندانی کهDepartmentIDآنهاNULLاست استفاده میکند. - مقادیر “N/A” را به طور مستقیم به ستونهای
DepartmentNameوManagerNameاختصاص میدهد.
- ستونهای
EmployeeIDوFullNameدر هر دو بخش انتخاب میشوند.
نکات:
- این پرس و جو به طور واضح و خوانا با استفاده از نامهای کامل توابع و کلمات کلیدی نوشته شده است.
- از
COALESCEبه جایCASEبرای جایگزینی مقادیرNULLبه روشی سادهتر استفاده شده است. - از
CONCATبه جای علامت “+” برای ترکیب نام و نام خانوادگی کارمندان در ستونFullNameاستفاده شده است. - پرس و جو به طور کامل با توضیحات و تفاسیر ارائه شده است.
نتیجه:
این پرس و جو خروجی زیر را برمیگرداند:
| EmployeeID | FullName | DepartmentName | ManagerName |
|---|---|---|---|
| 1 | John Doe | Sales | Jane Smith |
| 2 | Jane Doe | Marketing | Peter Jones |
| 3 | Peter Jones | Marketing | Peter Jones |
| 4 | David Williams | N/A | N/A |
| 5 | Mary Brown | N/A | N/A |
همانطور که مشاهده میکنید، UNION به شما امکان میدهد دو یا چند پرس و جو را به هم متصل کنید و نتایج را در یک ردیف نمایش دهید. این میتواند برای ترکیب دادهها از چندین منبع مفید باشد.
مثالهای دیگر:
- میتوانید از
UNION ALLبه جایUNIONاستفاده کنید تا ردیفهای تکراری را نیز شامل شود. - میتوانید از
ORDER BYclause برای مرتبسازی نتایج استفاده کنید. - میتوانید از
LIMITclause برای محدود کردن تعداد ردیفهای برگشتی استفاده کنید.
منابع:
- https://learn.microsoft.com/en-us/sql/ssms/visual-db-tools/create-union-queries-visual-database-tools?view=sql-server-ver16
- https://www.w3schools.com/sql/sql_ref_union.asp
- https://www.simplilearn.com/tutorials/sql-tutorial



