UNION будет автоматически исключать дубликаты строк из вывода. Это нечто несвойственное для SQL, так как одиночные запросы обычно содержат DISTINCT чтобы устранять дубликаты. Например запрос, чей вывод показывается в Рисунке 14.2,
SELECT snum, city
FROM Customers;
имеет двойную комбинацию значений ( snum=1001, city=London ), потому что мы не указали, чтобы SQL устранил дубликаты. Однако, если мы используем
=============== 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: Одиночный запрос с дублированным выводом
UNION в комбинации этого запроса с ему подобным в таблице Продавцов, то эта избыточная комбинация будет устранена.
Рисунок 14.3 показывает вывод следующего запроса.
SELECT snum, city
FROM Customers
UNION
SELECT snum, city
FROM Salespeople.;
=============== SQL Execution Log ============
| |
| FROM Customers |
| UNION |
| SELECT snum, sity |
| 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, наподобии этого: