yandex rtb 1
ГоловнаЗворотній зв'язок
yande share
Главная->Різні конспекти лекцій->Содержание->2.4 Використання імен кореляції (аліасів, псевдонімів)

Організація баз даних і знань

2.4 Використання імен кореляції (аліасів, псевдонімів)

 

Іноді доводиться виконувати запити, у яких таблиця з'єднується сама із собою, або одна таблиця з'єднується двічі з іншою таблицею. При цьому використовуються імена кореляції (аліаси, псевдоніми), які дозволяють розрізняти копії та таблиці-оригінали. Імена кореляції вводяться у розділі FROM і йдуть через пробіл після імені таблиці. Імена кореляції повинні використовуватися як префікс перед ім'ям стовпця й відокремлюються від імені стовпця крапкою. Якщо у запиті вказуються ті самі поля з різних екземплярів однієї таблиці, вони повинні бути перейменовані для усунення неоднозначності в іменуваннях колонок результуючої таблиці. Визначення імені кореляції діє тільки під час виконання запиту.

Приклад. Відібрати всі пари постачальників таким чином, щоб перший постачальник у парі мав статус, більший од статусу другого постачальника:

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

 

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

 

Таблиця 2.3 – Відношення CONTRAGENTS

 

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

Імя контрагента

NAME

1

Іванов

2

Петров

3

Сидоров

 

Таблиця 2.4 – Відношення DETAILS

 

Номер деталі  DNUM

Найменування деталі  DNAME

1

Болт

2

Гайка

3

Гвинт

 

Таблиця 2.5 – Відношення CD (Поставки)

 

Номер постачальника  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

 

У таблиці 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;

 

21