125 lines
4.6 KiB
Markdown
125 lines
4.6 KiB
Markdown
|
|
# SQL - UNIONS CLAUSE
|
|||
|
|
|
|||
|
|
The SQL UNION clause/operator is used to combine the results of two or more SELECT statements without returning any duplicate rows.
|
|||
|
|
|
|||
|
|
- While using this UNION clause, each SELECT statement must have:
|
|||
|
|
|
|||
|
|
- The same number of columns selected
|
|||
|
|
- The same number of column expressions
|
|||
|
|
- The same data type and
|
|||
|
|
- Have them in the same order
|
|||
|
|
|
|||
|
|
But they need not have to be in the same length.
|
|||
|
|
|
|||
|
|
_Example_
|
|||
|
|
|
|||
|
|
Consider the following two tables.
|
|||
|
|
|
|||
|
|
Table 1 − customers table is as follows:
|
|||
|
|
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
| id | name | age | address | salary |
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
|
|||
|
|
| 2 | Khilan | 25 | Delhi | 1500.00 |
|
|||
|
|
| 3 | kaushik | 23 | Kota | 2000.00 |
|
|||
|
|
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
|
|||
|
|
| 5 | Hardik | 27 | Bhopal | 8500.00 |
|
|||
|
|
| 6 | Komal | 22 | MP | 4500.00 |
|
|||
|
|
| 7 | Muffy | 24 | Indore | 10000.00 |
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
|
|||
|
|
Table 2 − orders table is as follows:
|
|||
|
|
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
| oid | date | customer_id | amount |
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
|
|||
|
|
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
|
|||
|
|
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
|
|||
|
|
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
|
|||
|
|
Now, let us join these two tables in our SELECT statement as follows:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
SELECT id, name, amount, date
|
|||
|
|
FROM customer
|
|||
|
|
LEFT JOIN orders
|
|||
|
|
ON customers.id = orders.customer_id
|
|||
|
|
UNION
|
|||
|
|
SELECT id, name, amount, date
|
|||
|
|
FROM customer
|
|||
|
|
RIGHT JOIN orders
|
|||
|
|
ON customers.id = orders.customer_id
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
This would produce the following result:
|
|||
|
|
|
|||
|
|
### The UNION ALL Clause
|
|||
|
|
The UNION ALL operator is used to combine the results of two SELECT statements including duplicate rows.
|
|||
|
|
|
|||
|
|
The same rules that apply to the UNION clause will apply to the UNION ALL operator.
|
|||
|
|
|
|||
|
|
_Example_ -
|
|||
|
|
Consider the following two tables:
|
|||
|
|
|
|||
|
|
* Table 1 − customers table is as follows:
|
|||
|
|
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
| id | name | age | address | salary |
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
|
|||
|
|
| 2 | Khilan | 25 | Delhi | 1500.00 |
|
|||
|
|
| 3 | kaushik | 23 | Kota | 2000.00 |
|
|||
|
|
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
|
|||
|
|
| 5 | Hardik | 27 | Bhopal | 8500.00 |
|
|||
|
|
| 6 | Komal | 22 | MP | 4500.00 |
|
|||
|
|
| 7 | Muffy | 24 | Indore | 10000.00 |
|
|||
|
|
+----+----------+-----+-----------+----------+
|
|||
|
|
|
|||
|
|
* Table 2 − orders table is as follows:
|
|||
|
|
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
| oid | date | customer_id | amount |
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
| 102 | 2009-10-08 00:00:00 | 3 | 3000 |
|
|||
|
|
| 100 | 2009-10-08 00:00:00 | 3 | 1500 |
|
|||
|
|
| 101 | 2009-11-20 00:00:00 | 2 | 1560 |
|
|||
|
|
| 103 | 2008-05-20 00:00:00 | 4 | 2060 |
|
|||
|
|
+-----+---------------------+-------------+--------+
|
|||
|
|
|
|||
|
|
Now, let us join these two tables in our SELECT statement as follows :
|
|||
|
|
```sql
|
|||
|
|
SELECT id, name, amount, date
|
|||
|
|
FROM customers
|
|||
|
|
LEFT JOIN orders
|
|||
|
|
ON customers.id = order.customer_id
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT id, name, amount, date
|
|||
|
|
FROM customers
|
|||
|
|
RIGHT JOIN orders
|
|||
|
|
ON customers.id = orders.customer_id;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
This would produce the following result:
|
|||
|
|
|
|||
|
|
+------+----------+--------+---------------------+
|
|||
|
|
| id | name | amount | date |
|
|||
|
|
+------+----------+--------+---------------------+
|
|||
|
|
| 1 | Ramesh | NULL | NULL |
|
|||
|
|
| 2 | Khilan | 1560 | 2009-11-20 00:00:00 |
|
|||
|
|
| 3 | kaushik | 3000 | 2009-10-08 00:00:00 |
|
|||
|
|
| 3 | kaushik | 1500 | 2009-10-08 00:00:00 |
|
|||
|
|
| 4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
|
|||
|
|
| 5 | Hardik | NULL | NULL |
|
|||
|
|
| 6 | Komal | NULL | NULL |
|
|||
|
|
| 7 | Muffy | NULL | NULL |
|
|||
|
|
| 3 | kaushik | 3000 | 2009-10-08 00:00:00 |
|
|||
|
|
| 3 | kaushik | 1500 | 2009-10-08 00:00:00 |
|
|||
|
|
| 2 | Khilan | 1560 | 2009-11-20 00:00:00 |
|
|||
|
|
| 4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
|
|||
|
|
+------+----------+--------+---------------------+
|
|||
|
|
|
|||
|
|
Note : **There are two other clauses (i.e., operators), which are like the UNION clause.**
|