<атрибут лівого табличного виразу> ::= <ім’я атрибута із таблиць, визначених в опції FROM>
< атрибут правого табличного виразу > ::= <ім’я атрибута із таблиць, визначених в опції FROM>
<ім’я атрибута із таблиць, визначених в опції FROM> ::= <ім’я атрибута> | <ім’я таблиці або запиту >.<ім’я атрибута> | [<ім’я таблиці або запиту >] .[<ім’я атрибута>]
Увага! В останньому правилу символи “[“ та “]” використовуються як термінальні символи граматичної конструкції, а не як метасимволи граматики, що задається розширеними формами Бекуса-Наура, в яких вони вказують на необов’язковість елемента, що знаходиться в таких дужках.
Як видно із граматики, атрибут може задаватися як своїм ім’ям, так із уточненням, до якої таблиці він належить. Якщо в запиті задіяна всього одна таблиця, то уточнення не потрібно. При кількох таблицях також можна не вказувати уточнення для атрибутів, що є унікальними, але для запобігання помилок краще давати повні імена атрибутів, тобто разом з назвою таблиці.
З врахуванням вищенаведеного запит на отримання списку викладачів та їх посад в Jet SQLзадається таким чином (структуру і вміст таблиць див. вище):
SELECT TCHS.NmTh,POST.NmPs
FROM TCHS INNERJOIN POSTON TCHS.CdPs=POST.CdPs;
а теж саме для кафедри №7 так:
SELECT TCHS.NmTh,POST.NmPs
FROM TCHS INNERJOIN POSTON [TCHS].[CdPs]=[POST].[CdPs]
WHERE CdCf=7;
Результати цих запитів наведені вище. Тепер наведемо результати першого запиту при використанні лівого (замість INNER використаємо LEFT) та правого (замість INNER використаємо RIGHT) з’єднань.
Після LEFT JOIN Після RIGHT JOIN
|
NmTh |
NmPs |
NrNv |
NmTh |
NmPs |
NrNv |
|
|
Середа І.С. |
професор |
600 |
Середа І.С. |
професор |
600 |
|
|
Бандура В.М. |
доцент |
700 |
Мунтян Р.Д. |
професор |
600 |
|
|
Мунтян Р.Д. |
професор |
600 |
Бандура В.М |
доцент |
700 |
|
|
Сірко В.В. |
доцент |
700 |
Сірко В.В. |
доцент |
700 |
|
|
Оприско Ю.Й. |
доцент |
700 |
Оприско Ю.Й. |
доцент |
700 |
|
|
Колчак А.Д. |
старший викладач |
750 |
||||
|
викладач |
800 |
В таблицях-результатах сірим кольором відмічені поля, які не визначені, точніше – визначені як поля, що мають значення Null (ніщо). Це значення можна використовувати для знаходження „невідповідностей” між таблицями, що зв’язуються (див. лабораторну роботу №4). Продемонструємо це ще раз. Спочатку знайдемо в таблиці TCHS знайдемо рядки, в яких TCHS значення атрибута CdPs, яких немає в таблиці POST, і таким чином, між ними не може бути встановлено режим посилальної цілісності.
SELECT TCHS.CdTh, TCHS.NmTh, TCHS.CdPs, TCHS.CdCf
FROM TCHS LEFT JOIN POST ON TCHS.CdPs = POST.CdPs
WHERE (((POST.CdP) Is Null));s
Результат наведено нижче.
|
CdTh |
NmTh |
CdPs |
CdCf |
|
17 |
Колчак А.Д. |
05 |
12 |
Тепер знайдемо в таблиці POST TCHS знайдемо рядки, в яких є такі значення атрибута CdPs, яких немає в таблиці TCHS.
SELECT POST.CdPs, POST.NmPs, POST.NrNv
FROM TCHS RIGHT JOIN POST ON TCHS.CdPs = POST.CdPs
WHERE (((TCHS.CdPs) Is Null));
Результат наведено нижче.
|
CdPs |
NmPs |
NrNv |
|
03 |
старший викладач |
750 |
|
04 |
викладач |
800 |
9.2 Розрахункові поля
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.