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

<атрибут лівого табличного виразу> ::= <ім’я атрибута із таблиць, визначених в опції 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 Розрахункові поля