- •Тгмт Лекции по дисциплине «Базы данных»
- •Введение
- •Основные понятия и определения
- •Архитектура базы данных.
- •Процесс прохождения пользовательского запроса
- •Пользователи банков данных
- •Классификация моделей данных
- •Теоретико-графовые модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Основы реляционной алгебры
- •Операции над множествами.
- •Специальные операции.
- •Проектирование реляционных бд на основе принципов нормализации
- •Системный анализ предметной области
- •Инфологическая модель предметной области.
- •Нормальные формы er-диаграмм
- •Даталогические модели
- •Получение реляционной схемы из er-диаграммы
- •Физические модели
- •Проектирование реляционной базы данных
- •Универсальное отношение
- •Пример проектирования реляционной бд
- •Введение в sql
- •Основные понятия и компоненты. Инструкции и имена
- •Типы данных
- •Встроенные функции
- •Значения null
- •Ограничения целостности. Первичный ключ таблицы
- •Внешний ключ таблицы
- •Р ис. 23. Связь внешнего и первичного ключей Определение уникального столбца
- •Определение проверочных ограничений
- •Определение значения по умолчанию
- •Управление таблицами Команда создания таблицы — create table
- •Изменение структуры таблицы — команда alter table
- •Управление данными Извлечение данных — команда select
- •Раздел select
- •Раздел from
- •Раздел where
- •Раздел order by
- •Раздел group by
- •Раздел compute
- •Раздел union
- •Раздел into. Использование команды select...Into
- •Добавление данных — команда insert
- •Изменение данных — команда update
- •Удаление данных — команда delete
Раздел into. Использование команды select...Into
При указании этой конструкции результат выполнения запроса будет сохранен в новой таблице. Синтаксис раздела INTO следующий:
INTO <имя_новой_таблицы>
Аргумент <имя_новой_таблицы> определяет имя таблицы, в которую будут вставлены результаты.
При выполнении запроса SELECT...INTO автоматически создается новая таблица с нужной структурой и в нее заносится полученный набор строк. При этом в базе данных не должно существовать таблицы, имя которой совпадает с именем таблицы, указанной в команде SELECT...INTO. Если необходимо быстро создать таблицу со структурой, позволяющей сохранить результат выполнения запроса, то лучшим выходом будет использование команды SELECT...INTO.
Синтаксис команды SELECT...INTO следующий:
SELECT {<имя столбца> [[AS] <псевдоним_столбца>] [, ..., n]}
INTO <имя_новой_таблицы> FROM {<имя_исходной таблицы> [,..., n]}
Приведенный вариант синтаксиса далеко не исчерпывает все возможности вставки данных с помощью команды SELECT...INTO. Допускаются практически все варианты синтаксиса запроса SELECT, то есть можно выполнять группировку, сортировку, объединение и т. д.
Рассмотрим назначение аргументов команды.
<имя_столбца> [[AS] <псевдоним_столбца>].
Аргумент <имя_столбца> задает имя столбца таблицы, который будет включен в результат. Указанный столбец должен принадлежать одной из таблиц, перечисленных в списке FROM {<имя_исходной_таблицы> [,..., n]}. Если столбцы, принадлежащие разным таблицам, имеют одинаковые имена, то для столбцов необходимо использовать псевдонимы. В противном случае произойдет попытка создать таблицу со столбцами, имеющими одинаковые имена, что приведет к ошибке, и выполнение запроса будет прервано. Указание псевдонимов также обязательно для столбцов, значения в которых формируются на основе вычисления выражений (по умолчанию такие столбцы не имеют никакого имени, что недопустимо для таблицы) и когда пользователь хочет задать столбцам в создаваемой таблице новые имена (отличные от исходных). Имя псевдонима задается с помощью параметра <псевдоним_колонки>.
INTO <имя_новой_таблицы>.
Аргумент <имя_новой_таблицы> содержит имя создаваемой таблицы. Это имя должно быть уникальным в пределах базы данных.
FROM {<имя_исходной_таблицы> [,..., n]}.
В простейшем случае конструкция FROM содержит список исходных таблиц. В более сложных запросах с помощью этой конструкции определяются условия связывания двух и более таблиц.
С помощью команды SELECT..INTO, например, можно разделить таблицу «Студенты» на две, выделив в отдельную таблицу «Контакты» адреса и телефоны, а затем удалив эти столбцы из таблицы «Студенты»:
SELECT ID_Студент, Адрес, Телефон
INTO Контакты
FROM Студенты
Запрос для таблицы «Контакты»:
SELECT *
FROM Контакты
WHERE Телефон LIKE '120%'
Построим внешний ключ для таблицы «Контакты», обеспечив связь с таблицей «Студенты»:
ALTER TABLE Контакты ADD CONSTRAINT FK_Kонтакт
FOREIGN KEY (ID_Студент)
REFERENCES Студенты
Модифицируем запрос для таблицы «Контакты»:
SELECT *
FROM Студенты
INNER JOIN Контакты
ON Студенты.ID_Студент = Контакты. ID_Студент
WHERE Телефон LIKE '120%'
