Групування у середині груп. Шляхом сортування одночасно по декількох елементах можна створювати групи усередині груп. Розділяючи елементи, по яких буде проводитися групування, за допомогою якого можна розбити великі групи на підгрупи. Покажемо це на прикладі запиту : визначити кількість викладачів за посадами на кафедрах, тобто групування спочатку будемо робити по кафедрах, а внутри кафедр – по посадах.
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 [DISTINCT]
FROM <список таблиць>
WHERE
{<вираз>[NOT]IN| <оператор порівняння>ANY|ALL]
|
FROM <список таблиць>
WHERE <умова>)
|
[GROUP BY]
[HAVING]
[ORDER BY]
Як працює підзапит: підзапити повертають результати внутрішнього запиту в зовнішній.
Підзапити поділяються на некорелировані (noncorrelated) та корелировані (correlated), а також на типи:
1. Підзапити, які не повертають жодного або повертають декілька елементів ( почінаються з IN або з оператора порівняння, які містять ключові слова ANY або ALL).
2. Підзапити, які повертають єдине значення ( починаються з простого оператора порівняння).
3. Підзапити, які представляють собою тест на існування ( починаються з EXISTS)
Правила підзапитів.
Ці правила в основному відносяться до списку вибору підзапита з деякими додатковими обмеженнями на функції, які можна використовувати в підзапиті.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.