Щоб отримати прізвища викладачів, назви їх посад та норми навантаження, в 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] {*│<список атрибутів проекції >}
[WHERE <умова вибірки (до групування)>]
[GROUP BY <ім'я атрибута >]
[HAVING <умова вибірки (після групування)>]
[ORDER BY <список атрибутів > [ASC|DESC] ]
Тепер розкриємо граматичні конструкції і додаткові ключові слова, що наведені в операторі SELECT.
Необов’язкові ключові слова DISTINCT або DISTINCTROWвживаються, коли треба не включати в результат дублі кортежів, що визначені опцією SELECT, або рядків, що створюються в результаті усіх атрибутів таблиць, що з’єднуються.
Символ “*” використовують у тих випадках, коли в результатну таблицю виводяться усі атрибути таблиць, що перелічені в опції FROM. В результатній таблиці порядок атрибутів буде відповідати порядку атрибутів в початкових таблицях (спочатку атрибути першої таблиці, потім другої і т.д.).
<список атрибутів проекції > ::= <список атрибутів проекції >,<елементарна проекція >│ <елементарна проекція >
<елементарна проекція >::= <ім’я атрибута із таблиць, визначених в опції FROM >│ <арифметичний вираз> [AS <ім’я атрибута>]
<природне з’єднання таблиць та/або запитів> ::= <ім’я таблиці або запиту>│<природне з’єднання таблиць та/або запитів> <оператор з’єднання> <ім’я таблиці або запиту> ON <пара атрибутів природного з’єднання>
<оператор з’єднання> ::= <вид з’єднання> JOIN
<вид з’єднання> ::= INNER│LEFT│ RIGHT
<пара атрибутів природного з’єднання> ::= <атрибут лівого табличного виразу> = < атрибут правого табличного виразу >
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.