Лекция 4: SQL›екция_4.pdf · Курсовая работа 1)...

77
Лекция 4: Лекция 4: SQL SQL Лектор — Николаев В.В. Лектор — Николаев В.В. 2017 уч. год 2017 уч. год

Transcript of Лекция 4: SQL›екция_4.pdf · Курсовая работа 1)...

Page 1: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Лекция 4:Лекция 4:SQLSQL

Лектор — Николаев В.В.Лектор — Николаев В.В.2017 уч. год2017 уч. год

Page 2: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

0. Введение0. Введение

Page 3: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Курсовая работаКурсовая работа

1) представление предметной области (4.03.2017)

2) ER-модель (13.04.2017)

3) Даталогическая модель (06.05.2017)

4) Итоговое построение БД (01.06.2017)

Page 4: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Модель:

● Типы данных

● Отображение MTM-связи

● Ключи

(!) SQL-код с ограничениями

Даталогическая модельДаталогическая модель

Page 5: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1. Язык SQL1. Язык SQL

Page 6: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● SQL (structured query language) — формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных.

● Основывается на исчислении кортежей.

● Разработан в 1970-е гг. в компании IBM.

● Первая СУБД, поддерживающая SQL — Oracle V2 (1979 г.).

О языкеО языке

Page 7: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Каждое предложение SQL — это либо запрос данных из базы, либо обращение к базе данных, которое приводит к изменению данных в базе.

Различают следующие типы запросов:

● запросы на создание или изменение в базе данных новых или существующих объектов;

● запросы на получение данных;

● запросы на добавление новых данных (записей);

● запросы на удаление данных;

● обращения к СУБД.

Особенности языкаОсобенности языка

Page 8: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Возвращает набор данных из БД, удовлетворяющих заданному условию.

Формат запроса:

SELECT список полей FROM список таблиц WHERE условия…

Оператор Оператор SELECTSELECT

Page 9: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Основные ключевые слова:

● WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.

● GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.

● HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.

● ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.

Оператор Оператор SELECTSELECT

Page 10: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Позволяет группировать строки и использовать агрегатные функций (MAX, SUM, AVG, …).

● Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения.

● Пример использования:

Запрос возвращает список людей с общей суммой их продаж:

SELECT ID, SUM(Value) FROM Sales GROUP BY ID;

ПараметрПараметр GROUP BY GROUP BY

Page 11: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

ПараметрПараметр GROUP BY GROUP BY

SELECT ID, SUM(Value) FROM Sales GROUP BY ID;

ID Value

1 40

1 120

1 10

2 50

2 100

2 75

2 25

3 200

ID Value

1 170

2 250

3 200

Группа 1

Группа 2

Группа 3

Page 12: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Позволяет указывать условия на результат агрегатных функций (MAX, SUM, AVG, …).

● Аналогичен WHERE за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов, указанных в GROUP BY, и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY.

● Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения.

● Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы.

ПараметрПараметр HAVING HAVING

Page 13: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

ПараметрПараметр HAVING HAVING

● Пример использования:

Возвращает список идентификаторов отделов, продажи которых превысили 1500 долларов за 1 января 2017 года, вместе с суммами продаж за этот день:

SELECT DeptID, SUM(SaleAmount) FROM Sales WHERE SaleDate = '01-Jan-2017' GROUP BY DeptID HAVING SUM(SaleAmount) > 1500;

Page 14: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

2. Функции и операторы2. Функции и операторы

Page 15: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● AND

● OR

● NOT

Логические операторыЛогические операторы

Три состояния:

true, false, NULL (неопределённое состояние) 

Page 16: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Таблицы истинностиТаблицы истинности

AND и OR коммутативны: от перемены мест операндов результат не меняется

a b a AND b a OR b

TRUE TRUE TRUE TRUE

TRUE FALSE FALSE TRUE

TRUE NULL NULL TRUE

FALSE FALSE FALSE FALSE

FALSE NULL FALSE NULL

NULL NULL NULL NULL

a NOT a

TRUE FALSEFALSE TRUENULL NULL

Page 17: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Операторы сравненияОператоры сравнения

● Операторы бинарные

● Возвращают значения типа boolean

● Выдают NULL, когда любое из сравниваемых значений NULL

> Больше

< Меньше

>= Больше или равно

<= Меньше или равно

= Равно

<> или != Не равно

