Соединение таблицы с ней самой

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

SELECT ПЕРВАЯ НОМЕР_ПОСТАВЩИКА,

ВТОРАЯ. НОМЕР_ПОСТАВЩИКА

FROM S ПЕРВАЯ, S ВТОРАЯ

WHERE ПЕРВАЯ.ГОРОД = ВТОРАЯ.ГОРОД;

Нетрудно видеть, что в этом запросе требуется соединение таблицы S с ней самой по соответствию городов. Поэтому таблица S дважды указывается во фразе FROM. Для того чтобы различать эти два ее вхождения, мы вводим в этой фразе два произвольных ее псевдонима, ПЕРВАЯ и ВТОРАЯ, и используем их как явные уточнители во фразах SELECT и WHERE. Получаем результат:

НОМЕР_ПОСТАВЩИКА НОМЕР_ПОСТАВЩИКА
S1 S1 S2 S2 S3 S3 S4 S4 S5 S1 S4 S2 S3 S2 S3 S1 S4 S5

Мы можем привести в порядок этот результат, расширив следующим образом фразу WHERE:

SELECT ПЕРВАЯ.НОМЕР_ПОСТАВЩИКА.ВТОРАЯ.НОМЕР_ПОСТАВЩИКА

FROM S ПЕРВАЯ, S ВТОРАЯ

WHERE ПЕРВАЯ.ГОРОД = ВТОРАЯ.ГОРОД

AND ПЕРВАЯ.НОМЕР_ПОСТАВЩИКА < ВТОРАЯ. НОМЕР_ПОСТАВЩИКА

Условие ПЕРВАЯ.НОМЕР_ПОСТАВЩИКА < ВТОРАЯ.НОМЕР_ПОСТАВЩИКА дает двоякий эффект: а) оно исключает пары номеров поставщиков вида (х,х); б) оно гарантирует, что не будут появляться одновременно пары (х, у) и (у, х).

Имеем в результате:

НОМЕР_ПОСТАВЩИКА НОМЕР_ПОСТАВЩИКА
S1 S2 S4 S3

Это первый пример, в котором мы видели, что использование синонимов необходимо. Однако введение таких синонимов никогда не будет ошибкой, даже если их использование не необходимо, и иногда они могут помочь в том, чтобы данное предложение стало более ясным. Мы иногда будем использовать их в наших примерах в следующей главе.

РЕЗЮМЕ

Мы подошли к концу первой из двух глав, посвященных предложению SELECT. В ней были рассмотрены:

— само предложение SELECT, в том числе использование констант, выражений и конструкции «SELECT *»;

использование спецификации DISTINCT для исключения дубликатов, в том числе использование DISTINCT с соединением;

— фраза FROM с одной или более таблицами, включающая использование псевдонимов;

— использование фразы ORDER BY для упорядочения результата;

— фраза WHERE, включающая:

+ операторы сравнения =, Ø =,>, > =, Ø >, <, <=, Ø<

+ предикаты соединения

+ булевские операторы AND, OR, NOT

+ специальные операторы [NOT] BETWEEN, [NOT] IN, [NOT] LIKE

+ специальное сравнение «поле IS [NOT] NULL».

В следующей главе будут рассмотрены некоторые более сложные возможности предложения SELECT, а именно возможность «подзапросов», квантор существования, использование стандартных функций и оператор объединения (union).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: