Занятие 4 (5 мая)
Часть 1 (теоретическая). Язык запросов SQL.
Реляционные модели и реляционные языки
Ö Реляционные модели
Ö Классификация реляционных языков
Ö Основные характеристики языка SQL
Основы языка SQL
Ö Типы данных
Ö Создание таблицы
Ö Изменение структуры таблицы
Ö Удаление таблицы
Ö Ограничения
Ö Индексы
Ö Ввод данных в таблицы
Часть 3 (практикум).
Ö Создание таблиц базы данных.
Ö Модификация таблиц.
Ö Ввод данных в таблицы.
Упражнение 1. Работа с БД Duma_1995.mdb.
С помощью конструктора запросов Access cконструировать запрос на создание таблицы "новая" по образцу таблицы "депутаты" с двумя полями – "имя" и "номер". Скопировать в новую таблицу 10 первых записей таблицы "депутаты".

Изучить построенную СУБД инструкцию SQL, соответствующую этому запросу.

Инструкция SELECT … INTO – запрос на создание таблицы.
Инструкция SELECT … INTO сохраняет результат запроса в виде новой таблицы в текущей или внешней базе данных. Запрос на создание таблицы можно использовать для архивации записей, создания резервных копий таблицы, копий для экспорта в другую базу данных и др. Синтаксис инструкции:
SELECT <поле1>[, поле2<>[, …]]
INTO <новая таблица> [IN <внешняя база данных>]
FROM <источник>
где <поле1>, <поле2> – имена полей, которые следует скопировать в новую таблицу;
<новая таблица> – имя создаваемой таблицы;
<внешняя база данных> – путь к внешней базе данных;
<источник> – имя существующей таблицы, из которой берутся записи
Упражнение 2. Создание таблицы с помощью SQL.
В режиме конструктора ввести управляющий запрос SQL, который должен создать таблицу Новая1, состоящую из трех полей: имя (тип – текстовое), фамилия (тип – текстовое) и дата рождения (тип – дата):
CREATE TABLE Новая
([Имя] TEXT,
[Фамилия] TEXT,
[Дата рождения] DATETIME)
Инструкция CREATE TABLE – запрос на создание новой таблицы.
CREATE TABLE <таблица> (<поле1> <тип> [(<размер>)] [<индекс1>]
[, <поле2> <тип> [(размер)] [<индекс2>] [,...]][, <составной_индекс> [,...]])
где <таблица> – имя создаваемой таблицы;
<поле1>, <поле2> – имена полей таблицы;
<тип> – тип данных поля;
<размер> – размер текстового поля;
<индекс1>, <индекс2> – директивы (предложения) CONSTRAINT создания простых индексов;
<составной_индекс> – директива (предложение) CONSTRAINT создания составного индекса.
Предложение CONSTRAINT используется для создания индекса.
Для создания простого индекса используется предложение CONSTRAINT (помещается за именем поля):
CONSTRAINT <имя_индекса> {PRIMARY KEY | UNIQUE |
REFERENCES <внешняя_таблица> [(<внешнее_поле1>, <внешнее_поле2>)]}
Предложение CONSTRAINT для создания составного индекса (помещается в любом месте после определения его элементов):
CONSTRAINT <имя_индекса>
{PRIMARY KEY (<ключевое1>[, <ключевое2> [, ...]]) |
UNIQUE (<уникальное1>[, <уникальное2> [, ...]]) |
FOREIGN KEY (<ссылка1>[, <ссылка2> [, ...]])
REFERENCES <внешняя_таблица> [(<внешнее_поле1> [, <внешнее_поле2> [, ...]])]}
где
<имя индекса> – имя создаваемого индекса;
<ключевое1>, <ключевое2> – имена одного или нескольких полей, которые будут ключевыми;
<уникальное1>, <уникальное2> – имена одного или нескольких полей, которые будут включены в уникальный индекс;
<ссылка1>, <ссылка2> – имена одного или нескольких полей, включенных во внешний ключ (ссылаются на поля в другой таблице);
<внешняя таблица> – имя внешней таблицы, которая содержит поля, указанные с помощью аргумента <внешнее поле>;
<внешнее поле1>, <внешнее поле2> – имена одного или нескольких полей во внешней таблице, на которые ссылаются поля, указанные с помощью аргумента <ссылка1>, <ссылка2>.
Служебные слова:
UNIQUE – уникальный индекс (в таблице не может быть двух записей, имеющих одно и то же значение полей, входящих в индекс);
PRIMARY KEY – первичный ключ таблицы (может состоять из нескольких полей; упорядочивает записи таблицы);
FOREIGN KEY – внешний ключ для связи с другими таблицами (может состоять из нескольких полей);
REFERENCES – ссылка на внешнюю таблицу.
Замечания:
· перед предложением CONSTRAINT не ставится запятая и не указывается имя поля, если это предложение следует непосредственно за описанием соответствующего поля; если же предложение CONSTRAINT не следует сразу за описанием поля (например, записывается в конце инструкции), то перед ним должна стоять запятая, а имя поля, по которому строится индекс, задается в явном виде;
· вместо TEXT можно писать CHAR;
· имена полей, состоящие более чем из одного слова, заключаются в квадратные скобки.
· каждый индекс имеет уникальное в пределах данной таблицы имя.
Упражнение 3. Создание таблицы с первичным ключом с помощью SQL.
Создать таблицу студент, состоящую из двух полей: номер студента (целочисленное поле), имя (текстовое поле). Создать в таблице простой индекс с именем индекс1 по значениям поля номер студента, объявить его ключом таблицы.
Код:
create table студент
([номер студента] integer, имя text(15),
constraint индекс1 primary key([номер студента]));
Задание 1. Создать базу банных из трех таблиц
· Таблица "студент" (ключ – номер студента)
номер студента | имя | дата рождения |
1 | Иванов | 01.01.1987 |
2 | Петров | 02.02.1988 |
3 | Сидоров | 03.03.1989 |
4 | Зайцев | 04.04.1990 |
· Таблица "оценка"
номер студента | номер дисциплины | результат |
1 | 1 | 2 |
1 | 1 | 3 |
1 | 2 | 4 |
2 | 1 | 5 |
2 | 2 | 5 |
3 | 1 | 5 |
3 | 1 | 3 |
· Таблица "дисциплина"
номер дисциплины | название |
1 | история |
2 | математика |
3 | право |
Образец: SQL-инструкция создания таблицы "студент"
create table студент([номер студента] integer, имя text(15), [дата рождения] datetime, constraint индекс1 primary key([номер студента]));


