Язык SQL. Подзапросы. (Лекция 10)

Содержание

Слайд 2

Подзапросы SELECT select_list FROM table1 WHERE expr operator (SELECT select_list FROM

Подзапросы

SELECT select_list
FROM table1
WHERE expr operator
(SELECT select_list FROM table2);
Выполняется до выполнения основного запроса;
Результат выполнения

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

18.11.2017

Горбунов О.Е.

Слайд 3

Подзапросы SELECT last_name, salary FROM employee WHERE salary > (SELECT salary

Подзапросы

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

last_name = 'Abel');

18.11.2017

Горбунов О.Е.

Слайд 4

Однострочные подзапросы Возвращают одну строку Используйте операторы сравнения (>, >=, )

Однострочные подзапросы

Возвращают одну строку
Используйте операторы сравнения (>, >=, <, <=, =,

<>)
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');

18.11.2017

Горбунов О.Е.

Слайд 5

Однострочные подзапросы. Агрегирующие функции в подзапросах SELECT last_name, job_id, salary FROM

Однострочные подзапросы. Агрегирующие функции в подзапросах

SELECT last_name, job_id, salary
FROM employees
WHERE salary

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

18.11.2017

Горбунов О.Е.

Слайд 6

Многострочные подзапросы Возвращают более одной строки Используются специальные операторы IN ANY

Многострочные подзапросы
Возвращают более одной строки
Используются специальные операторы
IN
ANY (используется после оператора сравнения)
ALL

(используется после оператора сравнения)
=ANY эквивалентно IN
<>ALL эквивалентно NOT IN

18.11.2017

Горбунов О.Е.

Слайд 7

Многострочные подзапросы SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary

Многострочные подзапросы
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‘);

18.11.2017

Горбунов О.Е.

Слайд 8

Оператор EXISTS SELECT employee_id,salary,last_name FROM employees M WHERE EXISTS (SELECT employee_id

Оператор EXISTS
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);

18.11.2017

Горбунов О.Е.

Слайд 9

Использование NULL-значений SELECT emp.last_name FROM employee emp WHERE emp.employee_id NOT IN

Использование NULL-значений

SELECT emp.last_name
FROM employee emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM

employee mgr);
Ничего не вернет, если в подзапросе одно из значение будет равно NULL.
Для IN нет подобной проблемы.
Выход – использовать WHERE NOT NULL либо EXISTS и коррелированный подзапрос.

18.11.2017

Горбунов О.Е.