Скачать презентацию Языки запросов 2013 2014 уч год 1 Вопросы Скачать презентацию Языки запросов 2013 2014 уч год 1 Вопросы

SQL_МД_СУБД_2013.ppt

  • Количество слайдов: 126

Языки запросов 2013/2014 уч. год 1 Языки запросов 2013/2014 уч. год 1

Вопросы: 1. Общая характеристика языка SQL. 2. Основные элементы языка: типы данных, операторы, их Вопросы: 1. Общая характеристика языка SQL. 2. Основные элементы языка: типы данных, операторы, их классификация. 3. Основные операторы SQL. 4. Объектные и дедуктивные языки запросов. Языки запросов для слабоструктурированных данных. 2

Литература: 1. Астахова И. Ф. , Толстобров А. П. , Мельников В. М. SQL Литература: 1. Астахова И. Ф. , Толстобров А. П. , Мельников В. М. SQL в примерах и задачах: Учеб. пособие. – Мн. : Новое знание, 2002. 2. Джеймс Р Грофф, Пол Н. Вайберг. SQL: Полное руководство. – Киев, BHV, 1998. 3. Оскерко В. С. , Пунчик З. В. Введение в язык SQL. – Мн. : БГЭУ, 2000. 3

1. Общая характеристика языка SQL 2006 2008 SQL 2003 4 1. Общая характеристика языка SQL 2006 2008 SQL 2003 4

Год Название Изменения 1986 SQL-86 Первый вариант стандарта, принятый институтом ANSI и одобренный ISO Год Название Изменения 1986 SQL-86 Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году. 1989 SQL-89 Немного доработанный вариант предыдущего стандарта. 1992 SQL-92 Значительные изменения (ISO 9075); уровень Entry Level стандарта SQL-92 был принят как стандарт FIPS 127 -2. SQL: 1999 Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектноориентированные возможности. SQL: 2003 Введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных. 2006 SQL: 2006 Значительно расширена функциональность работы с XML-данными. Появилась возможность совместно использовать в запросах SQL и XQuery. 2008 SQL: 2008 Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL: 2003 1999 2003 6

Функции SQL § Определение структуры данных в таблицах; § Чтение данных и их модификация; Функции SQL § Определение структуры данных в таблицах; § Чтение данных и их модификация; § Управление доступом; § Совместное использование данных; § Целостность данных. 7

SQL организует доступ к данным в двух режимах: 1. Интерактивный; 2. Программный. 8 SQL организует доступ к данным в двух режимах: 1. Интерактивный; 2. Программный. 8

2. Стандартный язык SQL: Типы данных 1. Character (n) 2. Numeric (n [, d]), 2. Стандартный язык SQL: Типы данных 1. Character (n) 2. Numeric (n [, d]), Decimal (n [, d]), 3. Integer (n), Smallint (n) 4. Float (p), Real, Double Precision 5. Date 6. Var. Char (n) 7. Interval и др. 9

Символьные типы данных - содержат буквы, цифры и специальные символы. – CHAR или CHAR(n) Символьные типы данных - содержат буквы, цифры и специальные символы. – CHAR или CHAR(n) -символьные строки фиксированной длины. – VARCHAR(n) - символьная строка переменной длины. 10

Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). – INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. Интервал значений от - 2147483647 до + 2147483648 – SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768 11

Вещественные типы данных - описывают числа с дробной частью. – FLOAT и SMALLFLOAT - Вещественные типы данных - описывают числа с дробной частью. – FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответственно). – DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p. – DECIMAL(p, n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой. 12

Денежные типы данных - описывают денежные величины. – MONEY(p, n) - все аналогично типу Денежные типы данных - описывают денежные величины. – MONEY(p, n) - все аналогично типу DECIMAL(p, n). 13

Дата и время - используются для хранения даты, времени и их комбинаций. – DATE Дата и время - используются для хранения даты, времени и их комбинаций. – DATE - для хранения даты. – TIME - для хранения времени. – INTERVAL - для хранения временного интервала. – DATETIME - для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд). 14

Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т. д. ). – BINARY – BYTE – BLOB 15

Последовательные типы данных – SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное Последовательные типы данных – SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное значение (например, для первичного ключа). 16

Язык SQL оперирует терминами «таблицы» , «строки» , «колонки» или «столбцы» . • Полное Язык SQL оперирует терминами «таблицы» , «строки» , «колонки» или «столбцы» . • Полное имя таблицы: Имя_владельца. имя таблицы • Полное имя столбца Имя_таблицы. имя_столбца Основу языка SQL составляют операторы, условно разбитые не несколько групп по выполняемым функциям. 17

Категории операторов SQL: • • • Data Definition Language (DDL) – язык определения данных, Категории операторов SQL: • • • Data Definition Language (DDL) – язык определения данных, позволяющий создавать, удалять и изменять объекты в БД; Data Manipulation Language (DML) – язык управления данными, позволяющий модифицировать , добавлять и удалять данные в имеющихся объектах БД; Data Control Language (DCL) – язык управления пользовательскими привилегиями; Transaction Control Language (TCL) – язык управления изменениями, сделанными группами операторов; Cursor Control Language (CCL) – операторы для определения курсора, подготовки операторов SQL к выполнению и некоторых других операций. 18