Page 18: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Предикаты сравненияПредикаты сравнения

a BETWEEN x AND y /* между */

a NOT BETWEEN x AND y /* не между */

a IS DISTINCT FROM b /* отличимо от */

a IS NOT DISTINCT FROM b /* неотличимо от */

выражение IS NULL /* эквивалентно NULL */

выражение IS NOT NULL /* не эквивалентно NULL */

Page 19: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

a BETWEEN x AND y

?

a NOT BETWEEN x AND y

?

Предикаты через операторыПредикаты через операторы

Page 20: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

a BETWEEN x AND y

a >= x AND a <= y

a NOT BETWEEN x AND y

a < x OR a > y

Предикаты через операторыПредикаты через операторы

Page 21: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Математические операторыМатематические операторы

Оп. Описание Пример

+ Сложение 5 + 7

- Вычитание 7 - 5

* Умножение 7 * 5

/ Деление (при целочисленном делении остаток отбрасывается)

8 / 4

% Остаток от деления 3 % 2

^ Возведение в степень 4.0 ^ 3.0

|/ Квадратный корень |/ 4

||/ Кубический корень ||/ 64

! Факториал 3 !

!! Факториал (префиксная форма) !! 3

Page 22: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Строковые функции и Строковые функции и операторыоператоры

string || string /* Конкатенация строк */

position(substring in string) /* Положение указанной подстроки */

substring(string from шаблон) /* Извлекает подстроку */

bit_length(string) /* Число бит в строке */

/* … */

Page 23: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Поиск по шаблонуПоиск по шаблону

● LIKE /* SQL */

● SIMILAR TO /* SQL:1999 */

● регулярные выражения в стиле POSIX

Page 24: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Поиск по шаблону: LIKEПоиск по шаблону: LIKE

● строка LIKE шаблон

● строка NOT LIKE шаблон

Выражение LIKE возвращает true, если строка соответствует заданному шаблону.

'abc' LIKE '_b_' /* true */

'abc' LIKE 'c' /* false */

ILIKE — регистро-независимый поиск

Page 25: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Поиск по шаблону: SIMILAR TOПоиск по шаблону: SIMILAR TO

● строка SIMILAR TO шаблон

● строка NOT SIMILAR TO шаблон

Выражение SIMILAR TO возвращает true, если строка соответствует заданному шаблону.

Поддерживает больше видов регулярных выражений, чем LIKE

Page 26: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Регулярные выражения POSIXРегулярные выражения POSIX

● ~ /* Проверяет соответствие регулярному выражению с учётом регистра */

● ~* /* Проверяет соответствие регулярному выражению без учёта регистра */

● !~ /* Проверяет несоответствие регулярному выражению с учётом регистра */

● !~* /* Проверяет несоответствие регулярному выражению без учёта регистра

*/

Page 27: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Регулярные выражения POSIXРегулярные выражения POSIX

● Предоставляют более мощные средства поиска по шаблонам, чем операторы LIKE и SIMILAR TO

● Примеры:

'abc' ~ 'abc' /* ? */

'abc' ~ '(b|d)' /* ? */

'abc' ~ '^(b|c)' /* ? */

Page 28: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Регулярные выражения POSIXРегулярные выражения POSIX

● Предоставляют более мощные средства поиска по шаблонам, чем операторы LIKE и SIMILAR TO

● Примеры:

'abc' ~ 'abc' /* true */

'abc' ~ '(b|d)' /* true */

'abc' ~ '^(b|c)' /* false */

Page 29: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

if/then/else в других языках программирования:

CASE WHEN условие THEN результат

[WHEN ...]

[ELSE результат]

END

Условные выражения: СASEУсловные выражения: СASE

Page 30: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Условные выраженияУсловные выражения

1. CASE можно использовать везде, где допускаются выражения

2. Каждое условие представляет собой выражение, возвращающее boolean

3. Если не выполняются условия WHEN, значением CASE становится результат в ELSE

4. Если в 3. предложение ELSE отсутствует, результатом будет NULL

Page 31: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

SELECT РЕЗ FROM ЭКЗАМЕН; РЕЗ--- 77 92 81SELECT РЕЗ, CASE WHEN РЕЗ>=91 THEN 'Отлично' WHEN РЕЗ>=75 THEN 'Хорошо' ... ELSE 'other' END FROM ЭКЗАМЕН;РЕЗ | case----+------- 77 | Хорошо 92 | Отлично 81 | Хорошо

