مثال جامع و تخصصی استفاده از 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” استفاده میکند.
- بخش دوم:
- اطلاعات مربوط به کارمندانی که در هیچ دپارتمانی نیستند را انتخاب میکند.
- از
WHERE
clause برای انتخاب کارمندانی که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 BY
clause برای مرتبسازی نتایج استفاده کنید. - میتوانید از
LIMIT
clause برای محدود کردن تعداد ردیفهای برگشتی استفاده کنید.
منابع:
- 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