- •Введение
- •Лабораторное занятие № 1
- •Описание учебного примера.
- •Удаление таблиц
- •Создание таблиц
- •Имена ограничений
- •Ограничения null и not null
- •Ограничение primary key
- •IdSubject, idReport, nTerm));
- •Ограничение unique
- •Ограничение Foreign key
- •Ограничение check
- •Вопросы для самоконтроля к лабораторной работе № 1
- •Лабораторная работа № 2
- •Команда вставки - insert
- •Команда обновления - update
- •Команда удаления - delete
- •Вопросы для самоконтроля к лабораторной работе № 2
- •Лабораторная работа №3
- •Команда alter table
- •Модификация ограничений
- •Добавление ограничений с ограниченной областью проверки
- •Отключение и подключение ограничений
- •Правила для изменения и модификации описания столбцов
- •Добавление столбца
- •Модификация столбца
- •Удаление столбца
- •Удаление таблицы
- •Переименование таблицы
- •Вопросы для самоконтроля к лабораторной работе № 3
- •Лабораторная работа № 4
- •Выборка данных из нескольких таблиц
- •Определение условий выборки в предложении where.
- •Групповые функции и предложение group by
- •Наиболее часто встречающиеся ошибки при выполнении group by
- •Предложение order by
- •Вопросы для самоконтроля к лабораторной работе № 4
- •Лабораторная работа № 5
- •Подзапросы
- •Inner join Student s
- •Inner join Student s
- •Inner join
- •Inner join Student s
- •Вопросы для самоконтроля к лабораторной работе № 5
- •Лабораторная работа №6
- •Представления
- •Вопросы для самоконтроля к лабораторной работе № 6
- •Лабораторная работа №7
- •Хранимые процедуры
- •Оператор use
- •Оператор declare
- •Операторы set и select
- •Функция @@identity
- •Функция @@error
- •Объявление параметров
- •Изменение хранимых процедур
- •Удаление хранимой процедуры
- •Лабораторная работа №8
- •If exists
- •Вопросы для самоконтроля к лабораторной работе № 8
- •Задания в тестовой форме
- •Литература Оглавление
Вопросы для самоконтроля к лабораторной работе № 1
К какой группе команд SQL следует отнести команду CREATE?
Даны два отношения R=AB и R=AC. В какой последовательности следует создавать таблицы, чтобы задать ограничения целостности, используя только команду Create?
Какие ограничения могут быть установлены в отношении?
С какой целью используется предложение ON DELETE Cascade?
Какова область действия ограничений в таблице?
Какие требования предъявляются к именам объектов базы данных?
Когда целесообразно устанавливать ограничения на уровне таблицы?
Когда целесообразно устанавливать ограничения на уровне столбца?
С какой целью устанавливаются ограничения?
В чем отличие ограничений Primary key и Unique?
Каких правил следует придерживаться при назначении имен ограничений?
Для каких типов данных ширина столбца не является обязательным параметром?
Какой тип данных может быть присвоен только единственному столбцу в таблице?
При каком определении ограничения FOREIGN KEY строка в ссылочной таблице не может быть удалена?
На какие столбцы запрещена ссылка в выражении ограничения CHECK?
Для каких столбцов обязательно должно быть установлено ограничение NOT NULL?
Лабораторная работа № 2
Цель занятия: Изучение синтаксиса команд языка манипулирования данными (Data Manipulation Language - DML).
Три хорошо известные операции над кортежами:
Добавление
Правка
Удаление
реализуются в SQL с помощью команд:
INSERT
UPDATE
DELETE
Команда вставки - insert
Команда языка DML - INSERT используется для ввода новых строк в таблицу.
Синтаксис команды:
INSERT INTO {<имя таблицы>[(<имя столбца> [псевдоним] [, …n]] |[<подзапрос>]}
VALUES (<значение>[,…n]);
При реализации команды INSERT необходимо отслеживать, чтобы
Последовательность данных в предложение VALUES, соответствовала порядку столбцов в таблице.
Заполнялись все столбцы с признаком NOT NULL.
Пример 12
Задача.
Ввести в таблицу SGroup значения названия групп ИСТ-01 и АИС-01.
Решение.
INSERT INTO SGroup (NameGroup)
VALUES('АИС-01');
INSERT INTO SGroup (NameGroup)
VALUES('ИСT-01');
При успешном выполнении каждой команды вы получите сообщение: 1 row(s) affected
Обратим внимание на то, что поле IDGroup заполняется автоматически, поскольку имеет свойство IDENTITY. Попытка выполнить, например, такую команду
INSERT INTO SGroup (IDGroup, NameGroup)
VALUES(3,'ИСT-02');
Приведет к сообщению об ошибке.
Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'SGroup' when IDENTITY_INSERT is set to OFF.
Однако если вы все-таки хотите ввести код группы вручную вам необходимо отключить действие IDENTITY с помощью команды SET IDENTITY_INSERT .
Синтаксис команды:
SET IDENTITY_INSERT <имя таблицы> { ON | OFF }
Опция - ON отключает процесс автоматического присвоения identity-значений, OFF - включает.
Пример 13
Задача.
Ввести в таблицу SGroup значения названия групп ИСТ-02, присвоив столбцу IDGroup значение 3.
Решение.
SET IDENTITY_INSERT SGroup ON3
INSERT INTO SGroup (IDGroup, NameGroup)
VALUES(3,'ИСT-02');
Несмотря на то, что в команде INSERT список столбцов является необязательным, его рекомендуется указывать явно. Последнее позволяет избежать недиагностируемых ошибок при заполнении столбцов. Если вы все-таки хотите отказаться от перечисления столбцов, то вам придется отслеживать, чтобы порядок столбцов в таблице соответствовал порядку столбцов в команде INSERT.
Пример 14
Задача.
Ввести данные, приведенные ниже (см. Приложение 2. Пример заполнения таблиц) в таблицу Student.
Решение.
Попытка ввода первой строки с помощью приведенной ниже команды
INSERT INTO Student
VALUES('050001','Иванов И.И.',3,'8701','192355','01.06.2002','ГОВД г.Ухты','1111111111')
даст сообщение об ошибке:
Syntax error converting datetime from character string
Ошибка вызвана несоответствием типов данных, причиной же ее послужило нарушение порядка столбцов в списке VALUES. (Надо отметить, что появление сообщения об ошибке, является наилучшим исходом. Дела бы обстояли хуже, если бы не возникло конфликта, вызванного несоответствием типа данных или размера данных. В этом случае результатом стала бы некорректно заполненная таблица.) Исправить ошибку можно или, изменив порядок следования данных в предложении:
INSERT INTO Student
VALUES('050001','1111111111','Иванов И.И.',3,'8701','192355','01.06.2002', 'УВД г.Ухты');
или перечислив все столбцы после имени таблицы в том же порядке, в котором они следуют в предложении VALUES.
INSERT INTO Student (NRecordBook,Stname,IDGroup,SPasport,NPasport,DataPasport, NameDeptPasport,INN)
VALUES('050002', 'Петров П.П',3,'8702','191256','11.20.2002', 'УВД г.Сосногорск', '1111111112')
Естественно, что если столбец не имеет признак NOT NULL, то его значения могут не вводиться, например, в следующем примере не вводится значение ИНН.
INSERT INTO Student (NRecordBook,Stname,IDGroup,SPasport,NPasport,DataPasport, NameDeptPasport)
VALUES('050003','Сидоров С.С.', 2,'8703','192457','11.26.2002', 'УВД г.Ухты')
INSERT INTO Student (NRecordBook)
VALUES('050004')
Данные в таблицу можно внести и из других таблиц, используя запрос SELECT. Реакцией системы, как и в предыдущем случае при успешном выполнении команды будет фраза N row affected (создано N строк), где в качестве N указывается количество созданных строк.
Задание 3
Создать таблицу Student1, аналогичную таблице Student и заполнить ее данными из таблицы приложения (см. Приложение 2. Пример заполнения таблиц)
Пример 15
Задача.
Ввести в таблицу Student записи из таблицы Student1.
Решение.
INSERT INTO Student
SELECT *
FROM Student1;