Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
10.05.2014
Размер:
197.81 Кб
Скачать

 

 

 

 

SQL

 

 

 

 

 

 

Использование IN и EXISTS.

 

Emp

 

Dept

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dep_id

Emp_id

 

Salary

 

Dep_id

Name_dept

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

10

 

100

 

1

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

15

 

150

 

2

IT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

20

 

200

 

3

$ % ' % ()

 

 

 

 

 

 

 

 

 

 

 

 

 

2

25

 

250

SELECT * FROM EMP e

 

 

 

 

 

 

 

 

 

 

 

3

30

 

300

WHERE d.dep_id IN

 

 

 

 

 

 

 

 

 

 

(SELECT e.dep_id FROM DEPT d);

 

 

 

 

 

4

70

 

500

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обрабатывается как:

SELECT * FROM EMP e, (SELECT DISTINCT dept_id from DEPT) d WHERE d.dep_id =e.dep_id

 

 

 

 

 

 

SQL

 

 

 

 

 

 

 

 

Использование IN и EXISTS.

 

Emp

 

Dept

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dep_id

Emp_id

 

Salary

 

Dep_id

Name_dept

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

10

 

100

 

1

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

15

 

150

 

2

 

IT

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

20

 

200

 

3

 

$ % ' % ()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

25

 

250

SELECT * FROM EMP e

 

 

 

 

 

 

 

 

 

 

 

WHERE EXISTS

 

 

 

3

30

 

300

 

 

(SELECT null

 

 

 

 

 

 

 

 

 

 

 

 

4

70

 

500

 

FROM

DEPT d WHERE d.dep_id=e.dep_id);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обрабатывается как:

for dep_id in (select * from EMP E) loop

if (exists (select null from DEPT D where D.dep_id = E.dep_id)) then ВЫДАТЬ ЗАПИСЬ

end if end loop

SQL

Использование NOT IN и NOT EXISTS.

Emp

Mgr_id

Emp_id

Salary

 

 

 

1

10

100

 

 

 

null

3

150

 

 

 

2

20

200

 

 

 

2

25

250

 

 

 

3

30

300

 

 

 

4

70

500

 

 

 

SELECT count(*) FROM EMP e WHERE e.emp_id NOT IN

(SELECT Mgr_id FROM EMP);

---------------------------------

Результат: 0

SELECT count(*) FROM EMP e WHERE NOT EXISTS

(SELECT null FROM EMP m where e.emp_id=m.mgr_id);

---------------------------------

Результат: 5

SQL

Использование NOT IN и NOT EXISTS.

Обобщенные правила по использованию IN,NOT IN, EXISTS, NOT EXISTS

1.Правила, описанные ниже не являются рецептами на все случаи жизни. В зависимости от конкретной ситуации из них могут быть исключения.

2.Принцип работы EXIST и NOT EXISTS во многом аналогичен.

3.Принцип работы IN и NOT IN во многом аналогичен если нет значений NULL. Если присутствуют значения NULL, работа IN и NOT IN отличается.

4.Предикат NOT IN не содержит значений NULL.

5.Предикат IN может работать эффективней чем EXISTS, если внешний запрос работает с большим набором данных, а внутренний с не большим.

6.Предикат EXISTS может работать эффективней чем IN, если внешний запрос работает с небольшим набором данных, а внутренний с большим.

7.Результат работы NOT IN и NOT EXISTS различен, если в данных присутствует NULL.

8.Результат работы NOT IN и NOT EXISTS одинаковый, если в данных нет значений NULL, но производительность работы разная.

SQL

Теоретико-множественные операции

UNION или UNION ALL – для операции объединения, MINUS – для операции вычитания,

INTERSECT – для операции пересечения.

Операция UNION

A B

Возвращает результат объединения двух запросов, исключая дубликаты.

SELECT Dep_id FROM Dep UNION SELECT Dep_id FROM Emp

--------

1

2

3

SQL

Теоретико-множественные операции

Операция UNION ALL

A B

Возвращает результат объединения двух запросов, включая дубликаты.

SELECT Dep_id FROM Dep UNION ALL SELECT Dep_id FROM Emp

--------

1

1

2

3

SQL

Теоретико-множественные операции

Операция INTERSECT

A B

Возвращает строки, которые присутствуют в обоих запросах.

SELECT Dep_id FROM Dep WHERE Dep_id <>3 INTERSECT

SELECT Dep_id

FROM Emp

--------

1

2

SQL

Теоретико-множественные операции

Операция MINUS

A B

Возвращает строки первого запроса, которые отсутствуют во втором

SELECT Dep_id FROM Dep MINUS SELECT Dep_id FROM Emp

WHERE Dep_id NOT IN(1,2)

--------

1

2

3

SQL

Агрегирующие функции

Агрегирующие или групповые функции, работают с набором строк и предоставляют один результат в группе

 

Сотрудник

 

 

Номер отдела

Зарплата

 

 

1

100

 

 

1

150

 

 

1

80

 

 

2

200

 

 

2

300

 

 

3

100

 

 

3

110

 

 

3

130

 

 

3

180

 

 

Минимальная зарплата

MIN(зарплата)

 

В таблице «Сотрудник»

80

SQL

Типы агрегирующих функций. Синтаксис.

AVG

COUNT

MAX

MIN

SUM

Групповые

функции

SELECT

[column,] Групповая_функция(column), ...

FROM

таблица

[WHERE

условие]

[GROUP BY

column]

[ORDER BY

column];

Соседние файлы в папке Презентации БД (ВФ)