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

         

ИСПОЛЬЗОВАНИЕ INSERT..SELECT ДЛЯ ПОСТРОЕНИЯ ВНЕШНЕГО СОЕДИНЕНИЯ


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

CREATE   TABLE ВНЕШ_СОЕДИНЕНИЕ

(НОМЕР_ПОСТАВЩИКА     CHAR (5),

ФАМИЛИЯ                                         CHAR (20),

СОСТОЯНИЕ                         SMALLINT,

ГОРОД                                    CHAR (15)),

НОМЕР_ДЕТАЛИ                  CHAR (6);

INSERT

INTO        ВНЕШ_СОЕДИНЕНИЕ        

SELECT S.*, SP.HOMEP_ДЕТАЛИ

FROM              S, SP

WHERE           S. НОМЕР_ПОСТАВЩИКА=SP. НОМЕР_ПОСТАВЩИКА;

INSERT



INTO        ВНЕШ_СОЕДИНЕНИЕ

SELECT           S.*, 'bb'

FROM              S

WHERE           NOT EXISTS

(SELECT         *

FROM              SP

WHERE           SP. НОМЕР_ПОСТАВЩИКА=

S. НОМЕР_ПОСТАВЩИКА);

Теперь таблица BHEШ_СОЕДИНЕНИЕ выглядит так:

ВНЕШ_СОЕДИНЕНИЕ

НОМЕР_

ПОСТАВЩИКА

ФАМИЛИЯ

СОСТОЯНИЕ

ГОРОД

НОМЕР_

ДЕТАЛИ

S1

S1

S1

S1

S1

S1

S2

S2

S3

S4

S4

S4

S5

Смит

Смит

Смит

Смит

Смит

Смит

Джонс

Джонс

Блейк

Кларк

Кларк

Кларк

Адамc

20

20

20

20

20

20

10

10

30

20

20

20

30

Лондон

Лондон

Лондон

Лондон

Лондон

Лондон

Париж

Париж

Париж

Лондон

Лондон

Лондон

Атенс

Р1

Р2

РЗ

Р4

Р5

Р6

Р1

Р2

Р2

Р2

Р4

Р5

bb

Здесь 'bb' используется для представления строки пробелов. Пояснение. Первые двенадцать строк приведенного результата, как легко видеть, соответствуют первому из двух INSERT.. .SELECT и представляют собой обычное естественное соединение таблиц S и SP по номерам поставщиков, за исключением того, что не включен столбец КОЛИЧЕСТВО. Последняя строка результата соответствует второму INSERT.. .SELECT и сохраняет информацию для поставщика S5, который не поставляет никаких деталей. Полный результат представляет собой внешнее соединение таблиц S и SP по номерам поставщиков, в котором опущен столбец КОЛИЧЕСТВО. В противоположность этому обычное соединение называется иногда внутренним

соединением.

Заметим, что нужны два отдельных INSERT.. .SELECT, поскольку подзапрос не может содержать UNION.



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