– требование соблюдать условие
Слайд 8
DDL. Пример создания таблицы
(пример для СУБД PostgreSQL)
Слайд 9
DDL. Изменение объекта
ALTER [действия по изменению]
Alter table (add
column, alter column, drop column) – изменение таблицы
Alter view –
изменение представления
Alter database – изменение базы данных
Alter procedure – изменение процедуры
Слайд 11DDL. Порядок создания и удаления объектов схемы:
Создается пользователь;
Создается база данных;
Создается
схема;
Создаются последовательности;
Создаются таблицы (сначала родительские, потом дочерние);
Создаются индексы, триггеры и
процедуры;
Создаются представления.
Удаление – в обратном порядке.
Слайд 12DML
Операторы манипулирования данными:
Извлечение данных – SELECT;
Вставка новых данных – INSERT;
Изменение
данных – UPDATE;
Удаление данных – DELETE;
Объект работы – отношение (таблица)
или соединение отношений
Единица манипулирования – запись
Слайд 13DML. Оператор SELECT
Оператор предназначен для извлечения из отношения или соединения
отношений набора записей, отвечающих заданным условиям.
Результат работы – новое отношение.
Реализует
все операции реляционной алгебры (объединение, пересечение, проекция, соединение, выборка)
Слайд 14DML. Оператор SELECT
Формат:
SELECT
FROM
[WHERE
выборки>]
[ORDER BY ]
[GROUP BY ]
[HAVING
<условия отбора групп>]
Слайд 15DML. Оператор SELECT
:
Реализует проекцию РА.
Указываются имена тех атрибутов, извлекаемых
из соединенных отношений, которые войдут в результат.
Для одноименных атрибутов указывается
отношение, из которого он извлекается (table.attribute)
Порядок вхождения определяется порядком перечисления.
Если нужно включить все атрибуты, указывается *.
Для переименования атрибута в результирующем отношении применяется ключевое слово AS (attribute as new_name);
Вместо атрибута в результат может вставляться результат, возвращаемый функцией (sin(angle) as “sine of angle”);
Для запрета повторений в результате используется директива DISTINCT
Слайд 16DML. Оператор SELECT
:
Реализует соединение РА.
Указываются имена соединяемых отношений, декартово
произведение которых формирует результат.
Для удобства записи каждому отношению может быть
присвоен псевдоним (name synonim1, synonim2)
Перечисление отношений:
Простое перечисление: FROM table1, table2, …
Полное декартово произведение;
Соединение по условию: FROM table1 [INNER | LEFT | RIGHT | FULL] JOIN table2 on
Декартово произведение, содержащее только строки, отвечающие условию
Слайд 17Примеры соединения:
1) SELECT * FROM table1, table2
2) SELECT
* FROM table1 a INNER JOIN table2 b ON a.num=b.num
Слайд 18Примеры соединения:
3) SELECT * FROM table1 a XXX JOIN
table2 b ON a.num=b.num
XXX = LEFT
XXX = RIGHT XXX = FULL
Слайд 19DML. Оператор SELECT
:
Реализует выборку РА.
Указывается одно логическое выражение, которому
должны удовлетворять все записи соединенного отношения.
Записи, не удовлетворяющие условию, отбрасываются.
Допускаются
логические связки AND, OR, NOT.
Основные условия:
Для чисел и дат:
<, >, >=, <= , BETWEEN min AND max;
Для строк:
like ‘pattern’ – сравнение с образцом (_, %);
Для всех типов:
=, <> IS NULL, IS NOT NULL - для всех типов (нельзя = NULL!);
IN (set or subquery), EXISTS (subquery)
Слайд 20
Примеры условий
SELECT Фамилия, Курс FROM СТУДЕНТ WHERE Специальность=’Математика’ AND Курс=5
SELECT
Фамилия FROM СТУДЕНТ WHERE Специальность IN (’Математика’, ’Экономика’)
SELECT Фамилия, Специальность
FROM СТУДЕНТ WHERE НомерСтудента BETWEEN 200 AND 300
SELECT Фамилия, Специальность FROM СТУДЕНТ WHERE НомерСтудента >= 200 AND НомерСтудента <= 300
SELECT Фамилия AS ‘ФИО’ FROM СТУДЕНТ WHERE Фамилия LIKE ‘Р%’
SELECT Фамилия FROM СТУДЕНТ WHERE Курс IS NULL
Слайд 21Примеры условий на соединение
SELECT Фамилия FROM СТУДЕНТ WHERE НомерСтудента IN
(SELECT НомерСтудента FROM ЗАПИСЬ WHERE Предмет = ‘А’)
SELECT Фамилия FROM
СТУДЕНТ WHERE СТУДЕНТ.НомерСтудента IN (SELECT ЗАПИСЬ.НомерСтудента FROM ЗАПИСЬ WHERE ЗАПИСЬ.Предмет IN (SELECT ЗАНЯТИЯ. Предмет FROM ЗАНЯТИЯ WHERE ЗАНЯТИЯ.ДеньНедели = 2))
SELECT СТУДЕНТ.НомерСтудента, СТУДЕНТ.Фамилия, ЗАПИСЬ.Предмет FROM СТУДЕНТ, ЗАПИСЬ WHERE СТУДЕНТ.НомерСтудента = ЗАПИСЬ.НомерСтудента
SELECT НомерСтудента, Предмет, ДеньНедели FROM СТУДЕНТ, ЗАПИСЬ, ЗАНЯТИЯ WHERE СТУДЕНТ.НомерСтудента = ЗАПИСЬ.НомерСтудента AND ЗАПИСЬ.Предмет = ЗАНЯТИЯ. Предмет AND СТУДЕНТ.Фамилия = ‘Сидоров’
Слайд 22DML. Оператор SELECT
:
Указываются имена атрибутов, по значениям которых требуется
упорядочить записи в результате.
При указании более одного атрибута – лексикографическая
сортировка.
Для каждого атрибута может быть задано свое направление сортировки:
ASC – по возрастанию
DESC – по убыванию
Вместо имени атрибута может быть указан его порядковый номер в результате
Если направление сортировки не указано, сортировка производится по возрастанию
Слайд 23Примеры сортировки
SELECT Фамилия, Специальность, Курс FROM СТУДЕНТ WHERE Специальность=’Экономика’ ORDER
BY Фамилия
SELECT Фамилия, Специальность, Курс FROM СТУДЕНТ WHERE Курс IN
(1, 2, 4) ORDER BY Фамилия ASC, 3 DESC
Слайд 24
DML. Оператор SELECT
Агрегирующие функции
При необходимости запрос может вернуть не сами
записи, а их агрегированные величины:
COUNT – количество значений поля
SUM –
сумма значений поля
MIN – минимальное значение поля
MAX – максимальное значение поля
AVG – среднее (арифметическое) значение поля
STDDEV – стандартное отклонение поля
В этом случае всегда возвращается ОДНА запись.
НЕЛЬЗЯ в один запрос вставлять поле и агрегированную величину:
SELECT COUNT([DISTINCT] ФАМИЛИЯ), SUM(СТИПЕНДИЯ) FROM СТУДЕНТЫ
SELECT ФАМИЛИЯ, COUNT(ИМЯ) FROM СТУДЕНТЫ
Слайд 25DML. Оператор SELECT
:
Указываются имена атрибутов, одинаковые значения которых образуют
одинаковую групповую запись в результате.
При использовании группировки для каждой группы
можно вычислить агрегированное значение (SUM, COUNT etc.).
Группировать можно только по тем атрибутам, которые указаны после SELECT, а не по любым атрибутам соединяемых отношений.
Слайд 26DML. Оператор SELECT
:
Указываются требования, которым должны удовлетворять сформированные
группы, чтобы быть отобранными в результат.
Если группа не удовлетворяет условию,
она вся отбрасывается.
При использовании в одном запросе секций WHERE и HAVING сначала выполняется WHERE (отбор записей), потом GROUP BY (группировка), а потом – HAVING (отбраковка групп).
Слайд 27Примеры группировки
SELECT Специальность, COUNT(*) FROM СТУДЕНТ
GROUP BY Специальность
SELECT Специальность, COUNT(*)
FROM СТУДЕНТ
GROUP BY Специальность HAVING COUNT(*) > 2
SELECT Специальность, MAX(НомерСтудента)
FROM СТУДЕНТ WHERE Курс = 4
GROUP BY Специальность HAVING COUNT(*) > 1
Слайд 28Реализация теоретико-множественных операций
Объединение R1∪R2:
(SELECT * FROM R1) UNION (SELECT
* FROM R2)
Пересечение R1∩R2:
SELECT * FROM R1 WHERE IN (SELECT
* FROM R2)
Разность R1\R2:
SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2)
Симметрическая разность R1ΔR2:
(SELECT * FROM R1 WHERE NOT IN (SELECT * FROM R2))
UNION (SELECT * FROM R2 WHERE NOT IN (SELECT * FROM R1))
Декартово произведение R1×R2:
SELECT * FROM R1, R2
Слайд 29DML. Оператор UPDATE
Оператор предназначен для изменения в отношении (или соединении
отношений, если это допускает БД) набора записей, отвечающих заданным условиям.
Изменяются
указанные в запросе поля записей.
Результат работы – отношение с измененными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT).
При обновлении могут срабатывать триггеры, а так же выполняться обновления значений внешних ключей в ссылающихся таблицах.
Запрос может быть не исполнен, если новое значение будет нарушать ограничения.
Слайд 30
DML. Оператор UPDATE
UPDATE
SET
[WHERE ]
Name – имя обновляемой
таблицы, или их соединение (join)*
Field – имя обновляемого поля
Val – присваиваемое полю значение (может
быть выражение, в том числе, использующее СТАРОЕ значение поля)
Condition – условие, которому должна удовлетворять обновляемая запись
Слайд 31
Примеры обновления
UPDATE Факультеты f INNER JOIN Кафедры k ON f.ID
= k.FacID SET f.Бюджет = 0 WHERE k.Выпускающая=true
UPDATE persons SET
street = 'Nissestien 67', city = 'Sandnes' WHERE lastname = 'Tjessem' AND firstname = 'Jakob‘
UPDATE emp a
SET deptno = (SELECT deptno FROM dept WHERE loc = ‘BOSTON’),
(sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno)
WHERE deptno IN (SELECT deptno FROM dept WHERE loc =
‘DALLAS’ OR loc = ‘DETROIT’)
UPDATE sales SET SaleDate=Null, Count=0
Слайд 32DML. Оператор DELETE
Оператор предназначен для удаления в отношении (или соединении
отношений, если это допускает БД) набора записей, отвечающих заданным условиям.
Записи
удаляются целиком (нельзя удалить часть записи).
Результат работы – отношение с удаленными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT)
При удалении могут срабатывать триггеры, а так же выполняться
«об-null-ивание» значений внешних ключей в ссылающихся таблицах;
Удаление ссылающихся записей в ссылающихся таблицах
Слайд 33
DML. Оператор DELETE
DELETE FROM
[WHERE ]
Name – имя таблицы или соединение (join)*
Condition – условие,
которому должны удовлетворять удаляемые записи
Слайд 34Примеры удаления
DELETE FROM products WHERE price = 10;
DELETE FROM products;
DELETE
FROM Authors a JOIN Articles b ON a.ID=b.Author
WHERE AuthorLastName='Henry';
Слайд 35DML. Оператор INSERT
Оператор предназначен для вставки в отношение одной или
более записей.
Записи вставляются целиком (нельзя вставить часть записи).
Результат работы –
отношение с добавленными записями. Сам оператор никакого результата не возвращает (нельзя использовать в SELECT)
При вставке записей могут срабатывать триггеры
Запись(и) может быть не вставлена, если нарушается условие на ее значения.
В качестве источника записей может быть использован оператор SELECT
Неуказанные в запросе поля принимают значение DEFAULT
Слайд 36DML. Оператор INSERT
INSERT INTO ([, ... ]) VALUES (,...)
INSERT
INTO VALUES (,...)
INSERT INTO SELECT FROM
WHERE
Name – имя таблицы
Col – имя столбца (поля)
Val – значение поля во вставляемой записи
SELECT – запрос, извлекающий набор записей, использующихся для вставки
Слайд 37Примеры вставки
INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy',
'82 minutes')
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama')
INSERT INTO films VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes')
INSERT INTO films (code, title, did, date_prod, kind) VALUES ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
Слайд 38Операторы управления пользователем БД
CREATE USER
ALTER DATABASE SET OWNER=
GRANT
ON TO
REVOKE ON FROM
DROP
USER
Слайд 39Привилегии пользователя
SELECT
INSERT
UPDATE
DELETE
REFERENCES
TRIGGER
ALL PRIVILEGES
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE,
INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON
mytable TO miriam_rw;
REVOKE INSERT ON films FROM PUBLIC;
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
Слайд 40Управление транзакциями
Транзакция – последовательность логически связанных запросов, целенаправленно и логически
связанно меняющих состояние БД;
У транзакции имеется начало, набор точек сохранения
(отката) и конец.
В конце транзакцию можно применить (зафиксировать) или откатить
В процессе исполнения транзакции, до ее завершения (фиксации или отката) объекты, которыми на манипулирует, могут быть «захвачены»
Слайд 41Операторы управления транзакциями:
BEGIN – применяется для того, чтобы:
Зафиксировать, что транзакция
началась
Указать (при необходимости), какие объекты захватываются и уровень их
блокировки
SAVEPOINT
Указывает точку возврата, к которой можно откатиться при частичном откате транзакции
RELEASE SAVEPOINT
Удаление успешно пройденной точки возврата
Слайд 42Операторы управления транзакциями:
COMMIT – применяется для того, чтобы:
сделать «постоянными» все
изменения, сделанные в текущей транзакции (реально данные могут быть изменены
несколько позже)
очистить все точки сохранения данной транзакции
завершить транзакцию
освободить все блокировки данной транзакции
Слайд 43Операторы управления транзакциями:
ROLLBACK – применяется для того, чтобы:
отменить все изменения,
внесённые начиная с момента начала транзакции или с какой-то точки
сохранения (SAVEPOINT).
очистить все точки сохранения данной транзакции
завершить транзакцию
освободить все блокировки данной транзакции
Слайд 44Примеры:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO
table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1
VALUES (3);
COMMIT;
BEGIN;
INSERT INTO table1 VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (4);
RELEASE SAVEPOINT my_savepoint;
COMMIT;
Слайд 45Хранимые процедуры и триггеры
Используются для реализации сложной бизнес-логики (положений делового
регламента, не описываемых ограничениями);
Хранятся на сервере СУБД
Пишутся на расширенном языке
SQL, содержащем специальные операторы:
Передача управления (CALL, GO TO, RETURN)
Проверка условий (IF … ELSE, SWITCH)
Организация циклов (FOR, WHILE)
Слайд 46Хранимые процедуры
Вызываются приложением, как запрос с использованием ключевого слова EXECUTE
или CALL;
Могут иметь аргументы и возвращать результат (в том числе
– отношение, как и SELECT);
Аргументы могут быть входящие и исходящие;
Могут выполнить любое количество запросов на SQL, в том числе – несколько транзакций;
Результаты внутренних запросов SELECT обрабатываются в виде курсоров
Слайд 47Курсор
Курсор – временная структура данных (аналог таблицы), хранящий результаты запроса
SELECT построчно
Предназначен для обработки в процедурах
Имеет операции
OPEN – открыть курсор
FETCH
– перейти к очередной записи
CLOSE – закрыть курсор
Бывают однонаправленные и реверсивные курсоры
Слайд 48Пример хранимой процедуры
CREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS
a_running_job_count INTEGER;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
LOCK TABLE cs_jobs IN
EXCLUSIVE MODE;
SELECT count(*) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL;
IF a_running_job_count > 0 THEN COMMIT;
raise_application_error(-20000, 'Unable to create a new job: a job is currently running.');
END IF;
DELETE FROM cs_active_job;
INSERT INTO cs_active_job(job_id) VALUES (v_job_id);
BEGIN INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, sysdate);
EXCEPTION WHEN dup_val_on_index THEN NULL;
END;
COMMIT;
END;
Слайд 49Триггеры
Хранимые процедуры, привязываемые к таблицам, и вызываемые при ее изменении:
Вставка,
удаление и/или изменение записей
Триггеры бывают:
Табличные – вызывается при изменении для
всей таблицы 1 раз при изменении;
Строчные – вызывается при изменении для каждой записи;
У одной таблицы может быть несколько триггеров, одна и та же процедура может выполнять роль разных триггеров.
Триггеры могут быть «до» и «после»-триггеры.
Триггер имеет доступ как к старым (до изменения) так и новым (после изменения) данным.
Слайд 50Пример триггера
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district
BEGIN
INSERT INTO info VALUES ('table "district" has changed');
END;
/* Триггер на уровне строки */
CREATE OR REPLACE TRIGGER DistrictUpdatedTrigger
AFTER UPDATE ON district FOR EACH ROW
BEGIN
INSERT INTO info VALUES ('one string in table "district" has changed');
END;
Обратная связь
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть
Что такое TheSlide.ru?
Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно хранить и делиться своими презентациями с другими пользователями.
Для правообладателей