Similar presentations:
Управление данными. Язык SQL. (Лекция 6)
1. Управление данными
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
Лекция 6. Язык SQL
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Управление данными
2. Рассматриваемые темы
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
Операторы DDL: Create, Alter, Drop.
101011110101110110101010101010111000111101010101010011010101110001010110
Операторы DML: Insert, Update, Delete, Select.
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
Управление правами пользователя Grant,
010001010101010111010101010001010110101010110101010101011001011011110111
Revoke.
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Рассматриваемые темы
Язык SQL. Его назначение.
Подмножества языка DDL и DML.
Реализация специальной логики
приложений – триггеры и хранимые
процедуры.
Расширения ANSI SQL.
3. Язык SQL
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Язык SQL
Язык структурированных запросов
(Structured queries language);
Текстовый язык, семантически
приближенный к английскому языку;
Каждый запрос – отдельная команда для
СУБД (оператор) с фиксированным
синтаксисом.
Имеет подмножества операторов DDL
(определение данных) и DML
(манипулирование данными)
4. DDL
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
Операторы создания, изменения и удаления баз данных и
10111010101001010101101010110101010110101010101010110101010101101010101
объектов схемы данных
01010110101010110101010101011100010101101010101010101101101110101010010
Создание:
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
CREATE <OBJECT> <NAME> [параметры]
11000110110101000011010111101010111000101010101010100010101010000101010
Типы объектов:
101011110101110110101010101010111000111101010101010011010101110001010110
DATABASE – база данных;
10110101010101010101111010101010101011010101010101011010101010101010101
SCHEMA – схема данных;
010101011101101010100010110101010101010101011110101111010101011111111101
TABLE – таблица (отношение);
010001010101010111010101010001010110101010110101010101011001011011110111
CONSTRAINT – ограничение;
010101110101010101110000111001001101011010101001110100101011011110101010
ATTRIBUTE – атрибут;
110101010101111111111001010001010110111100001101010100010110100101010101
VIEW – представление;
0101000111000101101010101010110111010101000111111100101100111111100101000
INDEX – индекс;
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
SEQUENCE – последовательность;
10110101010101010100011010101011101110101100010101010110101010101010101
STORED PROCEDURE – хранимая процедура;
00101010111010101010010101011010101101110101010101011000110110101000011
TRIGGER – триггер;
010111101010111000101010101010100010101010000101010101011110101110110101
USER – пользователь БД.
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL
5. DDL. Создание таблиц
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
<attribute>: name <datatype> [<constraint>]
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
<constraint>: CONSTRAINT [name] <c_type>
010101110101010101110000111001001101011010101001110100101011011110101010
<parameters>
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Создание таблиц
CREATE TABLE <NAME> (<attributes>
[,<constraints>])
6. DDL. Типы данных атрибутов
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
Числовые:
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Счетчик – counter, serial, auto_increment
00101010101110101010101010101110101010100101010110101011011101010101010
Целое – integer (+ unsigned)
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Длинное целое – long (+ unsigned)
10110101010101010101111010101010101011010101010101011010101010101010101
C плавающей запятой – float, double
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
Логический – bit, boolean, smallint
010101110101010101110000111001001101011010101001110100101011011110101010
Строковые
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
Один символ – char
00011010101000010111001001010110100010101110101011110001010001100010101
Строка n символов – char[n], varchar[n]
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
Дата, время – date, time, datetime, timestamp
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
Бинарные данные – (long-)(var-)binary
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Типы данных атрибутов
7. DDL. Ограничения
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Ограничения
Default <val> – принимать значение по
умолчанию;
Not Null – запрет на отсутствие значений
Unique – запрет повторов
Primary key – первичный ключ (not null +
unique)
Foreign key references <table> (<PK
attribute>) <mode> – внешний ключ
(ссылка)
Check <condition> – требование соблюдать
условие
8. DDL. Пример создания таблицы
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
CREATE TABLE "Поезд"(
01010110101010110101010101011100010101101010101010101101101110101010010
"НомерПоезда" integer
NOT NULL,
10110101010101010111010101010101010101101010110110101001101010101011101
"Название"
character varying(150)
,
"Класс"
integer
NOT NULL,
00101010101110101010101010101110101010100101010110101011011101010101010
"Режим"
integer
NOT NULL,
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
CONSTRAINT train_pk
PRIMARY KEY ("НомерПоезда"),
CONSTRAINT train_class_fk FOREIGN KEY ("Класс")
10110101010101010101111010101010101011010101010101011010101010101010101
REFERENCES "КлассПоезда" ("КодКласса")
010101011101101010100010110101010101010101011110101111010101011111111101
ON UPDATE CASCADE ON DELETE CASCADE,
010001010101010111010101010001010110101010110101010101011001011011110111
CONSTRAINT train_regim_fk FOREIGN KEY ("Режим")
010101110101010101110000111001001101011010101001110100101011011110101010
REFERENCES "РежимКурсирования" ("КодРежима")
ON UPDATE CASCADE ON DELETE CASCADE
110101010101111111111001010001010110111100001101010100010110100101010101
);
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
(пример для СУБД PostgreSQL)
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Пример создания таблицы
9. DDL. Изменение объекта
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
ALTER TABLE “Станции” ADD COLUMN “НаселенныйПункт” CHAR(50)
00101010111010101010010101011010101101110101010101011000110110101000011
ALTER TABLE “Станции” ADD CONSTRAINT “U2” UNIQUE “НаселенныйПункт”
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Изменение объекта
ALTER <object> <name> [действия по
изменению]
Alter table (add column, alter column, drop
column) – изменение таблицы
Alter view – изменение представления
Alter database – изменение базы данных
Alter procedure – изменение процедуры
10. DDL. Удаление объекта
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
ALTER TABLE “Станции” DROP COLUMN “НаселенныйПункт”
101011110101110110101010101010111000111101010101010011010101110001010110
DROP TABLE “Станции”
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Удаление объекта
DROP <object> <name>
11. DDL. Порядок создания и удаления объектов схемы:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
1. Создается пользователь;
00101010101110101010101010101110101010100101010110101011011101010101010
2. Создается база данных;
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
3. Создается схема;
10110101010101010101111010101010101011010101010101011010101010101010101
4. Создаются последовательности;
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
5. Создаются таблицы (сначала родительские,
010101110101010101110000111001001101011010101001110100101011011110101010
потом дочерние);
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
6. Создаются индексы, триггеры и процедуры;
00011010101000010111001001010110100010101110101011110001010001100010101
7. Создаются представления.
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
Удаление – в обратном порядке.
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DDL. Порядок создания и удаления
объектов схемы:
12. DML
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Извлечение данных – SELECT;
00101010101110101010101010101110101010100101010110101011011101010101010
Вставка новых данных – INSERT;
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Изменение данных – UPDATE;
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
Удаление данных – DELETE;
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML
Операторы манипулирования данными:
Объект работы – отношение (таблица) или
соединение отношений
Единица манипулирования – запись
13. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
Оператор предназначен для извлечения
из отношения или соединения отношений
набора записей, отвечающих заданным
условиям.
Результат работы – новое отношение.
Реализует все операции реляционной
алгебры (объединение, пересечение,
проекция, соединение, выборка)
14. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
Формат:
SELECT <список атрибутов>
FROM <соединяемые отношения>
[WHERE <условия выборки>]
[ORDER BY <критерии сортировки>]
[GROUP BY <критерии группировки>]
[HAVING <условия отбора групп>]
15. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
<список атрибутов>:
01010110101010110101010101011100010101101010101010101101101110101010010
Реализует проекцию РА.
10110101010101010111010101010101010101101010110110101001101010101011101
Указываются имена тех атрибутов, извлекаемых из
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
соединенных отношений, которые войдут в результат.
101011110101110110101010101010111000111101010101010011010101110001010110
Для одноименных атрибутов указывается отношение, из
10110101010101010101111010101010101011010101010101011010101010101010101
которого он извлекается (table.attribute)
010101011101101010100010110101010101010101011110101111010101011111111101
Порядок вхождения определяется порядком перечисления.
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
Если нужно включить все атрибуты, указывается *.
110101010101111111111001010001010110111100001101010100010110100101010101
Для переименования атрибута в результирующем отношении
0101000111000101101010101010110111010101000111111100101100111111100101000
применяется ключевое слово AS (attribute as new_name);
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
Вместо атрибута в результат может вставляться результат,
10110101010101010100011010101011101110101100010101010110101010101010101
возвращаемый функцией (sin(angle) as “sine of angle”);
00101010111010101010010101011010101101110101010101011000110110101000011
Для запрета повторений в результате используется директива
010111101010111000101010101010100010101010000101010101011110101110110101
DISTINCT
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
16. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
<соединяемые отношения>:
01010110101010110101010101011100010101101010101010101101101110101010010
Реализует соединение РА.
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
Указываются имена соединяемых отношений, декартово
11000110110101000011010111101010111000101010101010100010101010000101010
произведение которых формирует результат.
101011110101110110101010101010111000111101010101010011010101110001010110
Для удобства записи каждому отношению может быть
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
присвоен псевдоним (name synonim1, synonim2)
010001010101010111010101010001010110101010110101010101011001011011110111
Перечисление отношений:
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
Простое перечисление: FROM table1, table2, …
0101000111000101101010101010110111010101000111111100101100111111100101000
Полное декартово произведение;
00011010101000010111001001010110100010101110101011110001010001100010101
Соединение по условию: FROM table1 [INNER | LEFT |
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
RIGHT | FULL] JOIN table2 on <conditon>
00101010111010101010010101011010101101110101010101011000110110101000011
Декартово произведение, содержащее только строки,
010111101010111000101010101010100010101010000101010101011110101110110101
отвечающие условию
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
17. Примеры соединения:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
table1
table2
10111010101001010101101010110101010110101010101010110101010101101010101
1) SELECT * FROM table1, table2
num name
num value
result
01010110101010110101010101011100010101101010101010101101101110101010010
1
a
1
xxx
table1.num name table2.num value
10110101010101010111010101010101010101101010110110101001101010101011101
2
b
3
yyy
1
a
1
xxx
00101010101110101010101010101110101010100101010110101011011101010101010
3
c
5
zzz
1
a
3
yyy
11000110110101000011010111101010111000101010101010100010101010000101010
1
a
5
zzz
101011110101110110101010101010111000111101010101010011010101110001010110
2
b
1
xxx
10110101010101010101111010101010101011010101010101011010101010101010101
2
b
3
yyy
010101011101101010100010110101010101010101011110101111010101011111111101
2
b
5
zzz
010001010101010111010101010001010110101010110101010101011001011011110111
3
c
1
xxx
3
c
3
yyy
010101110101010101110000111001001101011010101001110100101011011110101010
3
c
5
zzz
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
2) SELECT * FROM table1 a INNER JOIN table2 b ON a.num=b.num
00011010101000010111001001010110100010101110101011110001010001100010101
result
01111001010110101010101010110010101011010101010101010111101011000101010
a.num name b.num value
10110101010101010100011010101011101110101100010101010110101010101010101
1
a
1
xxx
00101010111010101010010101011010101101110101010101011000110110101000011
3
c
3
yyy
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры соединения:
18. Примеры соединения:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
table1
table2
10111010101001010101101010110101010110101010101010110101010101101010101
num name
num value
01010110101010110101010101011100010101101010101010101101101110101010010
1
a
1
xxx
10110101010101010111010101010101010101101010110110101001101010101011101
2
b
3
yyy
00101010101110101010101010101110101010100101010110101011011101010101010
3
c
5
zzz
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
3) SELECT * FROM table1 a XXX JOIN table2 b ON a.num=b.num
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
result
result
result
a.num name b.num value
a.num name b.num value
010001010101010111010101010001010110101010110101010101011001011011110111
a.num name b.num value
1
a
1
xxx
1
a
1
xxx
1
a
1
xxx
010101110101010101110000111001001101011010101001110100101011011110101010
2
b
3
c
3
yyy
2
b
110101010101111111111001010001010110111100001101010100010110100101010101
3
c
3
yyy
5
zzz
3
c
3
yyy
0101000111000101101010101010110111010101000111111100101100111111100101000
5
zzz
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
XXX = LEFT
XXX = RIGHT
XXX = FULL
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры соединения:
19. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
<условия выборки>:
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
Реализует выборку РА.
10110101010101010111010101010101010101101010110110101001101010101011101
Указывается одно логическое выражение, которому должны
00101010101110101010101010101110101010100101010110101011011101010101010
удовлетворять все записи соединенного отношения.
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Записи, не удовлетворяющие условию, отбрасываются.
10110101010101010101111010101010101011010101010101011010101010101010101
Допускаются логические связки AND, OR, NOT.
010101011101101010100010110101010101010101011110101111010101011111111101
Основные условия:
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
Для чисел и дат:
110101010101111111111001010001010110111100001101010100010110100101010101
<, >, >=, <= , BETWEEN min AND max;
0101000111000101101010101010110111010101000111111100101100111111100101000
Для строк:
00011010101000010111001001010110100010101110101011110001010001100010101
like ‘pattern’ – сравнение с образцом (_, %);
01111001010110101010101010110010101011010101010101010111101011000101010
Для всех типов:
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
=, <> IS NULL, IS NOT NULL - для всех типов (нельзя = NULL!);
010111101010111000101010101010100010101010000101010101011110101110110101
IN (set or subquery), EXISTS (subquery)
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
20. Примеры условий
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
SELECT Фамилия, Курс FROM СТУДЕНТ WHERE
01010110101010110101010101011100010101101010101010101101101110101010010
Специальность=’Математика’ AND Курс=5
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
SELECT Фамилия FROM СТУДЕНТ WHERE Специальность IN
11000110110101000011010111101010111000101010101010100010101010000101010
(’Математика’, ’Экономика’)
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
SELECT Фамилия, Специальность FROM СТУДЕНТ WHERE
010101011101101010100010110101010101010101011110101111010101011111111101
НомерСтудента BETWEEN 200 AND 300
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
SELECT Фамилия, Специальность FROM СТУДЕНТ WHERE
0101000111000101101010101010110111010101000111111100101100111111100101000
НомерСтудента >= 200 AND НомерСтудента <= 300
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
SELECT Фамилия AS ‘ФИО’ FROM СТУДЕНТ WHERE Фамилия LIKE ‘Р%’
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
SELECT Фамилия FROM СТУДЕНТ WHERE Курс IS NULL
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры условий
21. Примеры условий на соединение
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
SELECT Фамилия FROM СТУДЕНТ WHERE НомерСтудента IN
01010110101010110101010101011100010101101010101010101101101110101010010
(SELECT НомерСтудента FROM ЗАПИСЬ WHERE Предмет = ‘А’)
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
SELECT Фамилия FROM СТУДЕНТ WHERE СТУДЕНТ.НомерСтудента
11000110110101000011010111101010111000101010101010100010101010000101010
IN (SELECT ЗАПИСЬ.НомерСтудента FROM ЗАПИСЬ WHERE
101011110101110110101010101010111000111101010101010011010101110001010110
ЗАПИСЬ.Предмет IN (SELECT ЗАНЯТИЯ. Предмет FROM ЗАНЯТИЯ
10110101010101010101111010101010101011010101010101011010101010101010101
WHERE ЗАНЯТИЯ.ДеньНедели = 2))
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
SELECT СТУДЕНТ.НомерСтудента, СТУДЕНТ.Фамилия,
010101110101010101110000111001001101011010101001110100101011011110101010
ЗАПИСЬ.Предмет FROM СТУДЕНТ, ЗАПИСЬ WHERE
110101010101111111111001010001010110111100001101010100010110100101010101
СТУДЕНТ.НомерСтудента = ЗАПИСЬ.НомерСтудента
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
SELECT НомерСтудента, Предмет, ДеньНедели FROM СТУДЕНТ,
10110101010101010100011010101011101110101100010101010110101010101010101
ЗАПИСЬ, ЗАНЯТИЯ WHERE СТУДЕНТ.НомерСтудента =
00101010111010101010010101011010101101110101010101011000110110101000011
ЗАПИСЬ.НомерСтудента AND ЗАПИСЬ.Предмет = ЗАНЯТИЯ. Предмет
010111101010111000101010101010100010101010000101010101011110101110110101
AND СТУДЕНТ.Фамилия = ‘Сидоров’
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры условий на соединение
22. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
<критерии сортировки>:
01010110101010110101010101011100010101101010101010101101101110101010010
Указываются имена атрибутов, по значениям которых
10110101010101010111010101010101010101101010110110101001101010101011101
требуется упорядочить записи в результате.
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
При указании более одного атрибута – лексикографическая
101011110101110110101010101010111000111101010101010011010101110001010110
сортировка.
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
Для каждого атрибута может быть задано свое направление
010001010101010111010101010001010110101010110101010101011001011011110111
сортировки:
010101110101010101110000111001001101011010101001110100101011011110101010
ASC – по возрастанию
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
DESC – по убыванию
00011010101000010111001001010110100010101110101011110001010001100010101
Вместо имени атрибута может быть указан его порядковый
01111001010110101010101010110010101011010101010101010111101011000101010
номер в результате
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
Если направление сортировки не указано, сортировка
010111101010111000101010101010100010101010000101010101011110101110110101
производится по возрастанию
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
23. Примеры сортировки
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
SELECT Фамилия, Специальность, Курс FROM
01010110101010110101010101011100010101101010101010101101101110101010010
СТУДЕНТ WHERE Специальность=’Экономика’
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
ORDER BY Фамилия
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
SELECT Фамилия, Специальность, Курс FROM
010101011101101010100010110101010101010101011110101111010101011111111101
СТУДЕНТ WHERE Курс IN (1, 2, 4) ORDER BY
010001010101010111010101010001010110101010110101010101011001011011110111
Фамилия ASC, 3 DESC
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры сортировки
24. DML. Оператор SELECT Агрегирующие функции
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
При необходимости запрос может вернуть не сами записи, а их
10110101010101010111010101010101010101101010110110101001101010101011101
агрегированные величины:
00101010101110101010101010101110101010100101010110101011011101010101010
COUNT – количество значений поля
11000110110101000011010111101010111000101010101010100010101010000101010
SUM – сумма значений поля
101011110101110110101010101010111000111101010101010011010101110001010110
MIN – минимальное значение поля
10110101010101010101111010101010101011010101010101011010101010101010101
MAX – максимальное значение поля
010101011101101010100010110101010101010101011110101111010101011111111101
AVG – среднее (арифметическое) значение поля
010001010101010111010101010001010110101010110101010101011001011011110111
STDDEV – стандартное отклонение поля
010101110101010101110000111001001101011010101001110100101011011110101010
В этом случае всегда возвращается ОДНА запись.
110101010101111111111001010001010110111100001101010100010110100101010101
НЕЛЬЗЯ в один запрос вставлять поле и агрегированную величину:
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
SELECT COUNT([DISTINCT] ФАМИЛИЯ), SUM(СТИПЕНДИЯ) FROM
01111001010110101010101010110010101011010101010101010111101011000101010
СТУДЕНТЫ
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
SELECT ФАМИЛИЯ, COUNT(ИМЯ) FROM СТУДЕНТЫ
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
Агрегирующие функции
25. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
:
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Указываются имена атрибутов, одинаковые
00101010101110101010101010101110101010100101010110101011011101010101010
значения которых образуют одинаковую
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
групповую запись в результате.
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
При использовании группировки для каждой
010001010101010111010101010001010110101010110101010101011001011011110111
группы можно вычислить агрегированное
010101110101010101110000111001001101011010101001110100101011011110101010
значение (SUM, COUNT etc.).
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
Группировать можно только по тем атрибутам,
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
которые указаны после SELECT, а не по любым
10110101010101010100011010101011101110101100010101010110101010101010101
атрибутам соединяемых отношений.
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
<критерии группировки>
26. DML. Оператор SELECT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
:
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Указываются требования, которым должны
00101010101110101010101010101110101010100101010110101011011101010101010
удовлетворять сформированные группы, чтобы
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
быть отобранными в результат.
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
Если группа не удовлетворяет условию, она вся
010001010101010111010101010001010110101010110101010101011001011011110111
отбрасывается.
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
При использовании в одном запросе секций
0101000111000101101010101010110111010101000111111100101100111111100101000
WHERE и HAVING сначала выполняется WHERE
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
(отбор записей), потом GROUP BY (группировка),
10110101010101010100011010101011101110101100010101010110101010101010101
а потом – HAVING (отбраковка групп).
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор SELECT
<условия отбора групп>
27. Примеры группировки
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
SELECT Специальность, COUNT(*) FROM СТУДЕНТ
01010110101010110101010101011100010101101010101010101101101110101010010
GROUP BY Специальность
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
SELECT Специальность, COUNT(*) FROM СТУДЕНТ
101011110101110110101010101010111000111101010101010011010101110001010110
GROUP BY Специальность HAVING COUNT(*) > 2
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
SELECT Специальность, MAX(НомерСтудента) FROM
010101110101010101110000111001001101011010101001110100101011011110101010
СТУДЕНТ WHERE Курс = 4
110101010101111111111001010001010110111100001101010100010110100101010101
GROUP BY Специальность HAVING COUNT(*) > 1
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры группировки
28. Реализация теоретико-множественных операций
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Объединение R1 R2:
00101010101110101010101010101110101010100101010110101011011101010101010
(SELECT * FROM R1) UNION (SELECT * FROM R2)
11000110110101000011010111101010111000101010101010100010101010000101010
Пересечение R1 R2:
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
SELECT * FROM R1 WHERE IN (SELECT * FROM R2)
010101011101101010100010110101010101010101011110101111010101011111111101
Разность R1\R2:
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2)
110101010101111111111001010001010110111100001101010100010110100101010101
Симметрическая разность R1 R2:
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
(SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2))
01111001010110101010101010110010101011010101010101010111101011000101010
UNION (SELECT * FROM R2 WHERE NOT IN (SELECT * FROM R1))
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
Декартово произведение R1 R2:
010111101010111000101010101010100010101010000101010101011110101110110101
SELECT * FROM R1, R2
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Реализация теоретико-множественных
операций
29. DML. Оператор UPDATE
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
Оператор предназначен для изменения в
01010110101010110101010101011100010101101010101010101101101110101010010
отношении (или соединении отношений, если это
10110101010101010111010101010101010101101010110110101001101010101011101
допускает БД) набора записей, отвечающих
00101010101110101010101010101110101010100101010110101011011101010101010
заданным условиям.
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Изменяются указанные в запросе поля записей.
10110101010101010101111010101010101011010101010101011010101010101010101
Результат работы – отношение с измененными
010101011101101010100010110101010101010101011110101111010101011111111101
записями. Сам оператор никакого результата не
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
возвращает (нельзя использовать в SELECT).
110101010101111111111001010001010110111100001101010100010110100101010101
При обновлении могут срабатывать триггеры, а
0101000111000101101010101010110111010101000111111100101100111111100101000
так же выполняться обновления значений
00011010101000010111001001010110100010101110101011110001010001100010101
внешних ключей в ссылающихся таблицах.
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
Запрос может быть не исполнен, если новое
00101010111010101010010101011010101101110101010101011000110110101000011
значение будет нарушать ограничения.
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор UPDATE
30. DML. Оператор UPDATE
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
Name
– имя обновляемой таблицы, или их
010001010101010111010101010001010110101010110101010101011001011011110111
соединение (join)*
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
Field
– имя обновляемого поля
0101000111000101101010101010110111010101000111111100101100111111100101000
Val
– присваиваемое полю значение (может быть
00011010101000010111001001010110100010101110101011110001010001100010101
выражение, в том числе, использующее
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
СТАРОЕ значение поля)
00101010111010101010010101011010101101110101010101011000110110101000011
Condition – условие, которому должна удовлетворять
010111101010111000101010101010100010101010000101010101011110101110110101
обновляемая запись
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор UPDATE
UPDATE <Name>
SET <field=val [, field=val, …]>
[WHERE <Condition>]
31. Примеры обновления
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
UPDATE Факультеты f INNER JOIN Кафедры k ON f.ID = k.FacID SET
01010110101010110101010101011100010101101010101010101101101110101010010
f.Бюджет = 0 WHERE k.Выпускающая=true
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
UPDATE persons SET street = 'Nissestien 67', city = 'Sandnes' WHERE
11000110110101000011010111101010111000101010101010100010101010000101010
lastname = 'Tjessem' AND firstname = 'Jakob‘
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
UPDATE emp a
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
SET deptno = (SELECT deptno FROM dept WHERE loc = ‘BOSTON’),
010101110101010101110000111001001101011010101001110100101011011110101010
(sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM emp
110101010101111111111001010001010110111100001101010100010110100101010101
b WHERE a.deptno = b.deptno)
0101000111000101101010101010110111010101000111111100101100111111100101000
WHERE deptno IN (SELECT deptno FROM dept WHERE loc =
00011010101000010111001001010110100010101110101011110001010001100010101
‘DALLAS’ OR loc = ‘DETROIT’)
01111001010110101010101010110010101011010101010101010111101011000101010
Примеры обновления
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
UPDATE sales SET SaleDate=Null, Count=0
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
32. DML. Оператор DELETE
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
Оператор предназначен для удаления в
01010110101010110101010101011100010101101010101010101101101110101010010
отношении (или соединении отношений, если это
10110101010101010111010101010101010101101010110110101001101010101011101
допускает БД) набора записей, отвечающих
00101010101110101010101010101110101010100101010110101011011101010101010
заданным условиям.
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Записи удаляются целиком (нельзя удалить
10110101010101010101111010101010101011010101010101011010101010101010101
часть записи).
010101011101101010100010110101010101010101011110101111010101011111111101
Результат работы – отношение с удаленными
010001010101010111010101010001010110101010110101010101011001011011110111
записями. Сам оператор никакого результата не
010101110101010101110000111001001101011010101001110100101011011110101010
возвращает (нельзя использовать в SELECT)
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
При удалении могут срабатывать триггеры, а так
00011010101000010111001001010110100010101110101011110001010001100010101
же выполняться
01111001010110101010101010110010101011010101010101010111101011000101010
«об-null-ивание» значений внешних ключей в
10110101010101010100011010101011101110101100010101010110101010101010101
ссылающихся таблицах;
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
Удаление ссылающихся записей в ссылающихся
010101010111000111101010101010011010101110001010110101101010101010101011
таблицах
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор DELETE
33. DML. Оператор DELETE
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
Name
– имя таблицы или соединение (join)*
010101110101010101110000111001001101011010101001110100101011011110101010
Condition – условие, которому должны удовлетворять
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
удаляемые записи
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор DELETE
DELETE FROM <Name>
[WHERE <Condition>]
34. Примеры удаления
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
DELETE FROM products WHERE price = 10;
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
DELETE FROM products;
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
DELETE FROM Authors a JOIN Articles b ON a.ID=b.Author
010001010101010111010101010001010110101010110101010101011001011011110111
WHERE AuthorLastName='Henry';
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры удаления
35. DML. Оператор INSERT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
Оператор предназначен для вставки в
01010110101010110101010101011100010101101010101010101101101110101010010
отношение одной или более записей.
10110101010101010111010101010101010101101010110110101001101010101011101
Записи вставляются целиком (нельзя вставить
00101010101110101010101010101110101010100101010110101011011101010101010
часть записи).
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
Результат работы – отношение с добавленными
10110101010101010101111010101010101011010101010101011010101010101010101
записями. Сам оператор никакого результата не
010101011101101010100010110101010101010101011110101111010101011111111101
возвращает (нельзя использовать в SELECT)
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
При вставке записей могут срабатывать триггеры
110101010101111111111001010001010110111100001101010100010110100101010101
Запись(и) может быть не вставлена, если
0101000111000101101010101010110111010101000111111100101100111111100101000
нарушается условие на ее значения.
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
В качестве источника записей может быть
10110101010101010100011010101011101110101100010101010110101010101010101
использован оператор SELECT
00101010111010101010010101011010101101110101010101011000110110101000011
Неуказанные в запросе поля принимают
010111101010111000101010101010100010101010000101010101011110101110110101
значение DEFAULT
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор INSERT
36. DML. Оператор INSERT
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
INSERT INTO <Name> ([<Col>, ... ]) VALUES (<val>,...)
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
INSERT INTO <Name> VALUES (<val>,...)
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
INSERT INTO <Name> SELECT <cols> FROM <tables>
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
WHERE <Condition>
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
Name
– имя таблицы
00011010101000010111001001010110100010101110101011110001010001100010101
Col
– имя столбца (поля)
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
Val
– значение поля во вставляемой записи
00101010111010101010010101011010101101110101010101011000110110101000011
SELECT – запрос, извлекающий набор записей,
010111101010111000101010101010100010101010000101010101011110101110110101
использующихся для вставки
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
DML. Оператор INSERT
37. Примеры вставки
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-0710111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
13', 'Comedy', '82 minutes')
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
INSERT INTO films (code, title, did, date_prod, kind) VALUES
11000110110101000011010111101010111000101010101010100010101010000101010
('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama')
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
INSERT INTO films VALUES ('UA502', 'Bananas', 105,
010101011101101010100010110101010101010101011110101111010101011111111101
DEFAULT, 'Comedy', '82 minutes')
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
INSERT INTO films (code, title, did, date_prod, kind) VALUES
0101000111000101101010101010110111010101000111111100101100111111100101000
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
00011010101000010111001001010110100010101110101011110001010001100010101
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
INSERT INTO films SELECT * FROM tmp_films WHERE
00101010111010101010010101011010101101110101010101011000110110101000011
date_prod < '2004-05-07';
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры вставки
38. Операторы управления пользователем БД
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Операторы управления пользователем
БД
CREATE USER <username>
ALTER DATABASE <name> SET
OWNER=<username>
GRANT <privilege> ON <name> TO
<username>
REVOKE <privilege> ON <name> FROM
<username>
DROP USER <username>
39. Привилегии пользователя
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
SELECT
01010110101010110101010101011100010101101010101010101101101110101010010
INSERT
10110101010101010111010101010101010101101010110110101001101010101011101
UPDATE
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
DELETE
101011110101110110101010101010111000111101010101010011010101110001010110
REFERENCES
10110101010101010101111010101010101011010101010101011010101010101010101
TRIGGER
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
ALL PRIVILEGES
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
GRANT SELECT ON mytable TO PUBLIC;
0101000111000101101010101010110111010101000111111100101100111111100101000
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
00011010101000010111001001010110100010101110101011110001010001100010101
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
REVOKE INSERT ON films FROM PUBLIC;
00101010111010101010010101011010101101110101010101011000110110101000011
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Привилегии пользователя
40. Управление транзакциями
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Транзакция – последовательность логически
00101010101110101010101010101110101010100101010110101011011101010101010
связанных запросов, целенаправленно и
11000110110101000011010111101010111000101010101010100010101010000101010
логически связанно меняющих состояние БД;
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
У транзакции имеется начало, набор точек
010101011101101010100010110101010101010101011110101111010101011111111101
сохранения (отката) и конец.
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
В конце транзакцию можно применить
110101010101111111111001010001010110111100001101010100010110100101010101
(зафиксировать) или откатить
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
В процессе исполнения транзакции, до ее
01111001010110101010101010110010101011010101010101010111101011000101010
завершения (фиксации или отката) объекты,
10110101010101010100011010101011101110101100010101010110101010101010101
которыми на манипулирует, могут быть
00101010111010101010010101011010101101110101010101011000110110101000011
«захвачены»
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Управление транзакциями
41. Операторы управления транзакциями:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
Зафиксировать, что транзакция началась
101011110101110110101010101010111000111101010101010011010101110001010110
Указать (при необходимости), какие объекты
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
захватываются и уровень их блокировки
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
Указывает точку возврата, к которой можно
00011010101000010111001001010110100010101110101011110001010001100010101
откатиться при частичном откате транзакции
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
Удаление успешно пройденной точки возврата
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Операторы управления транзакциями:
BEGIN – применяется для того, чтобы:
SAVEPOINT <NAME>
RELEASE SAVEPOINT <NAME>
42. Операторы управления транзакциями:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
сделать «постоянными» все изменения,
101011110101110110101010101010111000111101010101010011010101110001010110
сделанные в текущей транзакции (реально
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
данные могут быть изменены несколько позже)
010001010101010111010101010001010110101010110101010101011001011011110111
очистить все точки сохранения данной
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
транзакции
0101000111000101101010101010110111010101000111111100101100111111100101000
завершить транзакцию
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
освободить все блокировки данной транзакции
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Операторы управления транзакциями:
COMMIT – применяется для того, чтобы:
43. Операторы управления транзакциями:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
отменить все изменения, внесённые начиная с
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
момента начала транзакции или с какой-то
010001010101010111010101010001010110101010110101010101011001011011110111
точки сохранения (SAVEPOINT).
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
очистить все точки сохранения данной
0101000111000101101010101010110111010101000111111100101100111111100101000
транзакции
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
завершить транзакцию
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
освободить все блокировки данной транзакции
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Операторы управления транзакциями:
ROLLBACK – применяется для того,
чтобы:
44. Примеры:
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
BEGIN;
01010110101010110101010101011100010101101010101010101101101110101010010
INSERT INTO table1 VALUES (1);
10110101010101010111010101010101010101101010110110101001101010101011101
SAVEPOINT my_savepoint;
00101010101110101010101010101110101010100101010110101011011101010101010
INSERT INTO table1 VALUES (2);
11000110110101000011010111101010111000101010101010100010101010000101010
ROLLBACK TO SAVEPOINT my_savepoint;
101011110101110110101010101010111000111101010101010011010101110001010110
INSERT INTO table1 VALUES (3);
10110101010101010101111010101010101011010101010101011010101010101010101
COMMIT;
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
BEGIN;
110101010101111111111001010001010110111100001101010100010110100101010101
INSERT INTO table1 VALUES (3);
0101000111000101101010101010110111010101000111111100101100111111100101000
SAVEPOINT my_savepoint;
00011010101000010111001001010110100010101110101011110001010001100010101
INSERT INTO table1 VALUES (4);
01111001010110101010101010110010101011010101010101010111101011000101010
RELEASE SAVEPOINT my_savepoint;
10110101010101010100011010101011101110101100010101010110101010101010101
COMMIT;
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Примеры:
45. Хранимые процедуры и триггеры
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
Передача управления (CALL, GO TO, RETURN)
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
Проверка условий (IF … ELSE, SWITCH)
010111101010111000101010101010100010101010000101010101011110101110110101
Организация циклов (FOR, WHILE)
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Хранимые процедуры и триггеры
Используются для реализации сложной
бизнес-логики (положений делового
регламента, не описываемых
ограничениями);
Хранятся на сервере СУБД
Пишутся на расширенном языке SQL,
содержащем специальные операторы:
46. Хранимые процедуры
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
10110101010101010111010101010101010101101010110110101001101010101011101
Вызываются приложением, как запрос с
00101010101110101010101010101110101010100101010110101011011101010101010
использованием ключевого слова EXECUTE или
11000110110101000011010111101010111000101010101010100010101010000101010
101011110101110110101010101010111000111101010101010011010101110001010110
CALL;
10110101010101010101111010101010101011010101010101011010101010101010101
Могут иметь аргументы и возвращать результат
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
(в том числе – отношение, как и SELECT);
010101110101010101110000111001001101011010101001110100101011011110101010
Аргументы могут быть входящие и исходящие;
110101010101111111111001010001010110111100001101010100010110100101010101
0101000111000101101010101010110111010101000111111100101100111111100101000
Могут выполнить любое количество запросов на
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
SQL, в том числе – несколько транзакций;
10110101010101010100011010101011101110101100010101010110101010101010101
Результаты внутренних запросов SELECT
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
обрабатываются в виде курсоров
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Хранимые процедуры
47. Курсор
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
01010110101010110101010101011100010101101010101010101101101110101010010
Курсор – временная структура данных (аналог
10110101010101010111010101010101010101101010110110101001101010101011101
таблицы), хранящий результаты запроса
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
SELECT построчно
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
Предназначен для обработки в процедурах
010101011101101010100010110101010101010101011110101111010101011111111101
Имеет операции
010001010101010111010101010001010110101010110101010101011001011011110111
010101110101010101110000111001001101011010101001110100101011011110101010
OPEN – открыть курсор
110101010101111111111001010001010110111100001101010100010110100101010101
FETCH – перейти к очередной записи
0101000111000101101010101010110111010101000111111100101100111111100101000
00011010101000010111001001010110100010101110101011110001010001100010101
CLOSE – закрыть курсор
01111001010110101010101010110010101011010101010101010111101011000101010
10110101010101010100011010101011101110101100010101010110101010101010101
Бывают однонаправленные и реверсивные
00101010111010101010010101011010101101110101010101011000110110101000011
курсоры
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Курсор
48. Пример хранимой процедуры
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
CREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS
10111010101001010101101010110101010110101010101010110101010101101010101
a_running_job_count INTEGER;
01010110101010110101010101011100010101101010101010101101101110101010010
PRAGMA AUTONOMOUS_TRANSACTION;
10110101010101010111010101010101010101101010110110101001101010101011101
00101010101110101010101010101110101010100101010110101011011101010101010
BEGIN
11000110110101000011010111101010111000101010101010100010101010000101010
LOCK TABLE cs_jobs IN EXCLUSIVE MODE;
101011110101110110101010101010111000111101010101010011010101110001010110
SELECT count(*) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL;
IF a_running_job_count > 0 THEN COMMIT;
10110101010101010101111010101010101011010101010101011010101010101010101
raise_application_error(-20000, 'Unable to create a new job: a job is currently running.');
010101011101101010100010110101010101010101011110101111010101011111111101
END IF;
010001010101010111010101010001010110101010110101010101011001011011110111
DELETE FROM cs_active_job;
010101110101010101110000111001001101011010101001110100101011011110101010
INSERT INTO cs_active_job(job_id) VALUES (v_job_id);
110101010101111111111001010001010110111100001101010100010110100101010101
BEGIN INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, sysdate);
0101000111000101101010101010110111010101000111111100101100111111100101000
EXCEPTION WHEN dup_val_on_index THEN NULL;
00011010101000010111001001010110100010101110101011110001010001100010101
END;
01111001010110101010101010110010101011010101010101010111101011000101010
COMMIT;
END;
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Пример хранимой процедуры
49. Триггеры
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
Хранимые процедуры, привязываемые к
01010110101010110101010101011100010101101010101010101101101110101010010
таблицам, и вызываемые при ее изменении:
10110101010101010111010101010101010101101010110110101001101010101011101
Вставка, удаление и/или изменение записей
00101010101110101010101010101110101010100101010110101011011101010101010
11000110110101000011010111101010111000101010101010100010101010000101010
Триггеры бывают:
101011110101110110101010101010111000111101010101010011010101110001010110
Табличные – вызывается при изменении для всей
10110101010101010101111010101010101011010101010101011010101010101010101
таблицы 1 раз при изменении;
010101011101101010100010110101010101010101011110101111010101011111111101
Строчные – вызывается при изменении для каждой
010001010101010111010101010001010110101010110101010101011001011011110111
записи;
010101110101010101110000111001001101011010101001110100101011011110101010
110101010101111111111001010001010110111100001101010100010110100101010101
У одной таблицы может быть несколько триггеров,
0101000111000101101010101010110111010101000111111100101100111111100101000
одна и та же процедура может выполнять роль
00011010101000010111001001010110100010101110101011110001010001100010101
разных
триггеров.
01111001010110101010101010110010101011010101010101010111101011000101010
Триггеры могут быть «до» и «после»-триггеры.
10110101010101010100011010101011101110101100010101010110101010101010101
00101010111010101010010101011010101101110101010101011000110110101000011
Триггер имеет доступ как к старым (до изменения)
010111101010111000101010101010100010101010000101010101011110101110110101
так и новым (после изменения) данным.
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Триггеры
50. Пример триггера
10010111101010111010010111101010101010101110001011100011000111101010101011101010101010111010101000101010101011101010101010100001010101010110110
10111101010101010100010101010101101010111111101010101001010101010101010
10101110000001010101101010110101101010101111010101010101010101010001010
10111010101001010101101010110101010110101010101010110101010101101010101
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
01010110101010110101010101011100010101101010101010101101101110101010010
AFTER UPDATE ON district
10110101010101010111010101010101010101101010110110101001101010101011101
BEGIN
00101010101110101010101010101110101010100101010110101011011101010101010
INSERT INTO info VALUES ('table "district" has changed');
11000110110101000011010111101010111000101010101010100010101010000101010
END;
101011110101110110101010101010111000111101010101010011010101110001010110
10110101010101010101111010101010101011010101010101011010101010101010101
010101011101101010100010110101010101010101011110101111010101011111111101
010001010101010111010101010001010110101010110101010101011001011011110111
/* Триггер на уровне строки */
010101110101010101110000111001001101011010101001110100101011011110101010
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
110101010101111111111001010001010110111100001101010100010110100101010101
AFTER UPDATE ON district FOR EACH ROW
0101000111000101101010101010110111010101000111111100101100111111100101000
BEGIN
00011010101000010111001001010110100010101110101011110001010001100010101
01111001010110101010101010110010101011010101010101010111101011000101010
INSERT INTO info VALUES ('one string in table "district" has
10110101010101010100011010101011101110101100010101010110101010101010101
changed');
00101010111010101010010101011010101101110101010101011000110110101000011
END;
010111101010111000101010101010100010101010000101010101011110101110110101
010101010111000111101010101010011010101110001010110101101010101010101011
11010101010101011010101010101011010101010101010101010101011101101010100
010110101010101010101011110101111010101011111111101010001010101010111011
00011111000010101011110001010101011
Пример триггера