top of page

Understanding SQL Union: A Beginner’s Guide to Merging Data Like a Pro

As a beginner to the world of SQL, it’s crucial to grasp the powerful tools at your disposal, one of them being the `UNION` operator. If you’re wondering how to efficiently combine rows from two or more queries into a single one, this is the guide you need. Let’s explore the ins and outs of the `UNION` operator in T-SQL, when to use it, and how it can be a game-changer in your database querying.

What is T-SQL Union?

In the realm of databases, especially T-SQL—a dialect of SQL used in Microsoft SQL Server—`UNION` operator is used as a binary operator that combines the results of two or more `SELECT` statements into a single result set. The key feature of `UNION` is that it removes duplicates from the combined result set, unless you use `UNION ALL`, which the result set includes all duplicates.

When To Use Union

Union is the go-to tool when you need to retrieve data from multiple tables or from the very same data type or the same table with different conditions. It efficiently merges datasets in a way that makes it appear as if they were a single dataset. Here are a few scenarios:


Fetching Similar Data: When you have related data dispersed across different tables with similar structures.


Consolidating Queries: If you need to run the same query with slight variations and combine the data, `UNION` helps maintain consistency.


Reporting: For tabulation and reporting purposes where the viewer shouldn’t see the source of data, or data aggregates from multiple datasets.

Union Best Practices

Adopting the best practices while using `UNION` can save you time and improve the quality of your queries. Here’s what to keep in mind:


Column Count and Types: The number of columns and their data types must match in the select lists of all the queries, which the `UNION` combines.


Column Names: The column names in the result sets you combine don’t have to match. However, it’s a good practice to use alias columns with identical names for clarity.


Sorting: If you want `UNION` to return the results in a specific order, use an outer query to sort the entire combined set, as `UNION` does not guarantee the order.


Use UNION ALL with Caution: If you need to include duplicates, use `UNION ALL`. It can be faster than `UNION`, which performs additional steps to remove duplicates.

Will Untion Remove duplicate rows

No, UNION does not remove duplicates two queries by default. However, if you want to remove duplicates, you can use UNION ALL, which includes all rows from the combined queries, including duplicates, and then use DISTINCT to eliminate duplicate rows.

Here’s an example:

SELECT column1, column2 FROM Table1
UNION
SELECT column1, column2 FROM Table2
 

This query will include all rows from both Table1 and Table2, including duplicates.

If you want to remove duplicates:

SELECT column1, column2 FROM Table1
UNION ALL
SELECT column1, column2 FROM Table2
 

This query will include all rows from both tables, including duplicates.

SELECT DISTINCT column1, column2 FROM (
    SELECT column1, column2 FROM Table1
    UNION ALL
    SELECT column1, column2 FROM Table2
) AS CombinedTables
 

This query uses UNION ALL to combine the results from both tables, including duplicates, and then uses DISTINCT to eliminate duplicate rows from two different tables in the combined result set.

Union Examples

Let’s explore some examples same order to understand `UNION` better.

Simple Union Query

Suppose you have a database track of various concerts and a separate one tracking musical festivals. You’ve been asked to provide a list of all events. As these are disparate event types, you can create a simple `UNION` query to merge and combine the result of two datasets:

SELECT event_name, event_date

FROM concerts

UNION

SELECT festival_name, festival_date

FROM festivals;

Here, it’s crucial that the `concerts` and `festivals` tables have the same number of columns in their `SELECT` queries, and the corresponding columns have the same number of data types.

Union with Aggregate

In another scenario, you might need to create a single dataset from the sales made in the Eastern and Western regions of a company. Using `UNION` with an aggregate function can help:

SELECT ‘East’ as region, SUM(sales_amount) as total_sales

FROM sales

WHERE region = ‘East’

UNION

SELECT ‘West’ as region, SUM(sales_amount) as total_sales

FROM sales

WHERE region = ‘West’;

