Лабораторная работа № 2
Общепринятый термин «язык запросов» не совсем точно отражает возможности языка SQL, поскольку слово «запрос» подразумевает лишь выборку. В то время как язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде.
Поэтому в язык SQL в качестве составных частей входят:
· язык манипулирования данными (Data Manipulation Language, DML);
· язык определения данных (Data Definition Language, DDL);
· язык управления данными (Data Control Language, DCL).
Подчеркнем, что это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.
Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей - таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:
CREATE DATABASE (создать базу данных)
CREATE TABLE (создать таблицу)
CREATE INDEX (создать индекс)
ALTER DATABASE (модифицировать базу данных)
ALTER TABLE (модифицировать таблицу)
ALTER INDEX (модифицировать индекс)
DROP DATABASE (удалить базу данных)
DROP TABLE (удалить таблицу)
DROP INDEX (удалить индекс)
Создание таблиц
Создать таблицу для хранения данных можно с помощью команды CREATE TABLE языка SQL. Это одна из команд языка определения данных DDL. Команды DDL являются подмножеством команд SQL и используются для создания, изменения и удаления структур базы данных.
Синтаксис:
Создание таблицы | CREATE TABLE имя_таблицы | |
Определение столбцов | (ПОЛЕ тип данных, | [DEFAULT значение NOT NULL] Значение по Нет Умолчанию отсутствующих |
Первичный ключ | Primary key (поле, …), | |
Определение ограничения | Constraint имя ограничения | |
Определение внешнего ключа | Foreign key (поле, …) references имя таблицы (поле, …) | On delete Cascade Set null No action Set default On update Cascade Set null No action Set default |
); |
Пример:
|
CREATE TABLE groups
(id NUMBER CONSTRAINT groups_pk PRIMARY KEY,
num_gr CHAR(8) not null,
form CHAR(2) not null,
CONSTRAINT groups_uk UNIQUE (num_gr, form),
CHECK (form in(‘Д’,’З’)));
Команда создает таблицу GROUPS. Столбцы
id (уникальный идентификатор),
num_gr (номер группы, например, 3091),
form (форма обучения, дневная (Д) или заочная (З)).
Пример2:
CREATE TABLE students
(id NUMBER CONSTRAINT stud_pk PRIMARY KEY,
surname CHAR(100) not null,
name CHAR(100) not null,
patron CHAR(100) not null,
gr_id number not null,
CONSTRAINT stud_gr_id_fk FOREIGN KEY (gr_id)REFERENCES groups(id) ON DELETE CASCADE);
Команда создает таблицу STUDENTS. Столбцы
id (уникальный идентификатор),
surname – фамилия,
name – имя,
patron – отчество студента,
gr_id – внешний ключ, ссылающийся на первичный ключ таблицы GROUPS.
Каждый студент из таблицы STUDENTS учится в какой-то группе из таблицы GROUPS. При удалении группы, удаляется и информация о всех студентах, в ней обучающихся (это только для примера, необходимости в этом нет, скорее наоборот, группу с обучающимися в ней студентами удалять не следует).
Отметим, что таблицы создаются пустыми, а данные в них вносятся с помощью команды Insert.
Типы данных SQL
Тип данных | Описание |
CHAR(длина) CHARACTER(длина) | Строки символов постоянной длины |
VARCHAR(длина) CHAR VARYING(длина) CHARACTER VARYING(длина) | Строки символов переменной длины |
INTEGER INT | Целые числа |
SMALLINT | Малые целые числа |
NUMERIC(точность, степень) DECIMAL(точность, степень) DEC(точность, степень) | Десятичные числа |
FLOAT(точность) | Числа с плавающей запятой |
REAL | Числа с плавающей запятой низкой точности |
DOUBLE PRECISION | Числа с плавающей запятой высокой точности |
DATE | Дата |
TIME(точность) | Время |
TIMESTAMP(точность) | Дата и время |
INTERVAL | Временной интервал |
|
Упражнения:
1. Записать инструкцию SQL для создания таблицы Students с полями: student_id (номер студента), surname (фамилия), name (имя), _year (курс), _group (группа), city (город), faculty (факультет), the_head (староста). Значение поля the_head (староста) должно быть идентификатором студента, являющегося старостой группы, в которой учится конкретный студент, для чего следует указать необходимые ограничения. Поле student_id является первичным ключом таблицы students. Значение поля Курс находится в пределах от 1 до 5. По умолчанию полю City присваивается значение Челябинск, значение поля faculty получаем из списка: {дизайн, менеджмент, программное_обеспечение, экономика_и_финансы}. Поля номер студента, фамилия, имя, курс и группа не могут принимать значения Null.
2. Записать инструкцию SQL для создания таблицы Subjects (предметы) с полями: subject_id (номер предмета), Subject_name (название предмета), Lecturer (преподаватель), Appointment (должность преподавателя), Semester (семестр), _Hours (часы). Поле subject_id является первичным ключом таблицы. Поле Subject_name не может принимать значения Null. Значение поля Семестр находится в пределах от 1 до 10. По умолчанию полю Hours присваивается значение 0.0, значение поля Appointment получаем из списка: {ассистент, старший преподаватель, доцент, профессор}.