Similar presentations:
Использование подзапросов для решения запросов
1. Использование подзапросов для решения запросов
© Oracle, 2007. Все права защищены.2. Цели
Изучив материал этого занятия, вы сможете:• Определять подзапросы
• Описывать типы проблем, для решения которых можно
использовать подзапросы
• Перечислять типы подзапросов
• Создавать однострочные и многострочные подзапросы
7-2
© Oracle, 2007. Все права защищены.
3. План занятия
• Подзапрос: типы, синтаксис и указания• Однострочные подзапросы:
– групповые функции в подзапросе
– предложение HAVING с подзапросами
• Многострочные подзапросы
– использование оператора ALL или ANY
• Значения NULL в подзапросе
7-3
© Oracle, 2007. Все права защищены.
4. Использование подзапроса для решения проблемы
У кого оклад больше, чем у Abel?Основной запрос:
У кого из сотрудников оклады больше, чем оклад
у Abel?
Подзапрос:
Какой оклад у Abel?
7-4
© Oracle, 2007. Все права защищены.
5. Синтаксис подзапроса
SELECTFROM
WHERE
select_list
table
expr operator
(SELECT
FROM
select_list
table);
• Подзапрос (внутренний запрос) выполняется перед
основным (внешним) запросом.
• Результат подзапроса используется основным запросом.
7-5
© Oracle, 2007. Все права защищены.
6. Использование подзапросов
SELECT last_name, salary11000
FROM
employees
WHERE salary >
(SELECT salary
FROM
employees
WHERE last_name = 'Abel');
7-6
© Oracle, 2007. Все права защищены.
7. Указания по использованию подзапросов
• Заключайте подзапросы в скобки.• Для повышения наглядности кода размещайте
подзапросы справа от условия сравнения (хотя
в принципе запрос допустимо помещать с любой
стороны от условия сравнения).
• Используйте с однострочными подзапросами
однострочные операторы, а с многострочными
подзапросами – многострочные операторы.
7-7
© Oracle, 2007. Все права защищены.
8. Типы подзапросов
• Однострочный подзапросОсновной запрос
Подзапрос
возвращает
ST_CLERK
• Многострочный подзапрос
Основной запрос
Подзапрос
7-8
возвращает
© Oracle, 2007. Все права защищены.
ST_CLERK
SA_MAN
9. План занятия
• Подзапрос: типы, синтаксис и указания• Однострочные подзапросы:
– групповые функции в подзапросе
– предложение HAVING с подзапросами
• Многострочные подзапросы
– использование оператора ALL или ANY
• Значения NULL в подзапросе
7-9
© Oracle, 2007. Все права защищены.
10. Однострочные подзапросы
• Возвращают только одну строку• Используют однострочные операторы сравнения
Оператор Значение
=
Равно
7 - 10
>
Больше
>=
Больше или равно
<
Меньше
<=
Меньше или равно
<>
Не равно
© Oracle, 2007. Все права защищены.
11. Выполнение однострочных подзапросов
SELECT last_name, job_id, salaryFROM
employees
SA_REP
WHERE job_id =
(SELECT job_id
FROM
employees
WHERE last_name = ‘Taylor’)
AND
salary >
8600
(SELECT salary
FROM
employees
WHERE last_name = ‘Taylor’);
7 - 11
© Oracle, 2007. Все права защищены.
12. Использование в подзапросах групповых функций
SELECT last_name, job_id, salary2500
FROM
employees
WHERE salary =
(SELECT MIN(salary)
FROM
employees);
7 - 12
© Oracle, 2007. Все права защищены.
13. Предложение HAVING в подзапросах
• Сервер Oracle выполняет подзапросы первыми.• Сервер Oracle возвращает результаты в предложение
HAVING основного запроса.
SELECT
FROM
GROUP BY
HAVING
department_id, MIN(salary)
employees
department_id
2500
MIN(salary) >
(SELECT MIN(salary)
FROM
employees
WHERE department_id = 50);
…
7 - 13
© Oracle, 2007. Все права защищены.
14. Что неправильно в этой инструкции?
SELECT employee_id, last_nameFROM
employees
WHERE salary =
(SELECT
MIN(salary)
FROM
employees
GROUP BY department_id);
Однострочный
оператор
с многострочным
подзапросом
7 - 14
© Oracle, 2007. Все права защищены.
15. Внутренний запрос не вернул ни одной строки
SELECT last_name, job_idFROM
employees
WHERE job_id =
(SELECT job_id
FROM
employees
WHERE last_name = 'Haas');
Подзапрос не вернул ни одной строки,
поскольку нет сотрудника с фамилией «Haas».
7 - 15
© Oracle, 2007. Все права защищены.
16. План занятия
• Подзапрос: типы, синтаксис и указания• Однострочные подзапросы:
– групповые функции в подзапросе
– предложение HAVING с подзапросами
• Многострочные подзапросы
– использование оператора ALL или ANY
• Значения NULL в подзапросе
7 - 16
© Oracle, 2007. Все права защищены.
17. Многострочные подзапросы
• Возвращают больше одной строки• Используют многострочные операторы сравнения
Оператор
Значение
IN
Равен любому элементу из списка
ANY
Перед ним должны использоваться операторы =,
!=, >, <, <=, >=. Сравнивает текущее значение
ALL
7 - 17
с каждым значением, перечисленным в списке
|или возвращенным запросом. Получает значение
FALSE, если запрос не вернул ни одной строки.
Перед ним должны использоваться операторы =,
!=, >, <, <=, >=. Сравнивает текущее значение со
всеми значениями, перечисленными в списке или
возвращенными запросом. Получает значение
TRUE, если запрос не вернул ни одной строки.
© Oracle, 2007. Все права защищены.
18. Использование оператора ANY в многострочных подзапросах
SELECT employee_id, last_name, job_id, salary9000, 6000, 4200
FROM
employees
WHERE salary < ANY
(SELECT salary
FROM
employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';
…
7 - 18
© Oracle, 2007. Все права защищены.
19. Использование оператора ALL в многострочных подзапросах
SELECT employee_id, last_name, job_id, salary9000, 6000, 4200
FROM
employees
WHERE salary < ALL
(SELECT salary
FROM
employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';
7 - 19
© Oracle, 2007. Все права защищены.
20. План занятия
• Подзапрос: типы, синтаксис и указания• Однострочные подзапросы:
– групповые функции в подзапросе
– предложение HAVING с подзапросами
• Многострочные подзапросы
– использование оператора ALL или ANY
• Значения NULL в подзапросе
7 - 20
© Oracle, 2007. Все права защищены.
21. Значения NULL в подзапросе
SELECT emp.last_nameFROM
employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM
employees mgr);
7 - 21
© Oracle, 2007. Все права защищены.
22.
ЗаключениеНа этом занятии были изучены следующие темы:
• Ситуации, когда для решения проблемы целесообразно
использовать подзапросы
• Создание подзапросов для запросов, учитывающих
неизвестные значения
SELECT
FROM
WHERE
7 - 23
select_list
table
expr operator
(SELECT select_list
FROM
table);
© Oracle, 2007. Все права защищены.
23. Заключение
Упражнение 7: обзорЭто упражнение охватывает следующие темы:
• Создание подзапросов для запроса данных с учетом
неизвестных условий
• Использование подзапросов для поиска значений,
существующих в одном наборе данных и отсутствующих
в другом
7 - 24
© Oracle, 2007. Все права защищены.