Операторы DDL (Data Definition Language) – операторы определения объектов базы данных CREATE SCHEMA – Операторы DDL (Data Definition Language) – операторы определения объектов базы данных CREATE SCHEMA – создать схему базы данных; DROP SCHEMA – удалить схему базы данных; CREATE TABLE – создать таблицу; ALTER TABLE – изменить таблицу; DROP TABLE – удалить таблицу; CREATE VIEW – создать представление; DROP VIEW – удалить представление. 19

Операторы DML (Data Manipulation Language) – операторы манипулирования данными SELECT – отобрать строки из Операторы DML (Data Manipulation Language) – операторы манипулирования данными SELECT – отобрать строки из таблиц; INSERT – добавить строки в таблицу; UPDATE – изменить строки в таблице; DELETE – удалить строки в таблице; 20

Структура SQL-оператора DELETE FROM имя таблицы WHERE условие Глагол Ключевые слова Предложения 21 Структура SQL-оператора DELETE FROM имя таблицы WHERE условие Глагол Ключевые слова Предложения 21

При описании синтаксиса операторов обычно используются условные обозначения, известные как стандартные формы Бэкуса-Наура (BNF). При описании синтаксиса операторов обычно используются условные обозначения, известные как стандартные формы Бэкуса-Наура (BNF). 22

В BNF обозначениях используются следующие элементы: Ø Символ В BNF обозначениях используются следующие элементы: Ø Символ ": : =" означает равенство по определению. Слева от знака стоит определяемое понятие, справа - собственно определение понятия. Ø Ключевые слова записываются прописными буквами. Они зарезервированы и составляют часть оператора. Ø Метки-заполнители конкретных значений элементов и переменных записываются курсивом. 23

Ø Необязательные элементы оператора заключены в квадратные скобки [ ]. Ø Вертикальная черта | Ø Необязательные элементы оператора заключены в квадратные скобки [ ]. Ø Вертикальная черта | указывает на то, что все предшествующие ей элементы списка являются необязательными и могут быть заменены любым другим элементом списка после этой черты. Ø Фигурные скобки {} указывают на то, что все находящееся внутри них является единым целым. Ø Троеточие “…" означает, что предшествующая часть оператора может быть повторена любое количество раз. 24

Ø Многоточие, внутри которого находится запятая Ø Многоточие, внутри которого находится запятая ". , . . " указывает, что предшествующая часть оператора, состоящая из нескольких элементов, разделенных запятыми, может иметь произвольное число повторений. Ø Круглые скобки являются элементом оператора. 25

Синтаксис оператора определения таблицы <определение таблицы>: : = CREATE TABLE <имя таблицы> (<описание элемента Синтаксис оператора определения таблицы <определение таблицы>: : = CREATE TABLE <имя таблицы> (<описание элемента таблицы>[{, <описание элемента таблицы>}…]) <описание элемента таблицы>: : = <определение столбца> | <определение ограничений таблицы> 26

<определение столбца>: : = <имя столбца><тип данных> [<значение по умолчанию>] [<дополнительные ограничения столбца>…] <значение <определение столбца>: : = <имя столбца><тип данных> [<значение по умолчанию>] [<дополнительные ограничения столбца>…] <значение по умолчанию>: : = DEFAULT{<значение> | USER | NULL} <дополнительные ограничения столбца>: : = NOT NULL [<ограничения уникальности столбца>] | <ограничение по ссылкам> | CHECK (<условие проверки на допустимость> ) 27

Синтаксис определения индекса <определение индекса>: : = CREATE INDEX <имя индекса> ON <имя таблицы> Синтаксис определения индекса <определение индекса>: : = CREATE INDEX <имя индекса> ON <имя таблицы> (<имя поля>, . . ) 28

Синтаксические диаграммы INSERT INTO имя таблицы (_имя столбца _) , VALUES (___константа____) NULL , Синтаксические диаграммы INSERT INTO имя таблицы (_имя столбца _) , VALUES (___константа____) NULL , 29

DELETE FROM имя таблицы WHERE условие 30 DELETE FROM имя таблицы WHERE условие 30

3. Структура таблицы P (Поставщики) PNUM 9999 1001 PNAME А(30) Петрова И. А. 1002 3. Структура таблицы P (Поставщики) PNUM 9999 1001 PNAME А(30) Петрова И. А. 1002 Сидорович О. К. PSTATUS 9 1 2 … 31

Создание таблицы CREATE TABLE P (Pnum int(4), Pname char (30), PSTATUS int(1)); 32 Создание таблицы CREATE TABLE P (Pnum int(4), Pname char (30), PSTATUS int(1)); 32

Пример 1. Вставка одной строки в таблицу: INSERT INTO P (PNUM, PNAME, PSTATUS) VALUES Пример 1. Вставка одной строки в таблицу: INSERT INTO P (PNUM, PNAME, PSTATUS) VALUES (4, "Иванов" , 3); 33

Пример 2. Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE Пример 2. Вставка в таблицу нескольких строк, выбранных из другой таблицы (в таблицу TMP_TABLE вставляются данные о поставщиках из таблицы P, имеющие номера, большие 1002): INSERT INTO TMP_TABLE (PNUM, PNAME) SELECT PNUM, PNAME FROM P WHERE P. PNUM>1002; 34

Пример 3. Обновление строк в таблице: UPDATE P SET PNAME = Пример 3. Обновление строк в таблице: UPDATE P SET PNAME = "Пушников" WHERE P. PNUM = 1001; 35

Пример 4. Удаление строк в таблице: DELETE FROM P WHERE P. PNUM = 1001; Пример 4. Удаление строк в таблице: DELETE FROM P WHERE P. PNUM = 1001; 36

Пример 5. Удаление всех строк в таблице: DELETE FROM P; 37 Пример 5. Удаление всех строк в таблице: DELETE FROM P; 37

Пример 6. Выбрать все данные из таблицы поставщиков SELECT * FROM P; 38 Пример 6. Выбрать все данные из таблицы поставщиков SELECT * FROM P; 38

Пример 7. Выбрать все строки из таблицы поставщиков, удовлетворяющих некоторому условию SELECT * FROM Пример 7. Выбрать все строки из таблицы поставщиков, удовлетворяющих некоторому условию SELECT * FROM P WHERE P. PNUM > 1002; 39

Пример 8. Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок): SELECT PNAME Пример 8. Выбрать некоторые колонки из исходной таблицы (указание списка отбираемых колонок): SELECT PNAME FROM P; 40

