Секции NATURAL и USING
Листинг 4.37. Секции NATURAL и USING
booktown=# SELECT title. last_name, first_name
booktown-# FROM books INNER JOIN authors AS a (author_id)
booktown-# USING (author_id)
booktown-# WHERE last_name = 'Geisel';
title | last_name | first_name
The Cat in the Hat | Geisel | Theodor Seuss
Bartholomew and the Oobleck | Geisel | Theodor Seuss
(2 rows)
booktown=# SELECT title, last_name, first_name
booktown-# FROM books NATURAL INNER JOIN authors AS a (author_id)
booktown-# WHERE lastjiame = 'Geisel';
title | last_name | first_name
The Cat in the Hat | Geisel | Theodor Seuss
Bartholomew and the Oobleck | Geisel | Theodor Seuss
(2 rows)
Первая команда SELECT в листинге4.37 назначает синоним authorjd первому полю таблицы authors (хотя в действительности это поле называется id). Идентификатор author_id передается в секцию USING, после чего PostgreSQL ищет в каждом наборе идентификатор поля с этим именем для объединения записей.
Внутренние объединения часто применяются на практике, но в некоторых ситуациях требуется выборка всех необходимых данных с использованием внешнего объединения. Чтобы попять суть различий между внутренними и внешними объединениями, достаточно разобраться, что происходит с записями, не входящими в установленную связь.
При внутреннем объединении все записи, для которых не находится соответствующего значения в других наборах (заданных при помощи ON или USING), просто игнорируются.