Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова запитів SQL.doc
Скачиваний:
24
Добавлен:
09.11.2019
Размер:
108.54 Кб
Скачать

Використання функцій

Оператор 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 – число різних підрозділів.

  1. 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, далі вони стають невизначеними.