SQLсервер в Linux -самостоятельное освоение пакета
4b61df3a

Использование секции EXCEPT



Листинг 4.48. Использование секции EXCEPT

booktown=# SELECT last_name, first_name

booktown-# FROM authors

booktown-# EXCEPT

booktown-# SELECT lastjiame, first_name

booktown-# FROM authors AS a (author_id)

booktown-# NATURAL INNER JOIN books

booktown-# ORDER BY first_name ASC;

last_name | first_name

Denham | Ariel

Gorey | Edward

Brite | Poppy Z.

Brautigan | Richard

(4 rows)

Команда из листинга 4.48 возвращает только те записи, которые не входят во второй запрос. Фактически это приводит к тому, что итоговый набор состоит из записей об авторах, у которых нет ни одной книги в таблице books. Это связано с присутствием секции INNER JOIN, исключающей из второго запроса всех авторов, коды которых (author_id) отсутствуют в таблице books.

Хотя присутствие этих ключевых слов в запросе SQL не позволяет использовать в нем секцию LIMIT, этот запрет легко обходится благодаря поддержке подзапросов в PostgreSQL. Для этого достаточно заключить в круглые скобки каждый из запросов, участвующих в операции UNION, INTERSECT или EXCEPT, и сравнить итоговые наборы подзапросов, как показано в листинге 4.49.



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