Слайд 2
Введение в Structured Query Language (SQL)
Тема 1
Слайд 3
История версий стандарта SQL
Начало 70-х годов компания IBM
– экспериментальная СУБД System R на основе языка SEQUEL
1981 г. – SQL/DS
1987 г. – ANSI принят 1-й стандарт SQL (SQL level 1 или SQL-86 или 87)
1989 г. – SQL level 2 или SQL-89
1992 г. – ANSI SQL-92 или просто SQL2 (значительные изменения)
Слайд 4
История версий стандарта SQL
1999 г. – SQL3 или
SQL:1999
2003 г. – SQL: 2003
2006 г. – SQL: 2006
2008
г. – SQL: 2008
Слайд 5
Подмножества языка SQL
SQL-DDL (Data Definition Language) – язык определения
структур баз данных
SQL-DML (Data Manipulation Language) – язык манипулирования данными:
добавление, изменение, удаление и извлечение данных
Слайд 6
Подмножества языка SQL
SQL-DCL (Data Control Language) – язык определения
доступа к данным
SQL-TCL (Transaction Control Language) – язык управления транзакциями
Слайд 8
Символьные типы данных
CHAR или CHAR(n) – символьные строки фиксированной длины
VARCHAR(n) –
символьная строка переменной длины
Слайд 9
Целые типы данных
INTEGER или INT – целое
SMALLINT – короткое целое
Слайд 10
Вещественные типы данных
FLOAT и SMALLFLOAT – числа с плавающей точкой
DECIMAL(p)
– тип данных аналогичный FLOAT с числом значащих цифр p
DECIMAL(p,n) – аналогично
предыдущему
Слайд 11
Денежные типы данных
MONEY(p,n) – всё аналогично типу DECIMAL(p,n)
Слайд 12
Тип данных Дата и время
DATE – для хранения
даты
TIME – для хранения времени
INTERVAL – для хранения временного
интервала
DATETIME – для хранения моментов времени
Слайд 13
Последовательные типы данных
SERIAL – тип данных на основе INTEGER
Слайд 14
Двоичные типы данных
BINARY
BYTE
BLOB
Слайд 15
Операторы DDL
для создания схемы базы данных
Тема 3
Слайд 16
Операторы базы данных
CREATE DATABASE – создание базы
данных
DROP DATABASE – удаление базы данных
Слайд 17
Оператор CREATE TABLE
CREATE TABLE ( [NOT
NULL] [UNIQUE | PRIMARY KEY] [REFERENCES []] ,
...)
Слайд 18
Оператор создания таблицы CREATE
CREATE TABLE authors
(au_id
INT PRIMARY KEY,
author VARCHAR(25) NOT NULL);
CREATE
TABLE publishers
(pub_id INT PRIMARY KEY,
publisher VARCHAR(255) NOT NULL,
url VARCHAR(255));
Слайд 19
Оператор CREATE TABLE
CREATE TABLE titles
(title_id INT PRIMARY KEY,
title VARCHAR(255) NOT
NULL,
yearpub INT,
pub_id INT REFERENCES publishers(pub_id));
CREATE TABLE titleautors
(au_id INT REFERENCES authors(au_id), title_id INT REFERENCES titles(title_id));
Слайд 20
Оператор CREATE TABLE
CREATE TABLE wwwsites
(site_id INT
PRIMARY KEY,
site VARCHAR(255) NOT NULL,
url
VARCHAR(255));
CREATE TABLE wwwsiteauthors
(au_id INT REFERENCES authors(au_id),
site_id INT REFERENCES wwwsites(site_id));
Слайд 22
Оператор DROP TABLE
DROP TABLE – удаление
таблицы
Слайд 23
Модификация таблицы ALTER
ALTER TABLE ADD
(
[NOT NULL]
[UNIQUE | PRIMARY KEY]
[REFERENCES
<имя_мастер_таблицы> [<имя_столбца>]]
,...) - добавить столбцы
Слайд 24
ALTER TABLE DROP (,...) - удалить столбцы
Модификация
таблицы ALTER
Слайд 25
ALTER TABLE MODIFY
(
[NOT
NULL]
[UNIQUE | PRIMARY KEY]
[REFERENCES ]]
,...)
– модификация характеристик столбцов
Модификация таблицы ALTER
Слайд 26
Операторы DDL
создания индексов
Тема 4
Слайд 27
Операторы создания индексов
CREATE [UNIQUE] INDEX ON
(,...)
Слайд 28
Создание индексов для БД publications
CREATE INDEX au_names ON
authors (author);
CREATE INDEX au_index ON authors (au_id);
CREATE INDEX
title_index ON titles (title_id);
CREATE INDEX pub_index ON publishers (pub_id);
CREATE INDEX site_index ON wwwsites (site_id);
Слайд 29
Оператор удаления индекса
DROP INDEX
Слайд 30
Операторы DCL
ДЛЯ управления правами доступа
Тема 5
Слайд 31
Оператор передачи прав на таблицу
GRANT
ON
[]
TO
Слайд 32
Тип права на таблицу
SELECT – получение информации из
таблицы
UPDATE – изменение информации в таблице
INSERT – добавление записей
в таблицу
DELETE – удаление записей из таблицы
INDEX – индексирование таблицы
ALTER – изменение схемы определения таблицы
ALL – все права
Слайд 33
Примеры
GRANT ALL ON publishers TO andy;
GRANT SELECT INSERT
ON publishers TO peter;
GRANT SELECT ON publishers TO PUBLIC;
Слайд 34
REVOKE ON [] FROM
Оператор отмены
прав на таблицу
Слайд 35
Назначение привилегий на БД в целом
GRANT ON
TO
Слайд 36
Пример списка прав на БД
поддерживаемых СУБД Informix:
CONNECT
RESOURCE
DBA
Слайд 37
Отмена прав на БД в целом
REVOKE FROM
Слайд 38
Операторы DML
ДЛЯ модификации данных
Тема 6
Слайд 39
Добавление новой записи в таблицу
INSERT INTO
[ (,,...) ] VALUES (,,..)
Слайд 40
Примеры
INSERT INTO publishers
VALUES (16, "Microsoft Press","http://www.microsoft.com");
INSERT
INTO publishers
(publisher, pub_id)
VALUES ("Super Computer
Publishing",17);
Слайд 41
Модификация записей
UPDATE
SET =,...
[WHERE
]
Например:
UPDATE publishers SET url="http://www.superpub.com" WHERE pub_id=17;
Слайд 42
Операции допустимые в WHERE
> , < , >=
,
поля на нулевое значение: IS NULL, IS NOT NULL
проверки на вхождение в диапазон: BETWEEN и NOT BETWEEN
проверки на вхождение в список: IN и NOT IN
проверки на вхождение подстроки: LIKE и NOT LIKE
отдельные операции соединяются связями AND, OR, NOT и группируются с помощью скобок.
Слайд 43
Пример
UPDATE publishers
SET url="url not defined"
WHERE url IS NULL;
Слайд 44
Удаление записей
DELETE FROM [WHERE ]
Например:
DELETE FROM
publishers WHERE publisher = "Super Computer Publishing";
Слайд 45
Оператор DML
ДЛЯ Выборки
данных
Тема 7
Слайд 46
Оператор SELECT (полный синтаксис)
SELECT [ALL | DISTINCT]
FROM , ...
[ WHERE ]
[ GROUP BY <имя_столбца>,... ]
[ HAVING <условие> ]
[ORDER BY <имя_столбца>
[ASC | DESC],... ]
Слайд 47
Использование ALL и DISTINCT
DISTINCT – исключает повторяющиеся
записи из выборки,
ALL указывает, что в результат необходимо включать
все строки.
Слайд 48
Примеры
SELECT author FROM authors;
SELECT * FROM authors;
SELECT title
FROM titles
WHERE yearpub>=1995 AND
yearpub<=1997;
Слайд 49
Примеры
SELECT title FROM titles WHERE yearpub BETWEEN 1995
AND 1997;
SELECT title FROM titles WHERE yearpub IN (1995,1996,1997);
Слайд 50
Пример вложенных запросов
SELECT title FROM titles
WHERE pub_id
IN
(SELECT pub_id
FROM publishers
WHERE publisher='Oracle Press');
Слайд 51
Использование LIKE
WHERE LIKE [ ESCAPE
]
В шаблонах используются два символа:
% (знак процента) –
заменяет любое количество символов,
_ (подчеркивание) – заменяет одиночный символ.
Слайд 52
Использования LIKE
SELECT publisher, url FROM publishers WHERE publisher
LIKE '%Wiley%';
SELECT title FROM titles WHERE title LIKE 'SQL%';
SELECT
site, url FROM wwwsites WHERE url LIKE '%my@_works%' ESCAPE '@';
Слайд 53
Выборка из нескольких таблиц
Тема 8
Слайд 54
В операторе SELECT после ключевого слова FROM указывается список таблиц, по которым
производится поиск данных.
После ключевого слова WHERE указывается условие, по
которому производится слияние
Слайд 55
Пример
SELECT titles.title, titles.yearpub, publishers.publisher
FROM titles,
publishers
WHERE titles.pub_id=publishers.pub_id;
Слайд 56
Пример
SELECT titles.title, titles.yearpub, publishers.publisher
FROM titles,publishers
WHERE
titles.pub_id=publishers.pub_id
AND titles.yearpub>1996;
Слайд 57
Пример
SELECT authors.author, titles.title,titles.yearpub, publishers.publisher
FROM titles, publishers,
titleauthors
WHERE titleauthors.au_id=authors.au_id AND titleauthors.title_id=titles.title_id AND titles.pub_id=publishers.pub_id AND titles.yearpub
> 1996;
Слайд 59
В конструкции можно использовать константы, функции и
их комбинации с арифметическими операциями и скобками.
Слайд 60
Пример
SELECT title, yearpub-1986
FROM titles
WHERE
yearpub > 1986;
Слайд 61
В арифметических выражениях
допускаются операции:
сложения (+),
вычитания (-),
деления (/),
умножения (*),
а
также различные функции (COS, SIN, ABS и др.).
Также
в запрос можно добавить строковую константу
Слайд 62
Пример
SELECT 'the title of the book is', title,
yearpub-1992
FROM titles
WHERE yearpub > 1992;
Слайд 63
Агрегатные функции
AVG() – среднее по всем значениям
данного поля
COUNT() или COUNT (*) – число записей
MAX() – максимальное
из всех значений данного поля
MIN(<имя поля>) – минимальное из всех значений данного поля
SUM(<имя поля>) – сумма всех значений данного поля
Слайд 64
Пример
SELECT MIN(yearpub) FROM titles;
Слайд 65
Пример
SELECT COUNT(*) FROM titles WHERE title LIKE '%SQL%';
Слайд 66
Группировка данных
в операторе SELECT
Тема 10
Слайд 68
Пример
SELECT publishers.publisher, count(titles.title)
FROM titles, publishers
WHERE
titles.pub_id=publishers.pub_id
GROUP BY publisher;
Слайд 69
Пример
SELECT publishers.publisher, count(titles.title)
FROM titles, publishers
WHERE titles.pub_id=publishers.pub_id
GROUP BY publisher
HAVING COUNT(*)>1;
Слайд 70
Пример
SELECT publishers.publisher, count(titles.title)
FROM titles,publishers
WHERE titles.pub_id=publishers.pub_id
GROUP BY publisher
HAVING publisher LIKE '%Press';
Слайд 71
Сортировка данных
в операторе SELECT
Тема 11
Слайд 72
ORDER BY
по возрастанию ASC или
по убыванию DESC
Слайд 73
Пример
SELECT author FROM authors
ORDER BY author;
Слайд 74
Пример
SELECT authors.author, titles.title,titles.yearpub, publishers.publisher
FROM authors,titles, publishers, titleauthors
WHERE titleauthors.au_id=authors.au_id AND titleauthors.title_id=titles.title_id AND titles.pub_id=publishers.pub_id
ORDER BY authors.author
ASC, titles.yearpub DESC;
Слайд 76
UNION
В SQL предусмотрена возможность выполнения операции реляционной алгебры
"ОБЪЕДИНЕНИЕ" (UNION) над отношениями, являющимися результатами оператора SELECT.
Эти отношения
должны быть определены по одной схеме.
Слайд 77
Пример
SELECT publisher, url FROM publishers
UNION
SELECT site, url FROM wwwsites;
Слайд 78
Использование представлений
Тема 13
Слайд 79
Определение
Представление (view) – это таблица, содержимое которой берется
из других таблиц посредством запроса.
Представления автоматически изменяются при изменении
содержимого базовых таблиц
Слайд 80
CREATE VIEW
CREATE VIEW [,...]
AS
Слайд 81
Ограничения
представление должно базироваться на единственном запросе (UNION не
допустимо)
выходные данные запроса, формирующего представление, должны быть не
упорядочены (ORDER BY не допустимо)
Слайд 82
Пример
CREATE VIEW books AS SELECT authors.author, titles.title, titles.yearpub,
publishers.publisher
FROM authors, titles, publishers, titleauthors
WHERE
titleauthors.au_id=authors.au_id AND titleauthors.title_id=titles.title_id AND titles.pub_id=publishers.pub_id
Слайд 83
Пример
Из представления можно осуществлять выборку данных
SELECT titles
FROM books
WHERE author LIKE '%Date‘
SELECT author, count(title)
FROM books
GROUP BY author
Слайд 84
Преимущества представлений
Сокращение времени выборки из нескольких таблиц
Использование вычисляемых
полей (столбцов)
Слайд 85
Пример
CREATE VIEW amount (publisher, books_count)
AS SELECT
publishers.publisher, count(titles.title)
FROM titles,
publishers
WHERE
titles.pub_id=publishers.pub_id
GROUP BY publisher;
Слайд 86
Ограничения на изменение данных
Если представление основано на одной
таблице, изменения данных в нем допускаются. При этом изменяются
данные в связанной с ним таблице.
Если представление основано более чем на одной таблице, то изменения данных в нем не допускаются, т.к. в большинстве случаев СУБД не может правильно восстановить схему базовых таблиц из схемы представления.
Слайд 87
Удаление представления
DROP VIEW
Слайд 89
Хранимые процедуры
процедурные расширения SQL (например, PL/SQL компании Oracle
и т.д.), содержащие логические операторы (IF ... THEN ...
ELSE), операторы перехода по условию (SWITCH ... CASE ...), операторы циклов (FOR, WHILE, UNTIL) и операторы передачи управления в процедуры (CALL, RETURN)
Слайд 90
Определение
Хранимые процедуры – это функциональные модули хранящиеся на
сервере вместе с базой данных.
Могут быть вызваны с передачей
параметров любым пользователем, имеющим на то соответствующие права.
Могут быть реализованы в виде внешних по отношению к СУБД модулей на языках общего назначения, таких как C или Pascal.
Слайд 91
Пример для СУБД PostgreSQL
CREATE FUNCTION ([,...])
RETURNS
AS [ | ]
LANGUAGE 'SQL' | 'C' | 'internal'
Слайд 92
Триггеры
– это хранимая процедура без параметров, которая вызывается
при выполнении оператора модификации этой таблицы (INSERT, UPDATE, DELETE).
Выполняются
автоматически, независимо от причины модификации данных – действия человека-оператора или прикладной программы.
Слайд 93
Синтаксис («усредненный" )
CREATE TRIGGER
ON
FOR { INSERT | UPDATE | DELETE }
[, INSERT | UPDATE | DELETE ] …
AS
Слайд 94
Мониторы событий
- хранимые процедуры, которые непрерывно сканируют одну
или несколько таблиц на предмет обнаружения тех или иных
событий