Условные выраженияУсловные выражения

Page 32: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● CAST ( expression AS type ) /* SQL-синтаксис */

● expression::type /* PostgreSQL */

● typename ( expression ) /* через функцию */

Пример:

SELECT CAST(42 AS float8);

/* через функцию float8(int4) */

Преобразования типовПреобразования типов

CREATE CAST (source_type AS target_type) WITH FUNCTION function_name (argument_type [, ...])

Page 33: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● выражение IN (значение [, …])

Результат «true», если значение выражения равняется одному из значений выражений в правой части:

выражение = значение1

OR

выражение = значение2

OR ...

ININ

Page 34: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

3. Запросы с использованием 3. Запросы с использованием нескольких таблицнескольких таблиц

Page 35: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Запросы с использованиемЗапросы с использованиемнескольких таблицнескольких таблиц

Вывести список всех студентов из России:

2 таблицы:

СТУДЕНТЫ(ИД, ФАМИЛИЯ, ГОРОД)

ГОРОДА(НАЗВ, СТРАНА)

Page 36: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Соединение с помощью фразыСоединение с помощью фразыWHEREWHERE

Вывести список всех студентов из России:

SELECT ФАМИЛИЯ, ГОРОД

FROM СТУДЕНТЫ, ГОРОДА

WHERE ГОРОДА.НАЗВ = СТУДЕНТЫ.ГОРОД AND ГОРОДА.СТРАНА = 'Россия';

Page 37: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Запросы с использованиемЗапросы с использованиемнескольких таблицнескольких таблиц

1.СУБД формирует строки декартова произведения таблиц, перечисленных во фразе FROM.

2.СУБД проверяет, удовлетворяют ли данные в сформированной строке условиям из фразы WHERE.

3.Если данные в строке удовлетворяют условию из фразы WHERE, то СУБД включает в ответ на запрос те поля строки, которые соответствуют столбцам, перечисленным во фразе SELECT.

Page 38: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Декартово произведение Декартово произведение таблицтаблиц

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

=> SELECT * FROM t1,t2; num | name | num | value-----+------+-----+------- 1 | a | 1 | xxx 1 | a | 3 | yyy 1 | a | 5 | zzz 2 | b | 1 | xxx 2 | b | 3 | yyy 2 | b | 5 | zzz 3 | c | 1 | xxx 3 | c | 3 | yyy 3 | c | 5 | zzz

t1: t2:

Page 39: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Декартово произведение n таблиц — это таблица, содержащая все возможные строки s, такие, что s является сцеплением какой-либо строки из первой таблицы, строки из второй таблицы, ... и строки из n-й таблицы.

● Количество строк декартова произведения таблиц равно произведению количества строк соединяемых таблиц.

Декартово произведение Декартово произведение таблицтаблиц

Page 40: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

5. Соединения (Joins)5. Соединения (Joins)

Page 41: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

СоединенияСоединения

Начиная с SQL:1992 и для соединений таблиц принято использовать фразу JOIN.

● T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 ON boolean_expression

