Використання функцій
Оператор SELECT може повертати не тільки набір записів, але і загальні характеристики таблиці, підраховані по виділюваній множині записів, причому це може бути або множина записів або загальна характеристика таблиці, але не одночасно і те й інше.
Для цього можна використовувати функції:
1)count(<умова>)- кількість записів задовольняючих умові,
2)count(*) – повна кількість записав;
3)min(<поле>) - мінімальне значеня поля;
4)max(<поле>) - максимальне значеня поля;
5)avg(<поле>) - середне значеня поля;
6)sum(<поле>) – сума значень поля.
У цих функціях <поле > -числове поле.
Результат запиту з цими функціями - таблиця з одного рядка.
Приклади.
1)SELECT count(*) FROM PERS – число співробітників(записів у таблиці PERS).
2) SELECT count(*) FROM PERS WHERE DEP='Цех 1'– число співробітників цеху 1.
3) SELECT count(DISTINCT DEP) FROM PERS – число різних підрозділів.
SELECT min(zarpl), max(zarpl),avg(zarpl) FROM PERS
WHERE DEP='Бухгалтерія'– мінімальна, максимальна і середня зарплата в бухгалтерії.
Однак не можна написати так:
SELECT FAM , max(zarpl) FROM PERS
– для видачі списку співробітників з максимальною зарплатою.
Якщо ужити ключові слова GROUP BY зміст сукупних характеристик міняється - вони роблять обчислення не по всіх записах, а тільки по тим, що відповідають однаковим значенням полів.
Приклад. Запит SELECT DEP count(*) FROM PERS GROUP BY DEP – поверне таблицю з двох рядків: назви підрозділу і число співробітників у ньому.
Вкладені оператори select
Результати, що повертаються оператором SELECT можна використовувати в іншому операторі SELECT.
Приклад.
Список прізвищ співробітників підприємства, що одержують максимальну зарплату:
SELECT FAM FROM PERS WHERE ZARPL=(SELECT max(ZARPL) FROM PERS).
Тут вкладений оператор SELECT повертає максимальну зарплату, зовнішній видає список співробітників по знайденій зарплаті.
Приклад.
Потрібно визначити, є чи загальні співробітники в двох різних організаціях.
Для цього видамо список співпадаючих прізвищ : SELECT * FROM PERS1 WHERE FAM IN (SELECT FAM FROM PERS2).
Використовуємо перевірку на входження в множину. Запити здійснюються до різних таблиць.
При роботі з вкладеними запитами можна використовувати ключові слова ANY,ALL,EXISTS,SINGULAR. ALL означає, що умова виконується для всіх записів, ANY – хоча б для однієї.
Приклад.
SELECT FAM FROM PERS WHERE ZARPL>= ALL (SELECT ZARPL FROM PERS) виділяє іншим способом співробітників з найбільш високою зарплатою.
Приклад.
SELECT FAM FROM PERS WHERE DEP=’Бібліотека’ AND ZARPL>= ANY (SELECT ZARPL FROM PERS WHERE DEP LIKE ’Цех%’).
Запит виділяє співробітників бібліотеки з зарплатою не нижче ніж у самих низькооплачуваних працівників будь-якого цеху.
Ключове слово EXISTS означає вибір тільки тих значень, для яких вкладений запит поверне одне чи більше значень, а ключове слово SINGULAR - коли вкладений запит повертає одне і тільки одне значення.
Приклад.
Запит поверне список співробітників, що мають однолітків:
SELECT TABNUM, FAM, YEAR_B FROM PERS P1
WHERE EXISTS(SELECT TABNUM, FAM,YEAR_B FROM PERS P2 WHERE P1.YEAR_B=P2.YEAR_B AND P1.TABNUM<>P2.TABNUM) .
Приклад.
Запит поверне список співробітників, що не мають однолітків:
SELECT TABNUM, FAM, YEAR_B FROM PERS P1
WHERE SINGULAR(SELECT TABNUM, FAM, YEAR_B FROM PERS P2 WHERE P1.YEAR_B=P2.YEAR_B AND P1.TABNUM=P2.TABNUM).
Тут P1 і P2 – псевдоніми таблиці PERS, вони дозволяють звертатися з зовнішнього і вкладеного запиту до одній і тій же таблиці як до різних таблиць.
Псевдоніми мають значення тільки до кінця речення SQL, далі вони стають невизначеними.