- •"Мати - российский государственный технологический университет имени к.Э. Циолковского"
- •Курс лекций по дисциплине «базы данных»
- •Москва 2013
- •Введение
- •Для чего нужны базы данных
- •Основные определения
- •Классификация бд
- •Реляционные бд
- •Структура таблиц и типы данных
- •Целостность данных
- •Поддержание ссылочной целостности
- •Правила Кодда
- •Реляционная алгебра
- •Теоретико-множественные операторы Объединение
- •Проекция
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Деление
- •Создание таблиц
- •Выборка данных
- •Объединение таблиц
- •Добавление данных
- •Insert into имя_таблицы
- •Values (значение 1, значение 2, …)
- •Values ('Комиксы', 'Не знаю, какая у них история');
- •Values ('Комиксы', 'Не знаю, какая у них история');
- •Values ('Комиксы');
- •Удаление данных
- •Изменение данных
- •Проектирование баз данных
- •Концептуальное проектирование и построение er-модели
- •Логическое проектирование
- •Физическое проектирование
- •Нормализация базы данных
- •Первая нормальная форма.
- •Индексы
- •Общие сведения
- •Кластерные индексы
- •Некластерные индексы
- •Создание индекса
- •Многопользовательский доступ к данным
- •Технология «клиент-сервер»
- •Транзакции
- •Проблемы параллельного доступа.
- •Блокировки и уровни изоляции
- •Грануляция блокировок (уровни блокирования)
- •Хранимые процедуры
- •Понятие хранимой процедуры
- •Типы хранимых процедур
- •Создание, изменение и удаление хранимых процедур
- •Приложения
Добавление данных
Для добавления данных в SQL применяется инструкция INSERT. Чаще всего её используют для вставки в таблицу отдельных записей. Инструкция выглядит следующим образом:
Insert into имя_таблицы
Values (значение 1, значение 2, …)
После ключевого слова VALUES указывается список значений, которые будут добавлены в таблицу. Значения вставляются в столбцы в порядке расположения столбцов в таблице. Вставка данных в столбец счетчика (с признаком IDENTITY) по умолчанию невозможна, в инструкции SQL это поле пропускается.
Например, для добавления новой группы в таблицу «Genres» (GenreID, GenreName, GenreHistory):
INSERT INTO Genres
Values ('Комиксы', 'Не знаю, какая у них история');
Для вставки данных можно указать конкретные столбцы, если столбца нет в списке выборки, и он не является счетчиком, в него будет записано значение NULL.
INSERT INTO Genres (GenreName, GenreHistory)
Values ('Комиксы', 'Не знаю, какая у них история');
INSERT INTO Genres (GenreName)
Values ('Комиксы');
В столбцы, для которых значение не указано, будет добавлено значение NULL.
Команду INSERT можно также использовать для перемещения данных из одной таблицы в другую. Для этого предложение VALUES нужно заменить запросом SELECT. Таблицы должны быть идентичными – иметь равное количество столбцов с одинаковыми типами данных. Например, можно записать все жанры из таблицы Genres в Genres1. Код жанра (поле IDENTITY) проставляется автоматически.
INSERT INTO Genres1
SELECT GenreName, GenreHistory
FROM Genres;
Добавить записи обо всех читателях г. Ступино из таблицы Readers в таблицу Readers1.
INSERT INTO Readers1 (ReaderName, ReaderSurname, Passport, CityID)
SELECT ReaderName, ReaderSurname, Passport, c.CityID
FROM Readers r INNER JOIN Cities c ON r.CityID = c.CityID
WHERE CityName = 'Ступино';
Удаление данных
Для добавления данных в SQL применяется инструкция DELETE. Удаляются не отдельные поля, а строки целиком.
DELETE FROM Books; - удалить все записи о книгах.
Если требуется удалить определенные записи, это можно указать в разделе WHERE.
DELETE FROM Books
WHERE BookName = 'Мертвые души';
Если необходимо удалить записи по признаку, информация о котором хранится в другой таблице, строится подзапрос в разделе WHERE. Например, удалить записи о книгах детективного жанра.
DELETE FROM Books
WHERE GenreID IN
(SELECT GenreID
FROM Genres
WHERE GenreName = 'Детектив');
Здесь запрос SELECT возвращает какое-то количество значений GenreID (те, для которых имя жанра – «Детектив»). После этого значение каждого поля GenreID из таблицы Books сравнивается по очереди со всеми значениями, полученными с помощью SELECT. Если значения совпадают, соответствующая запись удаляется из таблицы Books.
IN обозначает вхождение – входит ли GenreID в множество значений, которое вернет SELECT.
Если заранее известно, что SELECT способен вернуть только одну запись, вместо оператора IN можно использовать знак «=». В нашем случае книг-детективов может быть несколько.
Удалить из библиотеки книги Агаты Кристи
DELETE FROM Books
WHERE BookID IN
(SELECT BookID
FROM Authors a INNER JOIN AuthorShip ash ON a.AuthorID = ash.AuthorID
WHERE AuthorName = 'Агата' AND AuthorSurname = 'Кристи');
