SQL1

       

UNION И УСТРАНЕНИЕ ДУБЛИКАТОВ


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, наподобие этого:

SELECT snum, city FROM Customers

UNION ALL

SELECT snum, city FROM Salespeople;



Содержание раздела