Мова SQL. Оператори створення та видалення об’єктів баз даних. Оператори пошуку інформації. Агрегатні функції. Вкладені запити, страница 2

Щоб отримати прізвища викладачів, назви їх посад та норми навантаження, в SQL-92 треба створити такий запит :

SELECT TCHS.NmTh,POST.NmPs,POST.NrNv

FROM TCHS,POST

WHERE TCHS.CdPs=POST. CdPs;

В результаті отримаємо віртуальну таблицю

NmTh

NmPs

NrNv

Середа І.С.

професор

600

Бандура В.М.

доцент

700

Мунтян Р.Д.

професор

600

Сірко В.В.

доцент

600

Оприско Ю.Й.

доцент

600

В наведеному прикладі в запиті реалізоване так зване природне з’єднання або “=- з’єднання”, яке є окремим випадком θ-з’єднання.

Запишемо наведену вище операцію мовою реляційної алгебри з використанням обох типів з’єднання.

Природне з’єднання  :  (TCHS join POST)[ NmTh, NmPs] ,

При цьому мається на увазі, що система, яка реалізує операції реляційної алгебри, „знає” про належність атрибутів NmTh та NmPs до відповідних таблиць, а також про те, що з’єднання здійснюється по загальному атрибуту CdPs.

θ-з’єднання : ((TCHS  times POST)where TCHS.CdPs=POST. CdPs) [ NmTh,NmPs]  .

Якщо потрібен такий список викладачів, що  працюють на кафедрі №7, то SQL-запит за стандартом буде таким:

SELECT TCHS.NmTh,POST.NmPs

FROM TCHS,POST

WHERE (TCHS.CdPs=POST.CdPs) AND (CdCf=7);

В результаті отримаємо віртуальну таблицю

NmTh

NmPs

NrNv

Мунтян Р.Д.

професор

600

Сірко В.В.

доцент

700

Запишемо наведену вище операцію мовою реляційної алгебри з використанням обох типів з’єднання.

Природне з’єднання  :  ((TCHS join POST) whereCdCf=7) [ NmTh,NmPs]      .

θ-з’єднання: ((TCHS  times POST)where ((TCHS.CdPs=POST.CdPs) and (CdCf=7))) [NmTh,NmPs]   .

В стандарті SQL-89 реалізація з’єднання виконувалася в опції  WHERE, тобто в основу була покладена концепція θ-з’єднання із реляційної алгебри.  В SQL-92 дозволяється обидва підходи до реалізації операції з’єднання, в Jet SQL покладена концепція визначення природного з’єднання в опції FROM, а інші умови виборув опції  WHERE. Тому для JetSQL основна структура оператора SELECT має таку граматику:

SELECT[ DISTINCT] [DISTINCTROW] {*<список атрибутів проекції >}

FROM  < природне з’єднання таблиць та/або запитів>

[WHERE <умова вибірки (до групування)>]

[GROUP BY <ім'я атрибута >]

[HAVING <умова вибірки (після групування)>]

[ORDER BY <список атрибутів > [ASC|DESC] ]

Тепер розкриємо граматичні конструкції і додаткові ключові слова, що наведені в операторі SELECT.

Необов’язкові ключові слова DISTINCT  або DISTINCTROWвживаються, коли треба не включати в результат дублі кортежів, що визначені опцією  SELECT, або рядків, що створюються в результаті усіх атрибутів таблиць, що з’єднуються.

Символ “*” використовують у тих випадках, коли в результатну таблицю виводяться усі атрибути таблиць, що перелічені в опції FROM. В результатній таблиці порядок атрибутів буде відповідати порядку атрибутів в початкових таблицях (спочатку атрибути першої таблиці, потім другої і т.д.).

<список атрибутів проекції > ::= <список атрибутів проекції >,<елементарна проекція >│ <елементарна проекція >

<елементарна проекція >::= <ім’я атрибута із таблиць, визначених в опції FROM >│ <арифметичний вираз> [AS <ім’я атрибута>]

<природне з’єднання таблиць та/або запитів> ::= <ім’я таблиці або запиту>│<природне з’єднання таблиць та/або запитів> <оператор з’єднання> <ім’я таблиці або запиту> ON <пара атрибутів природного з’єднання>

<оператор з’єднання> ::= <вид з’єднання> JOIN

<вид з’єднання> ::= INNER│LEFT│ RIGHT

<пара атрибутів природного з’єднання> ::= <атрибут лівого табличного виразу> = < атрибут правого табличного виразу >