The UNION operator in MySQL combines the result sets of two or more SELECT statements.
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; |
By default, the UNION operator selects only distinct values. To include duplicate values, use UNION ALL instead.
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; |
Note: The column names in the result set typically match the column names in the first SELECT statement.
In this tutorial, we’ll be working with the well-known Northwind sample database.
Here is a portion of the “Customers” table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And here is a portion of the “Suppliers” table:
SupplierID |
SupplierName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Exotic Liquid |
Charlotte Cooper |
49 Gilbert St. |
London |
EC1 4SD |
UK |
2 |
New Orleans Cajun Delights |
Shelley Burke |
P.O. Box 78934 |
New Orleans |
70117 |
USA |
3 |
Grandma Kelly’s Homestead |
Regina Murphy |
707 Oxford Rd. |
Ann Arbor |
48104 |
USA |
The following SQL statement retrieves the distinct cities from both the “Customers” and the “Suppliers” tables:
SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City; |
Note: If some customers or suppliers share the same city, each city will appear only once in the result because UNION selects only distinct values. To include duplicate values, use UNION ALL instead.
The following SQL statement retrieves the cities, including duplicate values, from both the “Customers” and the “Suppliers” table:
SELECT City FROM Customers UNION ALL SELECT City FROM Suppliers ORDER BY City; |
The following SQL statement retrieves distinct German cities from both the “Customers” and the “Suppliers” tables:
SELECT City, Country FROM Customers WHERE Country=‘Germany’ UNION SELECT City, Country FROM Suppliers WHERE Country=‘Germany’ ORDER BY City; |
The following SQL statement retrieves German cities, including duplicate values, from both the “Customers” and the “Suppliers” table:
SELECT City, Country FROM Customers WHERE Country=‘Germany’ UNION ALL SELECT City, Country FROM Suppliers WHERE Country=‘Germany’ ORDER BY City; |
The following SQL statement combines all customers and suppliers:
SELECT ‘Customer’ AS Type, ContactName, City, Country FROM Customers UNION SELECT ‘Supplier’, ContactName, City, Country FROM Suppliers; |
Notice the “AS Type” above – it serves as an alias. SQL aliases provide temporary names to tables or columns within a query. An alias exists only for the duration of the query. In this case, we’ve created a temporary column named “Type” to indicate whether the contact person is a “Customer” or a “Supplier”.