Пример 9. Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое Пример 9. Выбрать некоторые колонки из исходной таблицы, удалив из результата повторяющиеся строки (ключевое слово DISTINCT): SELECT DISTINCT PNAME FROM P; 41

Структура таблицы D (Товары) TNum TName Price Коl 1 Болт 10 100 2 Гайка Структура таблицы D (Товары) TNum TName Price Коl 1 Болт 10 100 2 Гайка 20 200 3 Винт 30 300 42

Пример 10. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS…): SELECT Пример 10. Использование скалярных выражений и переименований колонок в запросах (ключевое слово AS…): SELECT D. TNAME, D. KOL, D. PRICE, "=" AS EQU, D. KOL*D. PRICE AS SUMMA FROM D; 43

Результат: TNAME KOL PRICE EQU SUMMA Болт 10 100 = 1000 Гайка 20 200 Результат: TNAME KOL PRICE EQU SUMMA Болт 10 100 = 1000 Гайка 20 200 = 4000 Винт 30 300 = 9000 44

Структура таблицы PD (Поставки) PNum TNum Date. Z Volume 1001 1 12/03/10 1001 1002 Структура таблицы PD (Поставки) PNum TNum Date. Z Volume 1001 1 12/03/10 1001 1002 1003 13/04/10 12/03/10 14/03/10 15/03/10 200 150 250 1000 2 1 45

Пример 11. Упорядочение результатов запроса (ключевое слово ORDER BY…): SELECT PD. PNUM, PD. TNUM, Пример 11. Упорядочение результатов запроса (ключевое слово ORDER BY…): SELECT PD. PNUM, PD. TNUM, PD. VOLUME FROM PD ORDER BY TNUM; 46

Результат PNUM TNUM VOLUME 1001 1 1002 1 150 1003 1 1000 1001 2 Результат PNUM TNUM VOLUME 1001 1 1002 1 150 1003 1 1000 1001 2 200 1002 2 250 47

