Основы SQL


ВНЕШНЕЕ ОБЪЕДИНЕНИЕ - часть 3


UNION

SELECT snum, city, 'SALESPERSON - NO MATCH' FROM Salespeople WHERE NOT city = ANY (SELECT city FROM Customers))

UNION

(SELECT cnum, city, 'CUSTOMER - MATCHED' FROM Customers WHERE city = ANY (SELECT city FROM Salespeople)

UNION

SELECT cnum, city, 'CUSTOMER - NO MATCH' FROM Customers WHERE NOT city = ANY (SELECT city FROM Salespeople))

ORDER BY 2 DESC;

=============== SQL Execution Log =============== | | | FROM Salespeople) | | ORDER BY 2 DESC; | | | | ================================================ | | | | ---- -------- ------------------------ | | 2003 San Jose CUSTOMER - MATCHED | | 2008 San Jose CUSTOMER - MATCHED | | 2002 Rome CUSTOMER - NO MATCH | | 2007 Rome CUSTOMER - NO MATCH | | 1003 New York SALESPERSON - MATCHED | | 1003 New York SALESPERSON - NO MATCH | | 2001 London CUSTOMER - MATCHED | | 2006 London CUSTOMER - MATCHED | | 2004 Berlin CUSTOMER - NO MATCH | | 1007 Barcelona SALESPERSON - MATCHED | | 1007 Barcelona SALESPERSON - NO MATCH | | | ==================================================

Рисунок 14.8 Полное внешнее объединение

(Понятно, что эта формула, использующая ANY, эквивалентна объединению в предыдущем примере.) Сокращённое внешнее объединение, с которого мы начинали, используется чаще, чем последний пример. Этот пример, однако, имеет другой смысл. Всякий раз, когда вы выполняете объединение более чем двух запросов, вы можете использовать круглые скобки, чтобы определить порядок оценки. Другими словами, вместо

query X UNION query Y UNION query Z;

вы должны указать, или

(query X UNION query Y)UNION query Z;

или

query X UNION (query Y UNION query Z);

Это потому, что UNION и UNION ALL могут быть скомбинированы, чтобы удалять одни дубликаты, не удаляя другие.

Предложение

(query X UNION ALL query Y)UNION query Z;

не обязательно воспроизведёт те же результаты, что и предложение

query X UNION ALL(query Y UNION query Z);

если дублирующие строки в нём, будут удалены.




Начало  Назад  Вперед



Книжный магазин