UNION будет автоматически исключать дубликаты строк из вывода. Это нечто несвойственное для SQL, так как одиночные запросы обычно содержат DISTINCT, чтобы устранять дубликаты. Например, запрос, чей вывод показывается в Рисунке 14.2,
SELECT snum, city
FROM Customers;
имеет двойную комбинацию значений (snum=1001, city='London'), потому что мы не указали, чтобы SQL устранил дубликаты. Однако, если мы используем UNION в комбинации этого запроса с ему подобным в таблице Продавцов, то эта избыточная комбинация будет устранена. Рисунок 14.3 показывает вывод следующего запроса.
SELECT snum, city
FROM Customers
UNION
SELECT snum, city
FROM Salespeople;
=============== SQL Execution Log ============
| SELECT snum, city |
| FROM Customers; |
| ============================================= |
| snum city |
| ----- -------- |
| 1001 London |
| 1003 Rome |
| 1002 San Jose |
| 1002 Berlin |
| 1001 London |
| 1004 Rome |
| 1007 San Jose |
===============================================
Рисунок 14.2. Одиночный запрос с дублированным выводом.
=============== SQL Execution Log ============
| FROM Customers |
| UNION |
| SELECT snum, city |
| FROM Salespeople; |
| ============================================= |
| |
| ----- -------- |
| 1001 London |
| 1002 Berlin |
| 1007 San Jose |
| 1007 New York |
| 1003 Rome |
| 1001 London |
| 1003 Rome |
| 1002 Barcelona |
| 1007 San Jose |
===============================================
Рисунок 14.3. UNION устраняет двойной вывод.
Вы можете получить нечто похожее в некоторых программах SQL, используя UNION ALL вместо просто оператора UNION, наподобие этого:
SELECT snum, city
FROM Customers
UNION ALL
SELECT snum, city
FROM Salespeople;