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

Підзапити, що починаються з операторів порівняння    та ключові слова, що включають, ANY або ALL.

В іншому виді підзапитів, що не повертають або повертають кілька рядків, використовується оператор порівняння, модифікований ключовими словами ANY чі ALL. Підзапити, що починаються з модифікованого оператора порівняння, мають загальну форму наступного виду:

<Початок операторів SELECT, INSERT, UPDATE, DELETE чи підзапита WHERE>  <оператор_порівняння> [ANY | ALL] (підзапит) [Кінець операторів SELECT, INSERT, UPDATE, DELETE або підзапита]

Що таке ALL і ANY. Якщо в якості прикладу скористатися оператором порівняння ">", то "> ALL" означає "більше, ніж кожне значення" (іншими словами, "більше, ніж найбільше значення"). Таким чином, "> ALL (1, 2, З)" означає "більше, ніж З". "> ANY" означає "більше, ніж, принаймні, одне значення" (іншими словами, "більше, ніж найменше значення"). Таким чином, "> ANY (1, 2, З)" означає "більше, ніж 1".

Підзапити з ключовим словом ALL.

Запит : знайти посади викладачів, що більше (за кодом, а не за семантичним значенням) самої більшої (за кодом) посади викладачів кафедри №12 (на кафедрі дві посади з кодами „01” і „03”).

SELECT TCHS.NmTh, TCHS.CdCf, TCHS.CdPs

FROM TCHS

WHERE (((TCHS.CdPs)>All (select CdPs from TCHS where CdCf=12)));

NmTh

CdCf

CdPs

Балагура А.М.

2

04

Черно Ф.М.

2

04

Запит : знайти посади викладачів, що більше (за кодом, а не за семантичним значенням) будь якої посади викладачів кафедри №12 (на кафедрі дві посади з кодами „01” і „03”).

SELECT TCHS.NmTh, TCHS.CdCf, TCHS.CdPs

FROM TCHS

WHERE (((TCHS.CdPs)>ANY (select CdPs from TCHS where CdCf=12)));

NmTh

CdCf

CdPs

Бандура В.М.

6

02

Сірко В.В.

7

02

Оприско Ю.Й.

2

02

Колчак А.Д.

12

03

Батура О.Й.

6

02

Балагура А.М.

2

04

Черно Ф.М.

2

04

Порівняння ключових слів IN, ANY і ALL. Оператор "= ANY" цілком еквівалентний оператору IN. Якщо, наприклад, потрібно знайти викладачів, які мають ті ж посади, що й викладачі певної кафедри, можна скористатися або IN див. вище), або = ANY. Однак, семантика оператора "<> ANY" (чи оператор "!= ANY" залежить від синтаксису, прийнятого в конкретній системі відрізняється від оператора NOT IN. "<> ANY" означає "не = а або  не = b або не = c". NOT IN означає "не =а і не=b і не= с".

Підзапити з використанням квантора EXISTS. Як увже зазначалося, сисок вибору підзапита, що починається з EXISTS, майже завжди включає "зірочку" (*). У даному випадку немає необхідності вказувати імена стовпців, оскільки ви лише виконуєте перевірку на існування (чи "неіснування") будь-яких рядків, що задовольняють зазначеним критеріям.

Приклад –  отримати список викладачів кафедри  №6, якщо на кафедрі є хоч один доцент (код посади – „02”.

SELECT TCHS.NmTh, POST.NmPs, POST.CdPs, TCHS.CdCf

FROM TCHS INNER JOIN POST ON TCHS.CdPs = POST.CdPs

WHERE ((CdCf=2) AND exists (SELECT * FROM TCHS where ((CdPs="02") AND (CdCf=2))));

NmTh

NmPs

CdPs

CdCf

Оприско Ю.Й.

доцент

02

2

Балагура А.М.

викладач

04

2

Черно Ф.М.

викладач

04

2

  1. Якщо в запиті поставимо код посади „03”, то отримаємо пусту таблицю.

Згортка  перехресних таблиць

Методична частина до згортки перехресних таблиць