SQL UNION Operator
The SQL UNION
operator is used to combine the result sets of two or more SELECT
queries into a single result set. Each query within the UNION
must have the same number of columns in the same order, and the columns must have compatible data types.
The UNION
operator removes duplicate records by default. To include duplicates, use the UNION ALL
operator.
In this tutorial, we will go through SQL UNION Operator, its syntax, and how to use this operator in SQL statements, with the help of well detailed examples.
Syntax of SQL UNION Operator
The basic syntax of the SQL UNION
operator is as follows:
SELECT column1, column2, ...
FROM table1
[WHERE condition]
UNION
SELECT column1, column2, ...
FROM table2
[WHERE condition];
Each part of this syntax has a specific purpose:
- SELECT column1, column2, …: Specifies the columns to retrieve from each table.
- FROM table1 and FROM table2: Specifies the tables from which to retrieve data.
- WHERE condition (optional): Filters rows in each table before applying
UNION
. - UNION: Combines the results of the two queries, removing duplicates by default.
Step-by-Step Examples with MySQL
We’ll go through various examples demonstrating the UNION
operator in MySQL. Using MySQL 8.0 with MySQL Workbench, we’ll use sample students
and alumni
tables with fields id
, name
, age
, and locality
.
Setup for Examples: Creating the Database and Tables
1. Open MySQL Workbench and create a new database:
CREATE DATABASE school;
2. Select the school
database:
USE school;
3. Create a students
table:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
locality VARCHAR(50)
);
4. Create an alumni
table with similar structure:
CREATE TABLE alumni (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
locality VARCHAR(50)
);
5. Insert sample data into the students
and alumni
tables:
INSERT INTO students (name, age, locality)
VALUES
('Alice', 14, 'Northside'),
('Bob', 15, 'Westend'),
('Charlie', 14, 'Northside');
INSERT INTO alumni (name, age, locality)
VALUES
('David', 16, 'Southend'),
('Eva', 15, 'Westend'),
('Alice', 14, 'Northside');
Examples: Using UNION Operator in Queries
Now, let’s explore different scenarios of using the UNION
operator with these tables.
1. Combining All Students and Alumni Names
To retrieve a list of names from both the students
and alumni
tables, eliminating duplicates:
SELECT name FROM students
UNION
SELECT name FROM alumni;
This query returns a unique list of names from both tables, including students and alumni but without duplicates.
2. Combining Data and Keeping Duplicates with UNION ALL
To include duplicate names in the combined list:
SELECT name FROM students
UNION ALL
SELECT name FROM alumni;
This query returns all names from both tables, including any duplicates.
3. Combining Tables with Additional WHERE Clauses
To retrieve names of students and alumni from “Westend” locality only:
SELECT name FROM students
WHERE locality = 'Westend'
UNION
SELECT name FROM alumni
WHERE locality = 'Westend';
This query filters both tables to include only those records where locality is “Westend”, combining results without duplicates.
Reference: SQL WHERE Clause
4. Combining and Renaming Columns in Results
To retrieve names and ages from both tables, renaming the column as “student_age”:
SELECT name, age AS student_age FROM students
UNION
SELECT name, age AS student_age FROM alumni;
This query retrieves names and ages from both tables, with the age column consistently labeled as “student_age” in the combined result set.
FAQs for SQL UNION
1. What does the SQL UNION operator do?
The UNION
operator combines the results of two or more SELECT
queries, returning a unique set of records by default.
2. How is UNION different from UNION ALL?
UNION
removes duplicates from the combined result set, while UNION ALL
includes all duplicates.
3. Can I use UNION with different columns in each query?
No, each query in a UNION
must return the same number of columns in the same order and with compatible data types.
4. Does UNION include NULL values?
Yes, UNION
includes NULL
values in the result set, treating them as valid entries.
5. Can UNION be used with WHERE conditions?
Yes, you can use WHERE
conditions in each individual query before applying the UNION
operator.