При цьому мається на увазі, що система, яка реалізує операції реляційної алгебри, „знає” про належність атрибутів PrizvVykl, PostVyklтаNormPost до відповідних таблиць, а також про те, що з’єднання здійснюється по загальному атрибуту KodPost.
θ-з’єднання : ((VYKLADACH times POSADA)WHEREVYKLADACH.KodPost=POSADA. KodPost) [ PrizvVykl, PostVykl, NormPost]
Якщо потрібен такий список викладачів, що працюють на кафедрі №7, то SQL-запит за стандартом буде таким:
(( VYKLADACH times POSADA)WHERE((VYKLADACH.KodPost=POSADA.KodPost)and (NomKaf=7))) [PrizvVykl, PostVykl, NormPost]
В стандарті SQL-89реалізація з’єднання виконувалася в опції WHERE, тобто в основу була покладена концепція θ-з’єднання із реляційної алгебри. В SQL-92дозволяється обидва підходи до реалізації операції з’єднання, в Jet SQL покладена концепція визначення природного з’єднання в опції FROM,а інші умови вибору–в опції WHERE.Тому для Jet SQLосновна структура оператора SELECT має таку граматику:
Тепер розкриємо граматичні конструкції і додаткові ключові слова, що наведені в операторі SELECT.
Необов’язкові ключові слова DISTINCTабо DISTINCTROWвживаються, коли треба не включати в результат дублі кортежів, що визначені опцією SELECT,або рядків, що створюються в результаті проекції усіх атрибутів таблиць, що з’єднуються.
Символ “*” використовують у тих випадках, коли в результатну таблицю виводяться усі атрибути таблиць, що перелічені в опції FROM. В результатній таблиці порядок атрибутів буде відповідати порядку атрибутів в початкових таблицях (спочатку атрибути першої таблиці, потім другої і т.д.).
<елементарна проекція>::= <ім’я атрибута із таблиць, визначених в опції FROM>│ <арифметичний вираз> [AS <ім’я атрибута>]
<природне з’єднання таблиць та/або запитів> ::= <ім’я таблиці або запиту>│<природне з’єднання таблиць та/або запитів> <оператор з’єднання> <ім’я таблиці або запиту> ON <пара атрибутів природного з’єднання>
<оператор з’єднання> ::= <вид з’єднання> JOIN
<вид з’єднання>::= INNER│LEFT│ RIGHT
<пара атрибутів природного з’єднання> ::= <атрибут лівого табличного виразу> = <атрибут правого табличного виразу >
<атрибут лівого табличного виразу> ::= <ім’я атрибута із таблиць, визначених в опції FROM>
<атрибут правого табличного виразу> ::= <ім’я атрибута із таблиць, визначених в опції FROM>
<ім’я атрибута із таблиць, визначених в опції FROM> ::= <ім’я атрибута>| <ім’я таблиці або запиту>.<ім’я атрибута> | [<ім’я таблиці або запиту>].[<ім’я атрибута>]
Увага! В останньому правилі символи “[“ та “]” використовуються як термінальні символи граматичної конструкції, а не як метасимволи граматики, що задається розширеними формами Бекуса-Наура, в яких вони вказують на необов’язковість елемента, що знаходиться в таких дужках.
Як видно із граматики, атрибут може задаватися як своїм ім’ям, так із уточненням, до якої таблиці він належить. Якщо в запиті задіяна всього одна таблиця, то уточнення не потрібно. При кількох таблицях також можна не вказувати уточнення для атрибутів, що є унікальними, але для запобігання помилок краще давати повні імена атрибутів, тобто разом з назвою таблиці.
З врахуванням вищенаведеного запит на отримання списку викладачів та їх посад в Jet SQLзадається таким чином (структуру і вміст таблиць див. вище):
[VYKLADACH].[KodPost]=[POSADA].[KodPost] WHERE NomKaf=7;
Результати цих запитів наведені вище. Тепер наведемо результати першого запиту при використанні лівого (замість INNER використаємо LEFT) та правого (замість INNERвикористаємо RIGHT) з’єднань.
Після LEFT JOINПісля RIGHT JOIN
PrizvVykl
PostVykl
NormPost
PrizvVykl
PostVykl
NormPost
Середа І.С.
професор
Середа І.С.
Професор
Бандур М.М.
доцент
Мунтян Р.Д.
Професор
Мунтян Р.Д.
професор
Бандур М.М
Доцент
Сірко В.В.
доцент
Сірко В.В.
Доцент
Опришко Ю.Й.
доцент
Опришко Ю.Й.
Доцент
Турчак А.Д.
старший викладач
Викладач
В таблицях-результатах сірим кольором відмічені поля, які не визначені, точніше – визначені як поля, що мають значення Null (ніщо). Це значення можна використовувати для знаходження „невідповідностей” між таблицями, що зв’язуються (в СКБД Access є майстер (Wizard) запитів, за допомогою яких можна знайти подібні невідповідності). Продемонструємо це. Спочатку знайдемо в таблиці VYKLADACHрядки, в яких значення атрибута KodPostтакі, яких немає в таблиці POSADA, і таким чином, між ними не може бути встановлено режим посилальної цілісності.