- •История развития вычислительной техники
- •Файлы и файловые системы
- •Базы данных на больших эвм
- •Базы данных на персональных компьютеров
- •Распределенные базы данных
- •Основные понятия и определения
- •Классификация моделей данных
- •Теоретико-графовые модели данных
- •Иерархическая модель данных
- •Язык манипулирования данными в иерархических базах данных
- •Сетевая модель данных
- •Реляционная модель данных Основные определения
- •Операции над отношениями. Реляционная алгебра
- •Специальные операции реляционной алгебры
- •Языковые средства современных субд Некоторые термины и определения, используемые при работе с базами данных
- •История развития sql
- •Структура sql
- •Типы данных
- •Оператор выбора select
- •Применение агрегатных функций и вложенных запросов в операторе выбора select
- •Вложенные запросы
- •Внешние объединения
- •Операторы манипулирования данными
- •Insert into books values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, ‘’, 2010, 316)
- •Insert into books (isbn, title, autor, yearizd, pages) values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, 2010, 316)
- •Общая идея языка запросов (xPath)
- •Проектирование реляционных бд на основе принципов нормализации
- •Системный анализ предметной области
- •Пример системного анализа предметной области
- •Даталогическое проектирование для реляционной модели данных
- •Инфологическое проектирование
- •Модель "сущность-связь"
- •Переход к реляционной модели данных
- •Принципы поддержки целостности в реляционной модели данных
- •Операторы ddl в языке sql с заданием ограничений целостности
- •Средства определения схемы базы данных
- •Средства изменения описания таблиц и средства удаления таблиц
- •Понятие представления операции создания представлений
- •Горизонтальное представление
- •Вертикальное представление
- •Сгруппированные представления
- •Объединенные представления
- •Физические модели баз данных Файловые структуры, используемые для хранения информации в бд
- •Индексные файлы
- •Файлы с плотным индексом, или индексно-прямые файлы
- •Файлы с неплотным индексом, или индексно-последовательные
- •Организация индексов в виде b-tree (в-деревьев)
- •Инвертированные списки
- •Модели безфайловой физической организации данных
- •Архитектура разделяемой памяти
- •Распределенная обработка данных Архитектура и принципы распределенного подхода. Требования и критерии построения информационных систем на базе распределенных бд (рбд)
- •Многомерное представление данных. Хранилище данных и olap. Назначение. Основные характеристики
- •Основные элементы и операции olap
- •Типы olap. Преимущества и недостатки
- •Моделирование многомерных кубов в реляционной модели данных
- •Логическая модель рбд. Бизнес-логика файл-серверной, клиент-серверной и n-уровневой архитектуры Логическая модель рбд
- •Понятие транзакции. Неявные и явные транзакции. Уровни изолированности транзакций. Понятие блокировок. Основные типы блокировок Понятие транзакции. Неявные и явные транзакции
- •Уровни изолированности транзакций
- •Особенности реализации транзакций в Oracle и ms Sql Server Общие операторы управления транзакциями
- •Особенности субд Oracle
- •Особенности субд ms sql Server
- •Понятие блокировок. Основные типы блокировок
- •Взаимоблокировки
- •Репликация данных. Виды репликации
- •Синхронная репликация
- •Асинхронная репликация
- •Процедурные расширения языка sql
- •Основные характеристики pl/sql и t-sql
- •Хранимые процедуры и функции
- •Триггеры
- •Защита информации в базах данных
- •Проверка полномочий
- •Обобщенная архитектура субд
- •Оптимизация sql-запросов
- •Методы синтаксической оптимизации запросов
- •Методы семантической оптимизации запросов
- •Электронная библиотека
- •Учет успеваемости студентов
- •Склад товаров
- •Интернет-магазин
- •Медицинский центр
Операторы манипулирования данными
В операции манипулирования данными входят три оператора: удаления записей — DELETE, добавления новых записей — INSERT и изменения (обновления записей) — UPDATE. Все операторы манипулирования данными позволяют изменить данные только в одной таблице.
Оператор ввода данных INSERT имеет следующий синтаксис:
INSERT INTO имя_таблицы [(<список столбцов>) ]
VALUES (<список значений>)
В общем случае можно ввести только одну строку в таблицу. Задание списка столбцов необязательно тогда, когда мы вводим строку с заданием значений всех столбцов таблицы. Например, введем новую книгу в таблицу BOOKS (БД «Библиотека»):
Insert into books values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, ‘’, 2010, 316)
Мы можем не вводить соавтора, так как он отсутствует для данного издания. В этом случае мы должны задать список вводимых столбцов:
Insert into books (isbn, title, autor, yearizd, pages) values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, 2010, 316)
Столбцу COAUTOR будет присвоено в этом случае значение NULL.
Если столбец (атрибут) имеет признак обязательный (NOT NULL) при описании таблицы, то оператор INSERT должен содержать данные для ввода в каждую строку данного столбца.
В набор значений могут быть включены специальные функции и выражения. Ограничением здесь является то, что значения этих функций должны быть определены на момент ввода данных. Например, можно создать оператор ввода данных в таблицу EXEMPLAR следующим образом:
INSERT INTO EXEMPLAR (INV, ISBN, YES_NO, NUM_READER, DATE_IN, DATE_OUT)
VALUES (1872, ‘5-88782-290-2’, NO, 344, GetDate(), DateAdd(d, GetDate(), 14))
Дату выдачи книги задается функцией GetDate(), а дата возврата – функцией DateAdd (), которая позволяет к текущей дате (GetDate()) добавить заданное количество интервалов даты (например, 14 дней) и тем самым получить новое значение типа "дата".
Оператор INSERT позволяет ввести сразу множество строк, если их можно выбрать из некоторой другой таблицы. Допустим, что у нас есть таблица со студентами и в ней указаны основные данные о студентах: их фамилии, адреса, домашние телефоны и даты рождения. Тогда мы можем сделать всех студентов читателями нашей библиотеки одним оператором INSERT:
INSERT INTO READER (NAME_READER, ADRESS, PHONE, BIRTH_DAY)
SELECT (NAME_STUDENT, ADRESS, PHONE, BIRTH_DAY) FROM STUDENT
Оператор удаления данных DELETE позволяет удалить одну или несколько строк из таблицы в соответствии с условиями, которые задаются для удаляемых строк.
Синтаксис оператора DELETE следующий:
DELETE FROM имя_таблицы [WHERE условия_отбора]
Если условия отбора не задаются, то из таблицы удаляются все строки.
DELETE FROM R1
Условия отбора в части WHERE имеют тот же вид, что и условия фильтрации в операторе SELECT, т.е. определяют, какие строки из таблицы будут удалены. Например, если мы исключим студента Иванова И.И. (БД «Сессия»), то мы должны написать следующую команду:
DELETE FROM R2 WHERE ФИО = ' Иванов И.И.'
В части WHERE может находиться вложенный запрос. Например, если нам надо исключить неуспевающих (две и более задолженности по последней сессии):
DELETE FROM R2 WHERE R2.ФИО IN (SELECT R1.ФИО FROM R1 WHERE Оценка = 2 OR Оценка IS NULL GROUP BY R1.ФИО HAVING COUNT(*) >= 2)
Однако при выполнении операции DELETE, включающей вложенный подзапрос, в подзапросе нельзя указывать таблицу, из которой удаляются строки!!!
Все операции манипулирования данными связаны с понятием целостности базы данных (будет рассматриваться далее). Поэтому операции манипулирования данными не всегда выполнимы, даже если синтаксически они написаны правильно. Например, если мы бы захотели удалить какую-нибудь группу из отношения R3, то СУБД не позволила бы нам это сделать, так как в отношениях R1 и R2 есть строки, связанные с удаляемой строкой в отношении R3 по ключам.
Операция обновления данных UPDATE требуется тогда, когда необходимо изменить данные в БД.
UPDATE имя_таблицы
SET имя_столбца = новое_значение [WHERE условие_отбора]
WHERE является необязательной, она позволяет отобрать строки, к которым будет применена операция модификации. Если условие отбора не задается, то операция модификации будет применена ко всем строкам таблицы.
Например, студент Степанов С.С. пересдал экзамен по дисциплине "Базы данных" с двойки на четверку (БД «Сессия»):
UPDATE R1 SET R1.Оценка = 4 WHERE R1.ФИО = ‘Степанов С.С.’ AND R1.Дисциплина = ‘Базы данных’
Часто требуется провести изменение в нескольких строках таблицы. Например, если мы добавим в БД «Сессия» таблицу R4 = <Группа, Курс>, которая содержит перечень курсов, на которых учатся студенты, то можно с помощью операции обновления промоделировать операцию перевода групп на следующий курс:
UPDATE R4 SET R4.Kypc = R4.Kypc + 1
Операция модификации может использовать вложенные подзапросы. Добавим в БД «Сессия» еще одну таблицу R5 = <ФИО, Группа, Стипендия>, которая будет содержать перечень студентов, получающих стипендию. Исходно там могут находиться все студенты с указанием неопределенного размера стипендии. По мере анализа отношения R1 мы можем постепенно заменять неопределенные значения на конкретные размеры стипендии. Отношение R5 имеет вид:
Будем считать наличие всех (трех) пятерок по сессии признаком повышенной стипендии, + 50% к основной, наличие двух пятерок из сданных экзаменов и отсутствие двоек и троек на сданных экзаменах — признаком повышения стипендии на 25%, наличие хотя бы одной двойки среди сданных экзаменов — признаком снятия или отсутствия стипендии вообще, то есть –100% надбавки. В остальных случаях – обычная стипендия с надбавкой 0%. Все эти изменения мы можем сделать только отдельными операциями обновления.
Назначение повышенной стипендии с надбавкой 50%:
UPDATE R5 SET R5.Стипендия = 1.5*<число> WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка = 5 GROUP BY R1.ФИО HAVING COUNT(*) = 3)
Назначение стипендии с надбавкой 25%:
UPDATE R5 SET R5.Стипендия = 1.25*<число> WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка = 5 AND R1.ФИО NOT IN (SELECT A.ФИО FROM R1 A WHERE A.Оценка <= 3 OR A.Оценка IS NULL AND R1.ФИО = A.ФИО) GROUP BY R1.ФИО HAVING COUNT(*) = 2)
Назначение обычной стипендии 0%:
UPDATE R5 SET R5.Стипендия = <число> WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка > 3 AND R1.ФИО NOT IN (SELECT A.ФИО FROM R1 A WHERE A.Оценка <= 2 OR A.Оценка IS NULL))
Снятие стипендии -100%:
UPDATE R5 SET R5.Стипендия = 0 WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка <= 3 OR R1.Оценка IS NULL)
Пример универсального запроса определения отличников (независимо от количества экзаменов):
UPDATE R5
SET R5.Стипендия = 50%
WHERE R5.ФИО IN (SELECT R1.ФИО
FROM R1, R2 -- определение группы
WHERE R1.ФИО = R2.ФИО AND R1.Оценка = 5 -- для отличников
GROUP BY R1.ФИО
HAVING COUNT(*) = (SELECT COUNT(*) FROM R3 -- кол-во экзаменов
WHERE R2.Группа = R3.Группа GROUP BY R3.Группа)) -- для студента в группе
Язык запросов к иерархическим и сетевым БД на основе XPath
