Основы SQL


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


Рисунок 14.6 Внешнее объединение

Строка ' NO MATCH ' была дополнена пробелами, чтобы получить совпадение поля cname по длине (не во всех реализациях SQL). Второй запрос выбирает даже те строки, которые исключил первый. Вы можете также добавить комментарий или выражение в ваш запрос в виде дополнительного поля. Если вы сделаете это, вы должны будете добавить некоторый дополнительный комментарий или выражение в той же самой позиции среди выбранных полей для каждого запроса в операции объединения. Совмещение UNION предотвращает добавление дополнительного поля для первого запроса, но не для второго. Вот запрос, который добавляет строки к выбранным полям и указывает, совпадает ли данный продавец с его заказчиком в его городе:

SELECT a.snum, sname, a.city, ' MATCHED ' FROM Salespeople a, Customers b WHERE a.city = b.city

UNION

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

ORDER BY 2 DESC;

Рисунок 14.7 показывает вывод этого запроса.

=============== SQL Execution Log ============ | | | WHERE a.city = b.city | | UNION | | SELECT snum,sname,city, 'NO MATCH' | | FROM Salespeople | | WHERE NOT city = ANYate) | | (SELECT city | | FROM Customers) | | ORDER BY 2 DESC; | | ============================================= | | | | ----- ------- ------------ --------- | | 1002 Serres San Jose MATCHED | | 1007 Rifkin Barselona NO MATCH | | 1001 Peel London MATCHED | | 1004 Motika London MATCHED | | 1003 Axelrod New York NO MATCH | | | ===============================================

Рисунок 14.7 Внешнее объединение с полем комментария

Это неполное внешнее объединение, так как оно включает только несовпадающие поля одной из объединяемых таблиц. Полное внешнее объединение должно включать всех заказчиков, имеющих и не имеющих продавцов в их городах. Такое условие будет более полным, как вы это сможете увидеть (вывод следующего запроса показан на Рисунке 14,8):

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




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