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

Групування  у середині груп. Шляхом сортування одночасно по декількох елементах можна створювати групи усередині груп. Розділяючи елементи, по яких буде проводитися групування, за допомогою якого можна розбити великі групи на підгрупи. Покажемо це на прикладі запиту : визначити кількість викладачів за посадами на кафедрах, тобто групування спочатку будемо робити по кафедрах, а внутри кафедр – по посадах.

SELECT TCHS.CdCf, POST.NmPs, Count(TCHS.CdTh) AS [QtyTh]

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

GROUP BY TCHS.CdCf, POST.NmPs;

CdCf

NmPs

QtyTh

2

викладач

2

2

доцент

1

6

доцент

2

6

професор

1

7

доцент

1

7

професор

2

12

професор

1

12

старший викладач

1

Опція GROUP BY без агрегатних функцій. Без агрегатних функцій GROUP BY нагадує  DISTINCT. Воно розділяє таблицю на групи і для кожної з них повертає по одному рядку. Слід пам’ятати, що при використанні GROUP BY для кожного елемента зі списку вибору буде генеруватися по одному значенню на набір.

Приклади:

Запит

SELECT DISTINCT POST.NmPs

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

та запит

SELECT POST.NmPs

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

GROUP BY POST.NmPs;

дають один і той же результат.

NmPs

викладач

доцент

професор

старший викладач

GROUP BY з опцією WHERE. При відсутності в запиті GROUP BY агрегатної функції застосовуються до всієї таблиці цілком. У цьому випадку для вибору рядків, що беруть участь у обчислені, можна було використовувати опція WHERE. Це ж вірно й при наявності груп.

Спільна робота опцій WHERE і GROUP BY відбувається наступним чином. Спочатку знаходяться всі рядки, що задовольняють умовам WHERE. Потім опція GROUP BY поділяє відібрані рядки i групи. Рядки, що не задовольняють умовам  WHERE, не включаються в жодну групу.

Приклад: визначимо кількість викладачів на кафедрах №№ 2 і 12.

SELECT TCHS.CdCf, Count(TCHS.CdTh) AS [Count-CdTh]

FROM TCHS

WHERE (((TCHS.CdCf)=2)) OR (((TCHS.CdCf)=12))

GROUP BY TCHS.CdCf;

CdCf

Count-CdTh

2

3

12

2

9.5 Структуровані запити та підзапити

    

Початок зовнішнього оператораSELECT

 
Синтаксис підзапиту:

SELECT [DISTINCT]

FROM <список таблиць>

WHERE

{<вираз>[NOT]IN| <оператор порівняння>ANY|ALL]


Підзапит, який описується в дужках

 
(SELECT [DISTINCT] <список вибору піздапита>

FROM <список таблиць>

WHERE <умова>)

Не обов’язкові частини зовнішнього оператора SELECT

 


[GROUP BY]

[HAVING]

[ORDER BY]

Як працює підзапит: підзапити повертають результати внутрішнього запиту в зовнішній.

Підзапити поділяються на некорелировані (noncorrelated) та корелировані (correlated), а також на типи:

1. Підзапити, які не повертають жодного  або повертають декілька елементів (   почінаються з IN або з оператора порівняння, які містять ключові слова ANY або ALL).

2. Підзапити, які повертають єдине значення ( починаються з простого оператора порівняння).

3. Підзапити, які представляють собою тест на існування ( починаються з EXISTS)

Правила підзапитів.

 Ці правила в основному відносяться до списку вибору підзапита з деякими додатковими обмеженнями на функції, які можна використовувати в підзапиті.