● T1 { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2 USING ( join column list )

● T1 NATURAL { [INNER] | { LEFT | RIGHT | FULL } [OUTER] } JOIN T2

Page 42: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Соединения (JOIN ON)Соединения (JOIN ON)

В предложении с ON указываются выражения логического типа. Пара строк из таблиц 1 и 2 соответствуют друг другу, если выражение ON возвращает для них true.

SELECT ФАМИЛИЯFROM СТУДЕНТЫJOIN ГОРОДА ON (ГОРОД = НАЗВ);

Позволяет сформировать эквисоединение таблиц

Page 43: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Соединения (JOIN USING)Соединения (JOIN USING)

● USING — сокращённая запись условия, когда с обеих сторон соединения столбцы имеют одинаковые имена. Например, запись соединения таблиц T1 и T2 с USING (at1, at2) формирует условие:

ON T1.at1 = T2.at1 AND T1.at2 = T2.at2

● При выводе JOIN USING исключаются избыточные столбцы.

SELECT ФАМИЛИЯFROM СТУДЕНТЫJOIN ОЛИМПИАДНИКИ USING (ИД);

Page 44: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Соединения (NATURAL JOIN)Соединения (NATURAL JOIN)

NATURAL — упрощённая форма USING: образует список USING из всех имён столбцов, существующих в обеих входных таблицах.

Если столбцов с одинаковыми именами нет, NATURAL работает как CROSS JOIN.

SELECT ФАМИЛИЯFROM СТУДЕНТЫNATURAL JOIN ОЛИМПИАДНИКИ;

Page 45: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● INNER JOIN

● LEFT OUTER JOIN

● RIGHT OUTER JOIN

● FULL OUTER JOIN

● CROSS JOIN

Виды соединенийВиды соединений

Page 46: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Для каждой строки из исходной таблицы T1 итоговая таблица включает строку для каждой строки из таблицы T2, если строка удовлетворяет условию соединения.

INNER JOININNER JOIN

Page 47: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

INNER JOININNER JOIN

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

t1: t2:

=> SELECT * FROM t1 INNER JOIN t2 USING (num); num | name | value-----+------+------- 1 | a | xxx 3 | c | yyy

Page 48: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1.Сначала выполняется внутреннее соединение (INNER JOIN).

2.В результат добавляются все строки из таблицы T1, которым не соответствуют никакие строки из таблицы T2; вместо значений столбцов T2 вставляются NULL.

В результирующей таблице всегда будет минимум одна строка для каждой строки из T1.

LEFT OUTER JOINLEFT OUTER JOIN

Page 49: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

LEFT OUTER JOINLEFT OUTER JOIN

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

t1: t2:

=> SELECT * FROM t1 LEFT JOIN t2 USING (num); num | name | value-----+------+------- 1 | a | xxx 2 | b | 3 | c | yyy

Page 50: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1.Сначала выполняется внутреннее соединение (INNER JOIN).

2.В результат добавляются все строки из таблицы T2, которым не соответствуют никакие строки из таблицы T1; вместо значений столбцов T1 вставляются NULL.

Это соединение является обратным к левому (LEFT JOIN): в результирующей таблице всегда будет минимум одна строка для каждой строки из таблицы T2.

RIGHT OUTER JOINRIGHT OUTER JOIN

Page 51: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

RIGHT OUTER JOINRIGHT OUTER JOIN

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

t1: t2:

=> SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num; num | name | num | value-----+------+-----+------- 1 | a | 1 | xxx 3 | c | 3 | yyy | | 5 | zzz

Page 52: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1.Сначала выполняется внутреннее соединение.

2.В результат добавляются все строки из таблицы T1, которым не соответствуют никакие строки из таблицы T2; вместо значений столбцов T2 вставляются NULL.

3.В результат добавляются все строки из таблицы T2, которым не соответствуют никакие строки из таблицы T1; вместо значений столбцов T1 вставляются NULL.

FULL OUTER JOINFULL OUTER JOIN

Page 53: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

FULL OUTER JOINFULL OUTER JOIN

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

t1: t2:

=> SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num; num | name | num | value-----+------+-----+------- 1 | a | 1 | xxx 2 | b | | 3 | c | 3 | yyy | | 5 | zzz

Page 54: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Осуществляет полное перекрестное соединение двух таблиц.

Каждая строка первой таблицы соединяется со всеми строками второй таблицы, что создает результирующий набор — декартово произведение таблиц.

CROSS JOINCROSS JOIN

Page 55: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

CROSS JOINCROSS JOIN

num | name-----+------ 1 | a 2 | b 3 | c

num | value-----+------- 1 | xxx 3 | yyy 5 | zzz

=> SELECT * FROM t1 CROSS JOIN t2; num | name | num | value-----+------+-----+------- 1 | a | 1 | xxx 1 | a | 3 | yyy 1 | a | 5 | zzz 2 | b | 1 | xxx 2 | b | 3 | yyy 2 | b | 5 | zzz 3 | c | 1 | xxx 3 | c | 3 | yyy 3 | c | 5 | zzz

t1: t2:

Page 56: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

5. Вложенные подзапросы5. Вложенные подзапросы

Page 57: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Вложенный подзапрос (subquery) — предложение SELECT, которое заключено в круглые скобки и вложено в WHERE/HAVING часть другого SQL-предложения.

● Может содержать в своей WHERE (HAVING) - части другой вложенный подзапрос.

● Во внешнем и вложенном подзапросе может использоваться одна и та же таблица.

Вложенный подзапросВложенный подзапрос

Page 58: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Простые вложенные подзапросы применяются для получения множества значений, которые проверяются в основном запросе:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE ГОРОД IN (

SELECT НАЗВ FROM ГОРОДА WHERE ГОРОДА.СТРАНА = 'Россия'

);

Простые вложенные подзапросыПростые вложенные подзапросы

Page 59: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Обрабатываются "снизу вверх": первым обрабатывается вложенный подзапрос самого нижнего уровня.

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE ГОРОД IN (

SELECT НАЗВ FROM ГОРОДА WHERE ГОРОДА.СТРАНА = 'Россия'

);

Простые вложенные подзапросыПростые вложенные подзапросы

Получаем список городов в России, используем их для

выполнения внешнего запроса

Page 60: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Обрабатываются "снизу вверх": первым обрабатывается вложенный подзапрос самого нижнего уровня.

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE ГОРОД IN (

'Москва', 'Санкт-Петербург', ...

);

Простые вложенные подзапросыПростые вложенные подзапросы

Page 61: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

То же можно получить с помощью соединения:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE ГОРОД IN (

SELECT НАЗВ FROM ГОРОДА

WHERE

ГОРОДА.СТРАНА = 'Россия'

);

Простые вложенные подзапросыПростые вложенные подзапросы

SELECT ФАМИЛИЯFROM СТУДЕНТЫJOIN ГОРОДА ON (ГОРОД = НАЗВ) WHERE ГОРОДА.СТРАНА = 'Россия');

