ВВЕДЕНИЕ В СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ

         

Отбор данных из нескольких таблиц


Пример 13. Естественное соединение таблиц (способ 1 - явное указание условий соединения):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P, PD WHERE P.PNUM = PD.PNUM;

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

PNUM

PNAME

DNUM

VOLUME



1 Иванов 1 100
1 Иванов 2 200
1 Иванов 3 300
2 Петров 1 150
2 Петров 2 250
3 Сидоров 1 1000

Замечание. Соединяемые таблицы перечислены в разделе FROM оператора, условие соединения приведено в разделе WHERE. Раздел WHERE, помимо условия соединения таблиц, может также содержать и условия отбора строк.

Пример 14. Естественное соединение таблиц (способ 2 - ключевые слова JOIN… USING…):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P JOIN PD USING PNUM;

Замечание. Ключевое слово USING позволяет явно указать, по каким из общих колонок таблиц будет производиться соединение.

Пример 15. Естественное соединение таблиц (способ 3 - ключевое слово NATURAL JOIN):

SELECT P.PNUM, P.PNAME, PD.DNUM, PD.VOLUME FROM P NATURAL JOIN PD;

Замечание. В разделе FROM не указано, по каким полям производится соединение. NATURAL JOIN автоматически соединяет по всем одинаковым полям в таблицах.

Пример 16. Естественное соединение трех таблиц:

SELECT P.PNAME, D.DNAME, PD.VOLUME FROM P NATURAL JOIN PD NATURAL JOIN D;

В результате получим следующую таблицу:

PNAME

DNAME

VOLUME

Иванов Болт 100
Иванов Гайка 200
Иванов Винт 300
Петров Болт 150
Петров Гайка 250
Сидоров Болт 1000

Пример 17. Прямое произведение таблиц:

SELECT P.PNUM, P.PNAME, D.DNUM, D.DNAME FROM P, D;

В результате получим следующую таблицу:

PNUM

PNAME

DNUM

DNAME

1 Иванов 1 Болт
1 Иванов 2 Гайка
1 Иванов 3 Винт
2 Петров 1 Болт
2 Петров 2 Гайка
2 Петров 3 Винт
3 Сидоров 1 Болт
3 Сидоров 2 Гайка
3 Сидоров 3 Винт

Замечание. Т.к. не указано условие соединения таблиц, то каждая строка первой таблицы соединится с каждой строкой второй таблицы.


Пример 18. Соединение таблиц по произвольному условию. Рассмотрим таблицы поставщиков и деталей, которыми присвоен некоторый статую (см. пример 8 из предыдущей главы):

PNUM

PNAME

PSTATUS

1 Иванов 4
2 Петров 1
3 Сидоров 2
Таблица 1 Отношение P (Поставщики)

DNUM

DNAME

DSTATUS

1 Болт 3
2 Гайка 2
3 Винт 1
Таблица 2 Отношение D (Детали)

Ответ на вопрос "какие поставщики имеют право поставлять какие детали?" дает следующий запрос:

SELECT P.PNUM, P.PNAME, P.PSTATUS, D.DNUM, D.DNAME, D.DSTATUS FROM P, D WHERE P.PSTATUS >= D.DSTATUS;

В результате получим следующую таблицу:

PNUM

PNAME

PSTATUS

DNUM

DNAME

DSTATUS

1 Иванов 4 1 Болт 3
1 Иванов 4 2 Гайка 2
1 Иванов 4 3 Винт 1
2 Петров 1 3 Винт 1
3 Сидоров 2 2 Гайка 2
3 Сидоров 2 3 Винт 1

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