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

Использование имен корреляции (алиасов, псевдонимов)


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

Пример 19. Отобрать все пары поставщиков таким образом, чтобы первый поставщик в паре имел статус, больший статуса второго поставщика:

SELECT P1.PNAME AS PNAME1, P1.PSTATUS AS PSTATUS1, P2.PNAME AS PNAME2, P2.PSTATUS AS PSTATUS2 FROM P P1, P P2 WHERE P1.PSTATUS1 > P2.PSTATUS2;

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

PNAME1

PSTATUS1

PNAME2

PSTATUS2



Иванов 4 Петров 1
Иванов 4 Сидоров 2
Сидоров 2 Петров 1

Пример 20. Рассмотрим ситуацию, когда некоторые поставщики (назовем их контрагенты) могут выступать как в качестве поставщиков деталей, так и в качестве получателей. Таблицы, хранящие данные могут иметь следующий вид:

Номер контрагента

NUM

Наименование контрагента

NAME

1 Иванов
2 Петров
3 Сидоров

Таблица 3 Отношение CONTRAGENTS

Номер детали

DNUM

Наименование детали

DNAME

1 Болт
2 Гайка
3 Винт

Таблица 4 Отношение DETAILS (Детали)

Номер поставщика

PNUM

Номер получателя

CNUM

Номер детали

DNUM

Поставляемое количество

VOLUME

1 2 1 100
1 3 2 200
1 3 3 300
2 3 1 150
2 3 2 250
3 1 1 1000

Таблица 5 Отношение CD (Поставки)

В таблице CD (поставки) поля PNUM и CNUM являются внешними ключами, ссылающимися на потенциальный ключ NUM в таблице CONTRAGENTS.


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

SELECT P.NAME AS PNAME, C.NAME AS CNAME, DETAILS.DNAME, CD.VOLUME FROM CONTRAGENTS P, CONTRAGENTS C, DETAILS, CD WHERE P.NUM = CD.PNUM AND C.NUM = CD.CNUM AND D.DNUM = CD.DNUM;

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

Наименование поставщика

PNAME

Наименование получателя

CNAME

Наименование детали

DNAME

Поставляемое количество

VOLUME

Иванов Петров Болт 100
Иванов Сидоров Гайка 200
Иванов Сидоров Винт 300
Петров Сидоров Болт 150
Петров Сидоров Гайка 250
Сидоров Иванов Болт 1000
Замечание. Этот же запрос может быть выражен очень большим количеством способов, например, так:

SELECT P.NAME AS PNAME, C.NAME AS CNAME, DETAILS.DNAME, CD.VOLUME FROM CONTRAGENTS P, CONTRAGENTS C, DETAILS NATURAL JOIN CD WHERE P.NUM = CD.PNUM AND C.NUM = CD.CNUM;


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