SELECT FROM WHERE GROUP BY HAVING ORDER BY
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY 8 column, group_function table condition] group_by_expression] group_condition] column]; А. М. Гудов
SELECT • DISTINCT относится ко всем столбцам в списке SELECT. SQL> SELECT 2 FROM DISTINCT dept_id, title s_emp; Результат применения DISTINCT к нескольким столбцам - вывод строк с неповторяющимися сочетаниями значений этих столбцов. 9 SQL> SELECT 2 3 FROM first_name ||' '|| last_name ||', '|| title "Employees" s_emp; SQL> SELECT 2 3 FROM last_name, title, salary*NVL(commission_pct, 0)/100 COMM s_emp; А. М. Гудов
Функции преобразования регистра Преобразование регистра для строки символов • • LOWER('SQL Course') sql course UPPER('SQL Course') SQL COURSE • INITCAP('SQL Course') Sql Course SQL> SELECT first_name, last_name 2 FROM s_emp 3 WHERE last_name = 'PATEL'; no rows returned SQL> SELECT first_name, last_name 2 FROM s_emp 3 WHERE UPPER(last_name) = 'PATEL'; FIRST_NAME LAST_NAME ----------Vikram Patel Radha Patel 16 А. М. Гудов
Групповые функции • • 23 AVG (DISTINCT|ALL|n) COUNT (DISTINCT|ALL|expr|*) MAX (DISTINCT|ALL|expr) MIN (DISTINCT|ALL|expr) STDDEV (DISTINCT|ALL|n) SUM (DISTINCT|ALL|n) VARIANCE (DISTINCT|ALL|n) А. М. Гудов
Вывод конкретных групп с помощью предложения HAVING SQL> 2 3 4 5 COLUMN SELECT COUNT(*) FROM GROUP BY HAVING ”ANNUAL SALARY” FORMAT $99, 999. 99 title, 12 * AVG(salary) ”ANNUAL SALARY”, ”NUMBER OF EMPLOYEES” s_emp title COUNT(*) > 2; Предложение HAVING (исключение групп) TITLE ANNUAL SALARY NUMBER OF EMPLOYEES ------------------Sales Representative $17, 712. 00 5 Stock Clerk $11, 388. 00 10 Warehouse Manager $14, 776. 80 5 24 Вывод групп по должностям в соответствии с ограничениями в предложении HAVING. А. М. Гудов
Пример Выбрать заказчиков, общая сумма заказов которых не более 50 000 SQL> SELECT c. id 2 FROM s_customer c, s_ord o 3 WHERE o. CUSTOMER_ID=c. id 4 GROUP BY c. id 5 HAVING sum(o. total) <= 50000; 27 А. М. Гудов
Как обрабатываются подзапросы? SQL> SELECT last_name 2 FROM s_emp 3 WHERE dept_id = 4 (SELECT dept_id FROM s_emp 5 WHERE last_name = ‘Biri’); 1. Вложенная команда SELECT выполняется первой. SELECT 2. Результат передается в условие главного запроса. Вложенный запрос Главный запрос SELECT dept_id FROM s_emp WHERE last_name='Biri'; SELECT last_name, title FROM s_emp WHERE dept_id = 43 31 А. М. Гудов
Примеры заданий 1. Получить ФИО продавца и количество товаров в заказе 100. 2. Получить фамилии, должности и зарплаты всех служащих с зарплатой ниже средней. select e. LAST_NAME, e. FIRST_NAME, sum(i. QUANTITY) from s_emp e, s_ord o, s_item i where o. SALES_REP_ID=e. ID and i. ORD_ID=o. id and o. ID=100 group by e. LAST_NAME, e. FIRST_NAME select e. last_name, e. title, e. salary from s_emp e where e. SALARY < (select avg(salary) from s_emp e 1) 39 А. М. Гудов
- Slides: 43