Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Вопросы для самоконтроля к лабораторной работе № 1

  1. К какой группе команд SQL следует отнести команду CREATE?

  2. Даны два отношения R=AB и R=AC. В какой последовательности следует создавать таблицы, чтобы задать ограничения целостности, используя только команду Create?

  3. Какие ограничения могут быть установлены в отношении?

  4. С какой целью используется предложение ON DELETE Cascade?

  5. Какова область действия ограничений в таблице?

  6. Какие требования предъявляются к именам объектов базы данных?

  7. Когда целесообразно устанавливать ограничения на уровне таблицы?

  8. Когда целесообразно устанавливать ограничения на уровне столбца?

  9. С какой целью устанавливаются ограничения?

  10. В чем отличие ограничений Primary key и Unique?

  11. Каких правил следует придерживаться при назначении имен ограничений?

  12. Для каких типов данных ширина столбца не является обязательным параметром?

  13. Какой тип данных может быть присвоен только единственному столбцу в таблице?

  14. При каком определении ограничения FOREIGN KEY строка в ссылочной таблице не может быть удалена?

  15. На какие столбцы запрещена ссылка в выражении ограничения CHECK?

  16. Для каких столбцов обязательно должно быть установлено ограничение 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;