“`

In this simple example, you’re selecting the region and the sum of sales for that region from the `sales` table. The `UNION` combines the results so you get a single line result showing the sales in East and West regions respectively.

Union can be a powerful tool when used correctly. By understanding its syntax and applications, you open the doors to more advanced database querying that can provide richer, more nuanced query results too. As with any tool, practice makes perfect, so put `UNION` to use in your T-SQL and watch as your data manipulation capabilities expand.

When using ORDER BY with a UNION operation in SQL, you need to make sure that the ORDER BY clause is placed at the end of the entire query, after all the UNION operations have been performed. Here’s union example of how you can use ORDER BY with UNION:

SELECT column1, column2 FROM Table1
UNION
SELECT column1, column2 FROM Table2
ORDER BY column1;
 

In this example, the ORDER BY clause is applied to the combined result set after the UNION operation has been performed. You can specify any column from the result set to sort the final output.

If you want to sort by different columns or apply different sorting orders following query, following example, to each part of the UNION, you can also use subqueries:

SELECT column1, column2 FROM (
    SELECT column1, column2 FROM Table1
    UNION
    SELECT column1, column2 FROM Table2
) AS CombinedTables
ORDER BY column1;
 

This query first performs the UNION operation within the subquery, then applies the ORDER BY clause to the combined result set.

Just remember that the ORDER BY clause should always appear at the end of the entire query, after any UNION operations and subqueries have been performed.

UNION ALL Operator

The UNION ALL operator in SQL is used to combine the results of two or more SELECT statements, including all rows from all two SELECT statements together, without removing duplicates. Unlike the UNION operator, which removes duplicate rows, UNION ALL retains all rows, including duplicates, from the combined result set.

Here’s the basic syntax of using UNION ALL:

SELECT column1, column2 FROM Table1
UNION ALL
SELECT column1, column2 FROM Table2;
 

In this following example:


The first SELECT statement retrieves rows from Table1.


The second SELECT statement retrieves rows from Table2.


UNION ALL combines the result sets of both SELECT statements, including duplicates.

It’s important to note that UNION ALL is typically faster than UNION, as it does not need to perform the extra step of removing duplicates.

Here’s an example of following examples of how you might use UNION ALL:

SELECT name, age FROM Students
UNION ALL
SELECT name, age FROM Teachers;
 

This query retrieves all names and ages from selected columns in both the Students and Teachers tables and combines them into a single result set without removing any duplicates.

What Is the Difference Between UNION and JOIN?

UNION and JOIN are both SQL operations used to combine data from single query into multiple tables, but they serve different purposes and have different behaviors.


UNION:


UNION is used to combine the results of two or more SELECT statements into a single result set.


The columns in each SELECT statement must match in number and data type.


UNION removes duplicate rows from the combined result set by default.


The order of rows in the final result set may not be guaranteed unless an ORDER BY clause is used.


UNION ALL is a variant of UNION that retains all rows from the combined result set, including duplicates.


JOIN:


JOIN is used to retrieve data from two or more tables based on a related column between them.


Different types of joins, such as INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN, dictate how the rows from the tables are combined.


Joins do not remove duplicates; they combine rows from multiple tables based on matching values in the specified columns.


The result set of a join operation can include columns from both tables, and additional filtering or sorting can be applied to the joined result set.

The Performance Expense of Sorting Data With UNION vs. UNION ALL

The performance difference between using UNION and UNION ALL primarily lies in the fact that UNION performs an additional step to remove duplicate values between rows, which can impact performance, especially if the result sets are large.

Here’s how the two operators differ in terms similar data types of performance:


UNION:


UNION removes duplicate rows from the combined result set.


To remove duplicates, SQL Server needs to perform a sorting operation internally, which can be resource-intensive, especially for large result sets.


Sorting involves comparing rows to identify and eliminate duplicates, which adds overhead to query execution time.


Therefore, UNION can be slower than UNION ALL, especially when dealing with large datasets or when sorting is computationally expensive.


UNION ALL:


UNION ALL simply combines the result sets from the individual SELECT statements without removing duplicates.


Since no sorting or duplicate removal is necessary, UNION ALL generally performs faster than UNION.


It’s a straightforward concatenation of result sets, without the additional overhead of duplicate removal.

In summary, if you’re certain that your result sets do not contain duplicates or if removing duplicates is not necessary for your query’s logic, using UNION ALL can provide better performance compared to UNION. However, if duplicate removal is required, you’ll need to use UNION, accepting the potential performance overhead associated with sorting.

How to use SQL Union with Group and Having clauses

To use the UNION operator with GROUP BY and HAVING clauses in SQL, you can follow these steps:


Write individual SELECT statements with the GROUP BY and HAVING clauses as needed.


Combine these SELECT statements using the UNION operator.


Optionally, apply any further filtering or ordering to the combined result set.

Here’s a basic example:

SELECT department, COUNT(*) AS total_employees
FROM employees
GROUP BY department
HAVING COUNT(*) > 5

UNION

SELECT 'Other', COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) <= 5;
 

In this example:


The first SELECT statement groups the employees by department and counts the number of employees in each department. The HAVING clause filters out departments with less than or equal to 5 employees.


The second SELECT statement counts the number of employees in departments with less than or equal to 5 employees and assigns them to the ‘Other’ category.


The UNION operator combines the results of both SELECT statements.


The combined result set will include the departments with more than 5 employees and a single row for the ‘Other’ category with the count of departments having 5 or fewer employees.

You can apply additional filtering, ordering, or other operations to the combined result set as needed.

Additional Resources

Get in Touch

Thanks for submitting!

bottom of page