Групи всередені груп
Можна також використовувати речення GROUP BY для отримування результатів по групах в середині групи.
Групові функції і індивідуальні стовбці в таблиці результатів.
Наведені вище приклади в вихідній таблиці крім кількості міст в кожній області. Такий вивід дає достатньо інформації при перегляді результатів. При включенні в вигідну таблицю стовбців, які не є аргументами агрегатних функцій слід дотримуватися наступного правила:
Ви можете ставити в реченні SELECT тільки ті стовбці, по яких проводиться розбиття по на групи, тобто задані в реченні GROUP BY. Можливе також задання літералів, псевдостовбців.
Інші стовбці таблиць БД в реченні SELECT при цьому заборонені.
Якщо ви хочете поставити в реченні SELECT більше одного стовбця, то всі стовбці повинні стояти і в GROUP BY, тобто бути стовбцями розбиття.
Таким чином правило, якого необхідно дотримуватися, використовуючи речення GROUP BY звучить так:
Будь-який стовбець таблиці БД, який стоїть в реченні SELECT не в груповій функції, повинен бути і в реченні GROUP BY
Речення having
Речення HAVING необхідно задавати, якщо ви хочете вибрати не всі формовані реченням GROUP BY групи, а лише частину їх по певному критерію (на групові характеристики).
Щоб визначити найпізніші дати введення міст в таблицю REGION по областях, кількість міст в яких перевищує 20 слід задати команду
SELECT PROVINCE_NAME, MAX(IN_DATE)
FROM REGION
GROUP BY PROVINCE_NAME
HAVING COUNT(*) > 20
Слід зауважити, що речення HAVING може стояти як до, так і після речення GROUP BY, однак рекомендується завжди ставити його після, так як це логічніше і зручніше для сприйняття. Групи формуються і групові функції вичисляються до виконання умов заданих в реченні HAVING.
На відміну від речення HAVING, речення WHERE не може бути використано для задання обмежень на групові функції. Можна використовувати речення WHERE тільки для задання обмежень на індивідуальні рядки таблиці. Слід зауважити, що обидва речення, кожне для своєї цілі, можуть бути задані в одній команді.
Порядок задання речень в команді SELECT
Якщо всі розглянуті теми речення задані в одній команді, то їх порядок повинен бути наступним:
SELECT стовбці
FROM таблиці
WHERE критерій пошуку на окремі рядки
GROUP BY стовбці
HAVUNG критерій пошуку на групи
ORDER BY стовбці
При виконанні команди SELECT, мова SQL використовує речення в наступному порядку:
WHERE |
для вибору і відсіювання індивідуальних рядків таблиць(групові функції на можуть бути включені). |
GROUP BY |
для розбиття знайдених стрічок на групи. |
HAVING |
для вибору потрібних по критерію груп. |
Вибір даних з більш ніж однієї таблиці.
З’єднання використовуються, коли SQL-запит вибирає дані з більш ніж однієї таблиці БД. Рядки одки однієї таблиці можуть бути з’днанні з стовбцями другої на основі спільності значень в визначених стовбцях.
Існує два основних типи з’єднання:
1. З’єднання порівності (Egui-join).
2. З’єднання не порівності (Non-egui-join).
З’єднання порівності
З ціллю визначення назв головних міст (обласних центрів) для кожного міста з таблиці REGION можна зв’язати таблиці PROVINCE i REGION, порівнюючи значення стовбця ID в таблиці областей PROVINCE_ID в таблиці міст. Дві таблиці з’єднуються по рівності значення поля одного типу (використовується оператор <<=>>).
Умова з’єднання задається в реченні WHERE:
SELECT стовбці
FROM таблиці
WHERE умова з’єднання
Щоб з’єднати таблиці EMP і DEPT, необхідно задати команду:
SELECT HEAD CITY, NAME
FROM PROVINCE, REGION
WHERE ID = PROVINCE;
Слід зауважити, що при співпадінні імен стовбців таблиць, по яких відбувається з’єднання необхідно в умові з’єднання через крапку справа додавати імена таблиць. Ця ж вимого поширюється і на імена стовбців в реченнях SELECT і ORDER_BY.