Отбор данных из нескольких таблиц Пример 12. Естественное соединение таблиц (способ 1 – явное Отбор данных из нескольких таблиц Пример 12. Естественное соединение таблиц (способ 1 – явное указание условий соединения): SELECT P. PNUM, P. PNAME, PD. TNUM, PD. VOLUME FROM P, PD WHERE P. PNUM = PD. PNUM; 48

Естественное соединение эквивалентно следующей последовательности реляционных операций: 1. Переименовать одинаковые атрибуты в отношениях 2. Естественное соединение эквивалентно следующей последовательности реляционных операций: 1. Переименовать одинаковые атрибуты в отношениях 2. Выполнить декартово произведение отношений 3. Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена 4. Выполнить проекцию, удалив повторяющиеся атрибуты 5. Переименовать атрибуты, вернув им первоначальные имена 49

Результат: PNUM 1001 1002 1003 PNAME Иванов Петров Сидоров TNUM 1 2 3 1 Результат: PNUM 1001 1002 1003 PNAME Иванов Петров Сидоров TNUM 1 2 3 1 2 1 VOLUME 100 200 300 150 250 1000 50

Пример 13. Естественное соединение таблиц (способ 2 – ключевые слова JOIN USING): SELECT P. Пример 13. Естественное соединение таблиц (способ 2 – ключевые слова JOIN USING): SELECT P. PNUM, P. PNAME, PD. TNUM, PD. VOLUME FROM P JOIN PD USING PNUM; 51

Пример 14. Естественное соединение таблиц (способ 3 – ключевое слово NATURAL JOIN): SELECT P. Пример 14. Естественное соединение таблиц (способ 3 – ключевое слово NATURAL JOIN): SELECT P. PNUM, P. PNAME, PD. TNUM, PD. VOLUME FROM P NATURAL JOIN PD; 52

Пример 15. Естественное соединение трех таблиц: SELECT P. PNAME, D. TNAME, PD. VOLUME FROM Пример 15. Естественное соединение трех таблиц: SELECT P. PNAME, D. TNAME, PD. VOLUME FROM P NATURAL JOIN PD NATURAL JOIN D; 53

Результат PNAME ТNAME VOLUME Иванов Болт 100 Иванов Гайка 200 Иванов Винт 300 Петров Результат PNAME ТNAME VOLUME Иванов Болт 100 Иванов Гайка 200 Иванов Винт 300 Петров Болт 150 Петров Гайка 250 Сидоров Болт 1000 54

Использование агрегатных функций в запросах Пример 16. Получить общее количество поставщиков (функция COUNT): SELECT Использование агрегатных функций в запросах Пример 16. Получить общее количество поставщиков (функция COUNT): SELECT COUNT(*) AS N FROM P; 55

Пример 17. Получить общее, максимальное, минимальное и среднее количества поставляемых товаров (функции SUM, MAX, Пример 17. Получить общее, максимальное, минимальное и среднее количества поставляемых товаров (функции SUM, MAX, MIN, AVG): SELECT SUM(PD. VOLUME) AS SM, MAX(PD. VOLUME) AS MX, MIN(PD. VOLUME) AS MN, AVG(PD. VOLUME) AS AV FROM PD; 56

Результат SM MX 2000 MN 1000 AV 100 3333 57 Результат SM MX 2000 MN 1000 AV 100 3333 57

Использование агрегатных функций с группировками Пример 18. Для каждой детали получить суммарное поставляемое количество Использование агрегатных функций с группировками Пример 18. Для каждой детали получить суммарное поставляемое количество (ключевое слово GROUP BY): SELECT PD. TNUM, SUM(PD. VOLUME) AS SM FROM PD GROUP BY PD. TNUM; 58

Результат TNUM SM 1 1250 2 450 3 300 59 Результат TNUM SM 1 1250 2 450 3 300 59

Синтаксис соединенных таблиц В разделе FROM оператора SELECT можно использовать соединенные таблицы. Соединенная таблица Синтаксис соединенных таблиц В разделе FROM оператора SELECT можно использовать соединенные таблицы. Соединенная таблица : : = Перекрестное соединение | Естественное соединение | Соединение посредством предиката | Соединение посредством имен столбцов | Соединение объединения 60

Перекрестное соединение : : = Таблица. А CROSS JOIN Таблица. В Естественное соединение : Перекрестное соединение : : = Таблица. А CROSS JOIN Таблица. В Естественное соединение : : = Таблица. А [NATURAL] [Тип соединения] JOIN Таблица. В Соединение посредством предиката : : = Таблица. А [Тип соединения] JOIN Таблица. В ON Предикат Соединение посредством имен столбцов : : = Таблица. А [Тип соединения] JOIN Таблица. В USING (Имя столбца. , . . ) Соединение объединения : : = Таблица. А UNION JOIN Таблица. В 61

CROSS JOIN - перекрестное соединение возвращает декартово произведение таблиц - в разделе FROM может CROSS JOIN - перекрестное соединение возвращает декартово произведение таблиц - в разделе FROM может быть заменено списком таблиц через запятую. NATURAL JOIN - естественное соединение производится по всем столбцам таблиц А и В, имеющим одинаковые имена. В результирующую таблицу одинаковые столбцы вставляются только один раз. JOIN Е ON - соединение посредством предиката соединяет строки таблиц А и В посредством указанного предиката. JOIN Е USING - соединение посредством имен столбцов - соединяет отношения подобно естественному соединению. 62

Тип соединения : : = INNER | LEFT [OUTER] | RIGTH [OUTER] | FULL Тип соединения : : = INNER | LEFT [OUTER] | RIGTH [OUTER] | FULL [OUTER] 63

OUTER - ключевое слово OUTER (внешний) не является обязательными, оно не используется ни в OUTER - ключевое слово OUTER (внешний) не является обязательными, оно не используется ни в каких операциях с данными. INNER - тип соединения «внутреннее» используется по умолчанию, когда тип явно не задан. В таблицах А и В соединяются только те строки, для которых найдено совпадение. 64

LEFT (OUTER) - тип соединения «левое (внешнее)» - включает в себя все строки из LEFT (OUTER) - тип соединения «левое (внешнее)» - включает в себя все строки из левой таблицы А и те строки из правой таблицы В, для которых обнаружено совпадение. Для строк из таблицы А, для которых не найдено соответствия в таблице В, в столбцы, извлекаемые из таблицы В, заносятся значения NULL. RIGHT (OUTER) - тип соединения «правое (внешнее)» - включает в себя все строки из правой таблицы В и те строки из левой таблицы А, для которых обнаружено совпадение. Для строк из таблицы В, для которых не найдено соответствия в таблице А, в столбцы, извлекаемые из таблицы А 65 заносятся значения NULL.

FULL (OUTER) - тип соединения «полное (внешнее)» - комбинация левого и правого соединений - FULL (OUTER) - тип соединения «полное (внешнее)» - комбинация левого и правого соединений - включаются все строки из обеих таблиц. Для совпадающих строк поля заполняются реальными значениями, для несовпадающих строк поля заполняются в соответствии с правилами левого и правого соединений. UNION JOIN - соединение объединения является обратным по отношению к внутреннему соединению - включает только те строки из таблиц А и В, для которых не найдено совпадений. В них используются значения NULL для столбцов, полученных из другой таблицы. 66

Синтаксис условных выражений раздела WHERE Условное выражение : : = [ ( ] [NOT] Синтаксис условных выражений раздела WHERE Условное выражение : : = [ ( ] [NOT] {Предикат сравнения | Предикат BETWEEN | Предикат IN | Предикат LIKE | Предикат null | Предикат количественного сравнения | Предикат exist | Предикат unique | Предикат match | Предикат overlaps} [{AND | OR} Условное выражение] [ ) ] [IS [NOT] {TRUE | FALSE | UNKNOWN}] Предикат сравнения : : = Конструктор значений строки {= | < | > | <= | >= | <>} Конструктор значений строки 67

Сравнение поля таблицы и скалярного значения: POSTAV. VOLUME > 100 Сравнение двух сконструированных строк: Сравнение поля таблицы и скалярного значения: POSTAV. VOLUME > 100 Сравнение двух сконструированных строк: (PD. PNUM, PD. TNUM) = (1, 25) Этот пример эквивалентен условному выражению PD. PNUM = 1 AND PD. TNUM = 25 68

<Предикат BETWEEN> : : = <Конструктор значений строки> [NOT] BETWEEN <Конструктор значений строки> AND <Предикат BETWEEN> : : = <Конструктор значений строки> [NOT] BETWEEN <Конструктор значений строки> AND <Конструктор значений строки> Пример. PD. VOLUME BETWEEN 10 AND 100 69

Предикат NULL : : = Конструктор значений строки IS [NOT] NULL 70 Предикат NULL : : = Конструктор значений строки IS [NOT] NULL 70

Предикат количественного сравнения : : = Конструктор значений строки {= | < | > Предикат количественного сравнения : : = Конструктор значений строки {= | < | > | <= | >= | <>} {ANY | SOME | ALL} (Selectвыражение) Пример. P. PNUM = SOME (SELECT PD. PNUM FROM PD WHERE PD. TNUM=2) 71

Предикат EXIST : : = EXIST (Select-выражение) Предикат EXIST возвращает значение TRUE, если результат Предикат EXIST : : = EXIST (Select-выражение) Предикат EXIST возвращает значение TRUE, если результат подзапроса (select-выражения) не пуст. Предикат UNIQUE : : = UNIQUE (Select-выражение) 72

Предикат MATCH : : = Конструктор значений строки MATCH [UNIQUE] [PARTIAL | FULL] (Select-выражение). Предикат MATCH : : = Конструктор значений строки MATCH [UNIQUE] [PARTIAL | FULL] (Select-выражение). Предикат OVERLAPS : : = Конструктор значений строки OVERLAPS Конструктор значений строки 73

Вложенные запросы Пример 19. Получить список поставщиков, статус которых меньше максимального статуса в таблице Вложенные запросы Пример 19. Получить список поставщиков, статус которых меньше максимального статуса в таблице поставщиков (сравнение с подзапросом): SELECT * FROM P WHERE P. PSTATUS < (SELECT MAX(P. PSTATUS) FROM P); 74

Использование предиката IN. Пример 20. Получить список поставщиков, поставляющих деталь номер 2: SELECT * Использование предиката IN. Пример 20. Получить список поставщиков, поставляющих деталь номер 2: SELECT * FROM P WHERE P. PNUM IN (SELECT DISTINCT PD. PNUM FROM PD WHERE PD. TNUM = 2); 75

Использование предиката EXIST. Пример 21. Получить список поставщиков, поставляющих деталь номер 2: SELECT * Использование предиката EXIST. Пример 21. Получить список поставщиков, поставляющих деталь номер 2: SELECT * FROM P WHERE EXIST (SELECT * FROM PD WHERE PD. PNUM = P. PNUM AND PD. TNUM = 2); 76

Использование предиката NOT EXIST. Пример 22. Получить список поставщиков, не поставляющих деталь номер 2: Использование предиката NOT EXIST. Пример 22. Получить список поставщиков, не поставляющих деталь номер 2: SELECT * FROM P WHERE NOT EXIST (SELECT * FROM PD WHERE PD. PNUM = P. PNUM AND PD. TNUM = 2); 77

Пример 23. Получить имена поставщиков, поставляющих все детали: SELECT DISTINCT PNAME FROM P WHERE Пример 23. Получить имена поставщиков, поставляющих все детали: SELECT DISTINCT PNAME FROM P WHERE NOT EXIST (SELECT * FROM D WHERE NOT EXIST (SELECT * FROM PD WHERE PD. TNUM = D. TNUM AND PD. PNUM = P. PNUM)); 78

Пример 24. Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну Пример 24. Получить имена поставщиков, имеющих статус, больший 3 или поставляющих хотя бы одну деталь номер 2 (объединение двух подзапросов - ключевое слово UNION): SELECT P. PNAME FROM P WHERE P. PSTATUS > 3 UNION SELECT P. PNAME FROM P, PD WHERE P. PNUM = PD. PNUM AND PD. TNUM = 2; 79

Пример 25. Получить имена поставщиков, имеющих статус, больший 3 и одновременно поставляющих хотя бы Пример 25. Получить имена поставщиков, имеющих статус, больший 3 и одновременно поставляющих хотя бы одну деталь с номером 2 (пересечение двух подзапросов - ключевое слово INTERSECT): SELECT P. PNAME FROM P WHERE P. PSTATUS > 3 INTERSECT SELECT P. PNAME FROM P, PD WHERE P. PNUM = PD. PNUM AND PD. TNUM = 2; 80

Пример 26. Получить имена поставщиков, имеющих статус, больший 3, за исключением тех, кто поставляет Пример 26. Получить имена поставщиков, имеющих статус, больший 3, за исключением тех, кто поставляет хотя бы одну деталь с номером 2 (разность двух подзапросов ключевое слово EXCEPT): SELECT P. PNAME FROM P WHERE P. PSTATUS > 3 EXCEPT SELECT P. PNAME FROM P, PD WHERE P. PNUM = PD. PNUM AND PD. TNUM = 2; 81

Пример 27. Создание представления Представление (view) – хранящиеся в БД данные Select-выражения. CREATE VIEW Пример 27. Создание представления Представление (view) – хранящиеся в БД данные Select-выражения. CREATE VIEW POST AS SELECT PNUM, PNAME FROM P WHERE PSTATUS =3 82

Порядок выполнения оператора SELECT Стадия 1. Выполнение одиночного оператора SELECT При наличии ключевых слов Порядок выполнения оператора SELECT Стадия 1. Выполнение одиночного оператора SELECT При наличии ключевых слов UNION, EXCEPT или INTERSECT запрос разбивается на несколько независимых запросов, каждый из которых выполняется отдельно: Шаг 1 (FROM). Вычисляется прямое FROM декартовое произведение всех таблиц, указанных в разделе FROM. Результат шага 1 - таблица A. 83

Шаг 2 (WHERE). WHERE При наличии WHERE сканируется таблица A, полученная при выполнении шага Шаг 2 (WHERE). WHERE При наличии WHERE сканируется таблица A, полученная при выполнении шага 1. Для каждой ее строки вычисляется условное выражение, приведенное в WHERE. В результат включаются только те строки, для которых условное выражение TRUE. Если WHERE нет - шаг 3. Если в условном выражении есть вложенные подзапросы, то они вычисляются в соответствии с данной концептуальной схемой. Результат шага 2 - таблица B. 84

Шаг 3 (GROUP BY). Если в операторе SELECT присутствует GROUP BY, то строки таблицы Шаг 3 (GROUP BY). Если в операторе SELECT присутствует GROUP BY, то строки таблицы B, полученной на шаге 2, группируются в соответствии со списком группировки в GROUP BY. Если раздел GROUP BY опущен - шаг 4. Результат шага 3 - таблица С. 85

Шаг 4 (HAVING). Если в операторе SELECT присутствует HAVING, то группы, не удовлетворяющие условному Шаг 4 (HAVING). Если в операторе SELECT присутствует HAVING, то группы, не удовлетворяющие условному выражению, приведенному в разделе HAVING, исключаются. Если раздел HAVING опущен, то к шагу 5. Результат шага 4 - таблица D. 86

Шаг 5 (SELECT). Каждая группа, полученная на шаге 4, генерирует одну строку результата следующим Шаг 5 (SELECT). Каждая группа, полученная на шаге 4, генерирует одну строку результата следующим образом. Вычисляются все скалярные выражения, указанные в разделе SELECT. По правилам использования раздела GROUP BY, такие скалярные выражения должны быть одинаковыми для всех строк внутри каждой группы. Для каждой группы вычисляются значения агрегатных функций, приведенных в разделе SELECT. 87

Если GROUP BY отсутствовал, но в SELECT есть агрегатные функции, то считается, что имеется Если GROUP BY отсутствовал, но в SELECT есть агрегатные функции, то считается, что имеется всего одна группа. Если нет ни GROUP BY, ни агрегатных функций, то считается, что имеется столько групп, сколько строк отобрано к данному моменту. Результат шага 5 - таблица E, содержащая столько колонок, сколько элементов приведено в SELECT и столько строк, сколько отобрано групп. 88

Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT Если в SELECT присутствовали ключевые слова UNION, Стадия 2. Выполнение операций UNION, EXCEPT, INTERSECT Если в SELECT присутствовали ключевые слова UNION, EXCEPT и INTERSECT, то таблицы, полученные в результате выполнения 1 -й стадии, объединяются, вычитаются или пересекаются. Стадия 3. Упорядочение результата Если в SELECT присутствует раздел ORDER BY, то строки полученной на предыдущих шагах таблицы упорядочиваются в соответствии со списком упорядочения в ORDER BY. 89

В РСУБД имеется оптимизатор, который находит оптимальный алгоритм выполнения запроса, гарантирующий получение правильного результата. В РСУБД имеется оптимизатор, который находит оптимальный алгоритм выполнения запроса, гарантирующий получение правильного результата. Работу оптимизатора можно представить в виде последовательности нескольких шагов: Шаг 1 (Синтаксический анализ) - вырабатывается некоторое внутренне представление запроса, используемое на последующих шагах. Шаг 2 (Преобразование в каноническую форму) - запрос во внутреннем представлении подвергается преобразованию в некоторую каноническую форму. 90

Шаг 3 (Генерация планов выполнения запроса и выбор оптимального плана) - оптимизатор генерирует множество Шаг 3 (Генерация планов выполнения запроса и выбор оптимального плана) - оптимизатор генерирует множество возможных планов выполнения запроса. Шаг 4. (Выполнение плана запроса) - выбранный на предыдущем шаге план передается на реальное выполнение. 91

Операторы защиты и управления данными Data Control Language (DCL) CREATE ASSERTION – создать ограничение; Операторы защиты и управления данными Data Control Language (DCL) CREATE ASSERTION – создать ограничение; DROP ASSERTION – удалить ограничение; GRANT – предоставить привилегии пользователю или приложению на манипулирование объектами; REVOKE – отменить привилегии пользователя или приложения. 92

Определение привилегий <определение привилегии>: : = GRANT <привилегия> ON <имя таблицы> TO <имя пользователя> Определение привилегий <определение привилегии>: : = GRANT <привилегия> ON <имя таблицы> TO <имя пользователя> [{, <имя пользователя> …}] …[WITH GRANT OPTION] <привилегия>: : = ALL PRIVIVEGES | <действие> [{, <действие>} …] <действие>: : = SELECT| INSERT | DELETE | UPDATE [<список столбцов>)} | REFERENCES {(<список столбцов>)} 93

Отмена привилегий <отмена привилегии> : : = REVOKE <привилегия> ON <имя таблицы> FROM <имя Отмена привилегий <отмена привилегии> : : = REVOKE <привилегия> ON <имя таблицы> FROM <имя пользователя>[{, <имя пользователя>}…] 94

Операторы DDL (Data Definition Language) – операторы определения объектов базы данных CREATE SCHEMA – Операторы DDL (Data Definition Language) – операторы определения объектов базы данных CREATE SCHEMA – создать схему базы данных; DROP SCHEMA – удалить схему базы данных; CREATE TABLE – создать таблицу; ALTER TABLE – изменить таблицу; DROP TABLE – удалить таблицу; CREATE VIEW – создать представление; DROP VIEW – удалить представление. 95

96 96

Управление транзакциями Transaction Control Language (TCL) COMMIT – зафиксировать внесенные изменения; ROLLBACK – изменения; Управление транзакциями Transaction Control Language (TCL) COMMIT – зафиксировать внесенные изменения; ROLLBACK – изменения; откатить внесенные 97

Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL) Оператор декартового произведения SELECT A. Реализация реляционной алгебры средствами оператора SELECT (Реляционная полнота SQL) Оператор декартового произведения SELECT A. Поле 1, A. Поле 2, Е, B. Поле 1, B. Поле 2, Е FROM A, B; или SELECT A. Поле 1, A. Поле 2, Е, B. Поле 1, B. Поле 2, Е FROM A CROSS JOIN B; 98

Оператор проекции SELECT DISTINCT X, Y, Е, Z FROM A; Оператор выборки SELECT * Оператор проекции SELECT DISTINCT X, Y, Е, Z FROM A; Оператор выборки SELECT * FROM A WHERE c; 99

Оператор объединения SELECT * FROM A UNION SELECT * FROM B; Оператор вычитания SELECT Оператор объединения SELECT * FROM A UNION SELECT * FROM B; Оператор вычитания SELECT * FROM A EXCEPT SELECT * FROM B 100

Реляционный оператор переименования RENAME выражается при помощи ключевого слова AS в списке отбираемых полей Реляционный оператор переименования RENAME выражается при помощи ключевого слова AS в списке отбираемых полей оператора SELECT. Оператор соединения SELECT A. Поле 1, A. Поле 2, …, B. Поле 1, B. Поле 2, Е FROM A, B WHERE c; или SELECT A. Поле 1, A. Поле 2, …, B. Поле 1, B. Поле 2, Е FROM A CROSS JOIN B WHERE c; 101

Оператор пересечения SELECT * FROM A INTERSECT SELECT * FROM B; 102 Оператор пересечения SELECT * FROM A INTERSECT SELECT * FROM B; 102

Оператор деления SELECT DISTINCT A. X FROM A WHERE NOT EXIST (SELECT * FROM Оператор деления SELECT DISTINCT A. X FROM A WHERE NOT EXIST (SELECT * FROM B WHERE NOT EXIST (SELECT * FROM A A 1 WHERE A 1. X = A. X AND A 1. Y = B. Y)); 103

Использование SQL в программах Использование SQL в программах

Определяют четыре способа применения SQL в программах: 1. Статический SQL – операторы SQL встраиваются Определяют четыре способа применения SQL в программах: 1. Статический SQL – операторы SQL встраиваются в исходный текст программы, созданной на полноценном языке программирования; 2. Динамический SQL - формирование в процессе выполнения программы на некотором языке программирования кода SQL-операторов и ODBC (Open Data. Base дальнейшего их выполнения; Connectivity) SQL/CLI (SQL Call Level Interface) 3. Вызов из программ, написанных на других языках программирования, SQL-модулей (кода на языке SQL); 4. Интерфейс программирования приложений взаимодействует с СУБД посредством совокупности функций – API.

Цель встроенного SQL: объединить возможности процедурного языка программирования с реализованными посредством SQL механизмами работы Цель встроенного SQL: объединить возможности процедурного языка программирования с реализованными посредством SQL механизмами работы со структурированными данными в БД.

üКоманды SQL помещаются в исходный текст главной программы; üИм предшествует фраза EXEC SQL (EXECute üКоманды SQL помещаются в исходный текст главной программы; üИм предшествует фраза EXEC SQL (EXECute SQL); üДалее устанавливаются некоторые команды, которые являются специальными для вложенной формы SQL.

При вставке команды SQL в текст программы, написанной на другом языке перед окончательной компиляцией При вставке команды SQL в текст программы, написанной на другом языке перед окончательной компиляцией программы выполняется прекомпиляция. Программа (прекомпилятор или препроцессор), просматривает текст программы и преобразовывает команды SQL в форму, удобную для использования базовым языком. Обычный транслятор преобразовывает программу из исходного текста в исполняемый код.

Текст программы Препроцессор Исходный текст программы без SQL-операторов Модуль запросов к БД Компилятор Специальная Текст программы Препроцессор Исходный текст программы без SQL-операторов Модуль запросов к БД Компилятор Специальная программа BIND Объектный код Библиотека СУБД План выполнения выполнен ия Компоновщик Исполняемая программа План выполнения БД БД

Встроенный SQL Cursor Control Language (CCL) DECLARE – определяет курсор для запроса; OPEN – Встроенный SQL Cursor Control Language (CCL) DECLARE – определяет курсор для запроса; OPEN – открывает курсор для чтения результата запроса; FETCH – считывает курсор из результата запроса; CLOSE – закрывает курсор.

Динамический SQL Операторы динамического SQL формируются как текстовые переменные. Например: Stmt 1: =“SELECT * Динамический SQL Операторы динамического SQL формируются как текстовые переменные. Например: Stmt 1: =“SELECT * FROM tbl 1”; Для динамического формирования оператора можно выполнять последовательное объединение строк.

Операторы динамического SQL можно использовать: • однократно, производя за один шаг компиляцию и выполнение Операторы динамического SQL можно использовать: • однократно, производя за один шаг компиляцию и выполнение оператора - одношаговый интерфейс; • многократно, разделяя процесс компиляции оператора, на котором строится план выполнения, и процесс непосредственного выполнения оператора - многошаговый интерфейс.

Достоинства и недостатки SQL Достоинства: • • • Независимость от конкретной СУБД Переносимость Наличие Достоинства и недостатки SQL Достоинства: • • • Независимость от конкретной СУБД Переносимость Наличие стандартов Полноценны язык для работы с реляционными БД Повсеместная распространенность Быстрое обучение в простых случаях Связывание с различными языками программирования Поддержка ODBC и JDBC Фактор времени: научились хорошо реализовывать.

Недостатки: • Несоответствие реляционной модели данных (наличие дубликатов, необязательность первичного ключа, возможность упорядочения результатов) Недостатки: • Несоответствие реляционной модели данных (наличие дубликатов, необязательность первичного ключа, возможность упорядочения результатов) • Недостаточно продуманный механизм неопределенных значений • Сложность формулировок и громоздкость.

Диалекты языка SQL: • • PL/SQL – в СУБД Oracle; Transact-SQL – в СУБД Диалекты языка SQL: • • PL/SQL – в СУБД Oracle; Transact-SQL – в СУБД Microsoft SQL; Informix-SQL – в СУБД Informix; Jet SQL – Microsoft Access.

Язык QBE (Query By Example) Теоретической основой является реляционное исчисление над доменами. Позволяет задавать Язык QBE (Query By Example) Теоретической основой является реляционное исчисление над доменами. Позволяет задавать однотабличные и многотабличные запросы к БД путем заполнения запросной формы. В каждой реляционной СУБД имеется свой вариант языка QBE. С помощью запросов на языке QBE можно выполнить следующие операции: – – – выборку данных, вычисление над данными, вставку новых записей, удаление записей, модификацию (изменение) данных. 118

Подходы к разработке языков запросов к ООБД 1. Языки, являющиеся объектно-ориентированными расширениями языков запросов Подходы к разработке языков запросов к ООБД 1. Языки, являющиеся объектно-ориентированными расширениями языков запросов реляционных систем. Наиболее распространены языки с синтаксисом, близким к известному языку SQL (OSQL, ORION, Iris и O 2 Reloop. ). 2. Построение полного логического объектноориентированного исчисления. 3. Применение дедуктивного подхода. В основном это отражает стремление разработчиков к сближению направлений дедуктивных и объектноориентированных БД. Дедуктивная БД состоит из двух частей: экстенциональной, содержащей факты, и интенциональной, содержащей правила для логического вывода новых фактов на основе экстенциональной части и запроса пользователя. 119

Языки запросов к слабоструктурированным данным Предложен ряд моделей данных и алгебр для XML, подходов Языки запросов к слабоструктурированным данным Предложен ряд моделей данных и алгебр для XML, подходов к реализации СУБД для XML-данных. В частности, существуют реализации таких систем на основе объектных и реляционных систем управления базами данных. Предложен ряд языков запросов для них - XML-QL, XQL, Lorel и т. д. XML-QL, XQL, Lorel 120

Ø XPath (XML Path Language ) — язык запросов к элементам XMLдокумента — разработан Ø XPath (XML Path Language ) — язык запросов к элементам XMLдокумента — разработан для организации доступа к частям документа XML, является стандартом консорциума W 3 C (World Wide Web Consortium). Ø является составной частью языка XQuery. 121

 • Гипертекстовые/документальные языки запросов - запросы относительно структуры с помощью переменных-путей. • Графовые • Гипертекстовые/документальные языки запросов - запросы относительно структуры с помощью переменных-путей. • Графовые языки запросов - использование графов для моделирования БД (создание языков, например, G, G+ и Graph. Log, основанных на графах). • Языки запросов для слабоструктурированных данных: Lorel, Un. QL и STRUDQL, используют помеченные графы как гибкую модель данных. 122

Язык запросов к темпоральной БД Работа с таблицей без темпоральной поддержки Работа реляционных приложений Язык запросов к темпоральной БД Работа с таблицей без темпоральной поддержки Работа реляционных приложений с темпоральной таблицей 123

SQL/Temporal Концепции и конструкции из SQL/Temporal были включены в стандарт SQL: 2011 и применяются SQL/Temporal Концепции и конструкции из SQL/Temporal были включены в стандарт SQL: 2011 и применяются в IBM DB 2, Oracle, Teradata Database, Polar. Lake, а также других СУБД, поддерживающих темпоральные данные. 124

Обработка «последовательных» запросов к темпоральной таблице 125 Обработка «последовательных» запросов к темпоральной таблице 125

Обработка «произвольных» запросов к темпоральной таблице 126 Обработка «произвольных» запросов к темпоральной таблице 126

127 127