РУКОВОДСТВО ПО РЕЛЯЦИОННОЙ СУБД DB2

СОЕДИНЕНИЕ ТАБЛИЦЫ С НЕЙ САМОЙ


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

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

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


Выдать все пары номеров поставщиков таких, что входящие к каждую пару поставщики соразмещены (пример 4.3.6);

S

НОМЕР_

ПОСТАВЩИКА

ГОРОД

S

НОМЕР_

ПОСТАВЩИКА

ГОРОД

_SX

_сZ

_SY

_сZ

P.

_SX

_SY

Для того чтобы специфицировать дополнительное условие SX<SY, если это необходимо, может быть использован блок условия. Обсуждение этого вопроса см. в главе 4.



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