Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Использование UNION с ORDER В У

имеют продавцов в их городах. Очевидно, что это гораздо сложнее (выходные данные для следующего запроса представлены на рис. 14.8):

(SELECT snum, city, 'SALESPERSON - MATCHED' FROM Salespeople

WHERE city = ANY (SELECT city

FROM Customers)

UNION

SELECT snum, city, 'SALESPERSON - NO МАТСН'

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 МАТСН'

FROM Customers

WHERE NOT city = ANY (SELECT city

FROM Salespeople))

ORDER ВУ 2 DESC;

(Эта формулировка, использующая ANY, эквивалентна соединению в предыдущем примере.)

Сокращенные внешние соединения, с которых началось рассмотрение, оказывают­ ся полезными чаще, чем полные (рассмотрено в последнем примере). По поводу по­ следнего примера можно заметить: если объединение выполняется более чем для двух

155

Г.JJава 14. Использование предложеиия UNION

 

 

2553

San

Jose

CUSTOMER

 

МдТСНЕD

 

 

 

 

 

 

 

 

 

21'/Jl/18 San

Jose

CUSTOMER

 

МдТСНЕD

 

 

 

 

21!11!12

Rome

 

CUSTOMER

 

NO МдТСН

 

 

 

 

21!11!17

Rome

 

CUSTOMER

-

NO МдТСН

 

 

 

 

, 1!11!13

New York

SдLESPERSON

МдТСНЕD

 

 

 

 

, l!lf/13

New York

SдLESPERSON

-

NO МдТСН

 

 

 

 

21!11!11

London

CUSTOMER

 

МдТСНЕD

 

 

 

 

2f/lf/16

london

CUSTOMER

 

МдТСНЕD

 

 

 

 

21!11!14

Berlin

CUSTOMER

 

NO МдТСН

 

 

 

 

1l!lf/17

Barcelona

SдLESPERSON

-

МдТСНЕD

 

 

 

 

, l!lf/17

Barcelona

SдlESPERSON

-

NO МАТСН

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 14.8. Сложное внешнее соединение

запросов, то для упорядочения вычислений нужно использовать круглые скобки. Ина­ че говоря, вместо того, чтобы задать

query Х UNION query У UNION query Z;

необходимо конкретизировать либо

(query Х UNION query У) UNION query Z;

либо

query Х UNION (query У UNION query Z);

Это необходимо, потому что UNION и UNION ALL можно комбинировать для ис­ ключения одних дубликатов без устранения других. Предложение

(query Х UNION ALL query У) UNION query Z;

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

query Х UNION ALL (query У UNION query Z);

если имеются дубликаты строк, подлежащие исключению из выходных данных.

156

Итоги

Итоги

Теперь вы знаете, как использовать предложение UNION, позволяющее комбини­ ровать любое количество запросов в единственном теле запроса. Если есть ряд сход­ ных таблиц, т.е. содержащих одинаковую информацию, но принадлежащих разным пользователям и имеющих различную специфику, объединение может стать легким способом слить и упорядочить выходные данные. Внешнее соединение - это новый способ применять условия, не исключая выходные данные, а только помечая или вы­

деляя их части как удовлетворяющие и неудовлетворяющие данному условию.

Этим мы заканчиваем раздел книги, посвященный запросам. Следующая тема - введение данных в таблицы и создание новых таблиц. Вы узнаете, что запросы иногда

используются не только самостоятельно, но и внутри других типов команд.

157

Работаем на SQL

1.Создайте объединение двух запросов, которые показывают значения полей

names, cities, ratings для всех покупателей (customers). Те, у кого рейтинг (rating)

200 и выше, должны иметь комментарий "High Rating", все прочие - "Low

Rating".

2.Запишите команду, которая выдает в качестве выходных данных значения полей name и number для каждого продавца и покупателя, имеющего более одного зака­ за. Результаты вывести в алфавитном порядке.

3.Сформируйте объединение трех запросов. Первый запрос выбирает значения поля snums для всех продавцов в San Jose. Второй запрос выбирает значения поля cnums для всех покупателей в San Jose; третий запрос выбирает значения поля onums для всех заявок за 3 октября 1990. Объединение должно сохранять дубли­

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

каждым из них (вторым и третьим) и первым.

(Замечание: в простых таблицах, используемых в примерах, такой избыточности может не оказаться, но это не изменяет сути дела.)

(Ответы см. в приложении А.)

158

15

m [UJ ш [1] ш и [1j

Ввод, удаление

и изменение

_. _.

значении полеи

Источник: https://studfile.net/preview/16418473/