Использование подзапросов

Содержание

Слайд 2

Цели Определение подзапросов Назначение подзапросов Типы подзапросов Синтаксис подзапросов

Цели

Определение подзапросов
Назначение подзапросов
Типы подзапросов
Синтаксис подзапросов

Слайд 3

Задачи, решаемые подзапросами У каких сотрудников зарплата больше, чем у Абеля?

Задачи, решаемые подзапросами

У каких сотрудников зарплата больше, чем у Абеля?

Главный запрос:

Какая

зарплата у Авеля?

Подзапрос:

У кого из сотрудников зарплата больше, чем у Авеля?

Слайд 4

Синтаксис SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM

Синтаксис

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

Подзапрос (внутренний запрос) выполняется перед основным запросом (внешний

запрос).
Результат подзапроса используется основным запросом.
Слайд 5

Использование подзапросов SELECT last_name, salary FROM employees WHERE salary > (SELECT

Использование подзапросов

SELECT last_name, salary
FROM employees
WHERE salary >
(SELECT salary
FROM employees

WHERE last_name = 'Abel');

11000

Слайд 6

Правила использования подзапросов Заключите подзапросы в круглые скобки. Поместите подзапросы справа

Правила использования подзапросов

Заключите подзапросы в круглые скобки.
Поместите подзапросы справа от условия

сравнения для удобства чтения. (Однако подзапрос может появиться по обе стороны от оператора сравнения.)
Используйте скалярные операторы для скалярных подзапросов.
Слайд 7

Типы подзапросов Скалярный подзапрос Подзапросы, возвращающие несколько строк Главный запрос подзапрос

Типы подзапросов

Скалярный подзапрос
Подзапросы, возвращающие несколько строк

Главный запрос

подзапрос


возвращает

ST_CLERK

ST_CLERK
SA_MAN

Главный запрос

подзапрос


возвращает

Слайд 8

Скалярные подзапросы Возвращают единственную строку Применимые операторы Более, либо равно >=

Скалярные подзапросы

Возвращают единственную строку
Применимые операторы

Более, либо равно

>=

Менее чем

<

Менее,

либо равно

<=

Равно

=

Не равно

<>

Более чем

>

Описание

Оператор

Слайд 9

Скалярные подзапросы SELECT last_name, job_id, salary FROM employees WHERE job_id =

Скалярные подзапросы

SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id

FROM employees
WHERE last_name = 'Taylor')
AND salary >
(SELECT salary
FROM employees
WHERE last_name = 'Taylor');
Слайд 10

Использование функций группировки SELECT last_name, job_id, salary FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);

Использование функций группировки

SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT

MIN(salary)
FROM employees);
Слайд 11

Конструкция HAVING СУБД сначала выполняет подзапросы. СУБД возвращает результаты в предложение

Конструкция HAVING

СУБД сначала выполняет подзапросы.
СУБД возвращает результаты в предложение HAVING основного

запроса.

SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);

Слайд 12

Возможные ошибки SELECT employee_id, last_name FROM employees WHERE salary = (SELECT

Возможные ошибки

SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees

GROUP BY department_id);
Слайд 13

Если подзапрос не возвращает данные SELECT last_name, job_id FROM employees WHERE

Если подзапрос не возвращает данные

SELECT last_name, job_id
FROM employees
WHERE job_id =
(SELECT

job_id
FROM employees
WHERE last_name = 'Haas');
Слайд 14

Подзапросы, возвращающие несколько строк Должно предшествовать =, !=, >, =. Возвращает

Подзапросы, возвращающие несколько строк

Должно предшествовать =, !=, >, <, <=, >=.

Возвращает TRUE, если отношение TRUE для всех элементов в результирующем наборе подзапроса.

ALL

Равный любому значению в списке

IN

Должно идти после =, !=, >, <, <=, >=. Возвращает TRUE, если хотя бы один элемент существует в результирующем наборе подзапроса, для которого отношение TRUE.

ANY

Значение

Оператор

Слайд 15

Пример SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary (SELECT

Пример

SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY
(SELECT salary

FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';


Слайд 16

Пример SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary (SELECT

Пример

SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary

FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
Слайд 17

Использование оператора EXISTS SELECT * FROM departments WHERE NOT EXISTS (SELECT

Использование оператора EXISTS

SELECT * FROM departments
WHERE NOT EXISTS
(SELECT * FROM employees

WHERE employees.department_id=departments.department_id);

SELECT employee_id,salary,last_name FROM employees M
WHERE EXISTS
(SELECT employee_id FROM employees W
WHERE (W.manager_id=M.employee_id) AND W.salary > 10000);