Page 62: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

Вложенный подзапрос не может быть выполнен до обработки внешнего запроса:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

SELECT 1 FROM ОЛИМПИАДНИКИ WHERE ИД = СТУДЕНТЫ.ИД

);

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Page 63: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Вложенный подзапрос зависит от значения СТУДЕНТЫ.ИД.

● Это значение изменяется по мере того, как СУБД проверяет строки таблицы СТУДЕНТЫ.

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

SELECT 1 FROM ОЛИМПИАДНИКИ WHERE

ИД = СТУДЕНТЫ.ИД

);

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Page 64: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1. СУБД проверяет первую строку таблицы СТУДЕНТЫ (ИД = 1). Значение СТУДЕНТЫ.ИД в этот момент = 1. СУБД обрабатывает внутренний запрос, получая в результате 1, если такой олимпиадник есть:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

SELECT 1 FROM ОЛИМПИАДНИКИ WHERE

ИД = СТУДЕНТЫ.ИД

);

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Page 65: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1. СУБД проверяет первую строку таблицы СТУДЕНТЫ (ИД = 1). Значение СТУДЕНТЫ.ИД в этот момент = 1. СУБД обрабатывает внутренний запрос, получая в результате 1, если такой олимпиадник есть:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

SELECT 1 FROM ОЛИМПИАДНИКИ WHERE

ИД = 1

);

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Page 66: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

1. СУБД проверяет первую строку таблицы СТУДЕНТЫ (ИД = 1). Значение СТУДЕНТЫ.ИД в этот момент = 1. СУБД обрабатывает внутренний запрос, получая в результате 1, если такой олимпиадник есть:

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

1

);

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Включаем в результат

Page 67: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

2. Система будет повторять обработку для каждой строки из таблицы СТУДЕНТЫ, пока не будут рассмотрены все строки таблицы СТУДЕНТЫ.

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

SELECT ФАМИЛИЯFROM СТУДЕНТЫWHERE EXISTS ( SELECT 1 FROM ОЛИМПИАДНИКИ WHERE ИД = 2);

Page 68: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Обрабатываются СУБД в обратном порядке.

● Сначала выбирается первая строка таблицы, сформированной основным запросом. Из этой строки выбираются значения тех столбцов, которые используются во вложенном подзапросе.

● Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат.

Коррелированные вложенные Коррелированные вложенные подзапросыподзапросы

Page 69: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

6. Операторы для работы со 6. Операторы для работы со вложенными подзапросамивложенными подзапросами

Page 70: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● выражение IN (подзапрос)

● Подзапрос должен возвращать ровно один столбец.

● Результат выражения сравнивается с каждым значением, возвращённым подзапросом.

● Результатом выражения IN будет «true», если значение выражения соответствует хотя бы одному значению, которое вернул подзапрос; «false» в противном случае (включая случай, когда подзапрос не возвращает строк).

ININ

Page 71: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● EXISTS (подзапрос)

● EXISTS принимает оператор SELECT (подзапрос)

● Если подзапрос возвращает хотя бы одну строку, то результатом EXISTS будет «true», а если не возвращает ни одной — «false».

