
Презентации БД (ВФ) / DB_lec6
.pdf
SQL
Вложенное табличное выражение (подзапрос)
Многострочный подзапрос
Emp
SELECT Emp_id, Dep_id, salary |
||
FROM emp |
200,250 |
|
WHERE salary <ALL |
||
|
||
(SELECT salary |
|
|
FROM emp |
|
|
WHERE Dep_id = 2); |
SELECT Emp_id, Dep_id, salary FROM emp
WHERE Dep_ID NOT IN (SELECT Dep_id FROM emp WHERE Dep_id = 1);
Dep_id |
Emp_id |
Salary |
|
|
|
1 |
10 |
100 |
|
|
|
1 |
15 |
150 |
|
|
|
2 |
20 |
200 |
|
|
|
2 |
25 |
250 |
|
|
|
3 |
30 |
300 |
|
|
|
РЕЗУЛЬТАТ ?

|
|
|
SQL |
|
|
|
|||||||
|
|
|
Коррелированный подзапрос. |
|
Emp |
||||||||
|
Dept |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dep_id |
Emp_id |
|
Salary |
|
Dep_id |
Name_dept |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
1 |
10 |
|
100 |
|
|
1 |
|
P , % = |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
1 |
15 |
|
150 |
|
|
2 |
|
IT |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
2 |
20 |
|
200 |
|
3 |
|
R $ $% |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
2 |
25 |
|
250 |
|
SELECT Emp_id emp, Name_dept Name |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
||||||
3 |
30 |
|
300 |
||||||||||
FROM |
dept d |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
||||||
WHERE EXISTS |
|
|
|
4 |
70 |
|
500 |
||||||
|
|
(SELECT null |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|||||||
|
|
FROM emp e |
|
|
|
1 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
WHERE d.Dep_id = e.Dept_id); |
|
|
|
|
|
||||||
|
|
|
2 |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
SQL |
|
|
|
|||||
|
|
|
Коррелированный подзапрос. |
|
Emp |
|||||||
|
Dept |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dep_id |
Emp_id |
|
Salary |
|
Dep_id |
Name_dept |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
1 |
10 |
|
100 |
|
1 |
|
P , % = |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
1 |
15 |
|
150 |
|
2 |
|
IT |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
2 |
20 |
|
200 |
|
3 |
|
R $ $% |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
2 |
25 |
|
250 |
|
|
|
|
|
|
|
|
|
|
|||
SELECT Emp_id emp, Name_dept Name |
|
|||||||||||
|
|
|
|
|||||||||
3 |
30 |
|
300 |
|||||||||
FROM |
dept d |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
||||
WHERE d.dep_id IN |
|
|
|
|
|
4 |
70 |
|
500 |
|||
|
|
(SELECT e.dep_id |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
||
|
|
FROM emp e); |
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

SQL
Конструкция WHERE
SELECT список_вывода
FROM источники
WHERE условие_отбора_строк
GROUP BY список_для_группирования
HAVING условие_отбора_групп
ORDER BY список_для_упорядочивания
WHERE условие_поиска
В результате использования WHERE, будут получены только те строки, для которых условие_поиска истенно.
Условие поиска имеет ограничения:
1.Имя колонки имя должно уникально идентифицировать колонку исходной таблицы .
2.В условии поиска конструкции WHERE НЕ МОГУТ!!! быть использованы агрегатные функции

SQL
Конструкция GROUP BY
SELECT список_вывода
FROM источники
WHERE условие_отбора_строк
GROUP BY список_для_группирования
HAVING условие_отбора_групп
ORDER BY список_для_упорядочивания
GROUP BY элемент [, элемент …]
Используется когда в список вывода конструкции SELECT включаются, в том числе, и выражения, содержащие агрегатные функции.
Элемент представляется в виде некоторого выражения группирования, содержащего имена колонок и используемого для определения группы строк.
Каждому выражению списка вывода, не содержащему агрегатную функцию, должно соответствовать выражение группирования. Т.е. выражения к которым не применяется агрегатная функция должны присутствовать в GROUP BY.

SQL
Конструкция HAVING
SELECT список_вывода
FROM источники
WHERE условие_отбора_строк
GROUP BY список_для_группирования
HAVING условие_отбора_групп
ORDER BY список_для_упорядочивания
HAVING условие_поиска
Синтаксические правила условие_поиска соответствует WHERE.
В условии поиска HAVING допускается использование имен колонок, идентифицирующих каждую группу таблицы, и агрегатных функций, применяемых к полученным группам.
SELECT DeptID, SUM(Salary)
FROM Emp
GROUP BY DeptID
HAVING SUM(Salary) >100

SQL
Конструкция HAVING
SELECT список_вывода
FROM источники
WHERE условие_отбора_строк
GROUP BY список_для_группирования
HAVING условие_отбора_групп
ORDER BY список_для_упорядочивания
ORDER BY ключ_сортировки [направление_сортировки] , …
В качестве ключа_сортировки могут быть указаны имя колонки или прост целое.
Направление_сортировки
По возрастанию(ASC) |
По убыванию(DESC) |
|
|
по умолчанию |
|