EXISTSEXISTS

Page 72: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● Вывести фамилии студентов, попавших на комиссию?

СТУДЕНТЫ (ИД, ФАМИЛИЯ)

КУРСЫ (ИД, СТУД_ИД, РЕЗУЛЬТАТ)

EXISTSEXISTS

Page 73: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

● EXISTS (подзапрос)

SELECT ФАМИЛИЯ

FROM СТУДЕНТЫ

WHERE EXISTS (

SELECT 1 FROM КУРСЫ WHERE СТУДЕНТЫ.ИД = КУРСЫ.СТУД_ИД AND

РЕЗУЛЬТАТ < 60

);

EXISTSEXISTS

Page 74: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

выражение оператор ANY (подзапрос)

выражение оператор SOME (подзапрос)

● Подзапрос должен возвращать ровно один столбец

● Значение выражения сравнивается со значением в каждой строке результата подзапроса с помощью заданного оператора, который должен возвращать логическое значение.

● Результатом ANY будет «true», если хотя бы для одной строки условие истинно, и «false» в противном случае (в том числе, если подзапрос не возвращает строк).

ANY/SOMEANY/SOME

Page 75: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

SELECT *

FROM Students

WHERE id = ANY

( SELECT stid FROM Exams );

ANY, примерANY, пример

Page 76: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

выражение оператор ALL (подзапрос)

● Подзапрос должен возвращать ровно один столбец

● Значение выражения сравнивается со значением в каждой строке результата подзапроса с помощью оператора, который должен возвращать логическое значение.

● Результатом ALL будет «true», если условие истинно для всех строк (и когда подзапрос не возвращает строк), и «false», если находятся строки, для которых оно ложно.

● Результат будет NULL, если сравнение не возвращает false ни для одной из строк, но как минимум для одной результат сравнения NULL.

ALLALL

Page 77: Лекция 4: SQL›екция_4.pdf · Курсовая работа 1) представление предметной области (4.03.2017) 2) er-модель (13.04.2017)

При подготовке презентации использовались материалы из:

● Введение в реляционные базы данных / В. В. Кириллов, Г. Ю. Громов, Издательство: BHV, 2009 г.

● Документация PostgreSQL: https://postgrespro.ru/docs/postgresql/9.4/index.html https://www.postgresql.org/docs/9.4/static/index.html

ЛитератураЛитература

Лицензия к документации PostgreSQL:Юридическое уведомлениеPostgreSQL © 1996-2015 — PostgreSQL Global Development Group.Postgres95 © 1994-5 — Регенты университета Калифорнии.

Настоящим разрешается использование, копирование, модификация и распространение данного программного продукта и документации для любых целей, бесплатно и без письменного разрешения, при условии сохранения во всех копиях приведённого выше уведомления об авторских правах и данного параграфа вместе с двумя последующими параграфами.

УНИВЕРСИТЕТ КАЛИФОРНИИ НИ В КОЕЙ МЕРЕ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ, КОСВЕННЫЙ, НАМЕРЕННЫЙ, СЛУЧАЙНЫЙ ИЛИ СПРОВОЦИРОВАННЫЙ УЩЕРБ, В ТОМ ЧИСЛЕ ПОТЕРЯННЫЕ ПРИБЫЛИ, СВЯЗАННЫЙ С ИСПОЛЬЗОВАНИЕМ ЭТОГО ПРОГРАММНОГО ПРОДУКТА И ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ УНИВЕРСИТЕТ КАЛИФОРНИИ БЫЛ УВЕДОМЛЁН О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

УНИВЕРСИТЕТ КАЛИФОРНИИ ЯВНЫМ ОБРАЗОМ ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ГАРАНТИЙ, В ЧАСТНОСТИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ КОММЕРЧЕСКОЙ ВЫГОДЫ ИЛИ ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО ЦЕЛИ. НАСТОЯЩИЙ ПРОГРАММНЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ В ВИДЕ "КАК ЕСТЬ", И УНИВЕРСИТЕТ КАЛИФОРНИИ НЕ ДАЁТ НИКАКИХ ОБЯЗАТЕЛЬСТВ ПО ЕГО ОБСЛУЖИВАНИЮ, ПОДДЕРЖКЕ, ОБНОВЛЕНИЮ, УЛУЧШЕНИЮ ЛИ МОДИФИКАЦИИ.