Практическое занятие № 7
Тема: Запросы на изменение данных в разных СУБД
Цель работы: получить практические навыки по созданию запросов на изменение данных
Ход работы
Пусть имеется БД "dbase" в формате SQL Server. Данная БД состоит из 6 таблиц со следующей структурой:

Таблицы связаны так:
| Главная таблица | Подчиненная таблица | Поле для связи | Тип связи |
| otdelen | spec | id_otd | 1 : ∞ |
| spec | grupy | id_spec | 1 : ∞ |
| grupy | students | id_grup | 1 : ∞ |
| students | ocenki | id_stud | 1 : ∞ |
| predmety | ocenki | id_predmet | 1 : ∞ |
Выполните подключение БД к серверу (если она отсутствует).
Указания: разархивируйте архив.
Запустите утилиту "Microsoft SQL Server Management Studio", пройдите регистрацию введя информацию: Параметры подлинности = "Проверка подлинности SQL Server", Имя пользователя=sa, пароль=111 (у Вас может быть свой пароль).
В дереве объектов вызовите контекстное меню папки "Базы данных" и выберите команду "Присоединить". В правой части появится окно, в котором с помощью кнопки "Добавить" укажите файл из архива и щелкните ОК.
В результате у вас на сервере будет зарегистрирована новая БД.
Для создания запроса выберите в левой части нужную БД и щелкните на кнопке
"Создать запрос"
В правой части окна
введите текст запроса.
Для выполнения запроса щелкните на кнопке "Выполнить"
.
В нижней части окна отобразится набор отобранных данных.
C помощью команды Insert добавьте в таблицу students произвольную запись с заполнением всех полей, кроме поля id_stud (поле-счетчик).
Указания: введите команду вида:
insert into students
(id_grup,fam,imya,otch,datar,finance,pol)
values
(1,'Яковлев','Александр','Николаевич','25.04.1995','Госзаказ','м');
Откройте таблицу students и убедитесь, что новая запись добавлена в конец таблицы.
С помощью команды Insert добавьте в таблицу students произвольную запись без заполнения полей со значениями по умолчанию (finance='Госзаказ', pol='м').
Указания: введите команду вида:
insert into students
(id_grup,fam,imya,otch,datar)
values
(1,'Новиков','Никита','Владимирович','15.11.1994');
Откройте таблицу students и убедитесь, что новая запись добавлена в конец таблицы, и поля finance и poёl заполнены значениями по умолчанию.
В таблице students в поле finance текст "Госзаказ" заменить на "Бесплатно".
Указания: введите текст запроса:
update students
set finance='Бесплатно'
where finance='Госзаказ';
После выполнения запроса в нижней части окна появится сообщение о количестве обновленных записей.
Для студентов из групп ПКС, увеличить балл по математике на 10.
Указания: напишем запрос с помощью связывания таблиц:
update ocenki
set ocenka=ocenka+10
from grupy inner join students on grupy.id_grup=students.id_grup
inner join ocenki on students.id_stud=ocenki.id_stud
inner join predmety on ocenki.id_predmet=predmety.id_predmet
where nazv_grup like '%ПКС%'
and nazv_predmet='Математика';
После выполнения запроса в нижней части окна появится сообщение о количестве обновленных записей.
В таблице students для студентов, имеющих средний балл ниже среднего по учебному заведению, заменить значение в поле Отчество на значение «Плохо».
Указания: Для работы со средними баллами студентов создадим представление с именем "stud_srbal".
Create View stud_srbal
As
Select id_stud, avg(ocenka) as srbal
From ocenki
Group by id_stud;
Напишем запрос на обновление с помощью связывания таблицы students с представлением и подзапроса для нахождения среднего балла:
update students
set otch='Плохо'
from students inner join stud_srbal on students.id_stud=stud_srbal.id_stud
where srbal<(select avg(srbal) from stud_srbal);
После выполнения запроса в нижней части окна появится сообщение о количестве обновленных записей.
Из таблицы students удалите всех студентов со средним баллом ниже 3,25.
Указания: Для работы со средними баллами студентов будем использовать созданное ранее представление "stud_srbal".
Напишем запрос с помощью связывания таблиц.
delete students
from students inner join stud_srbal
on students.id_stud=stud_srbal.id_stud
where srbal<3.25;
После выполнения запроса в нижней части окна появится сообщение о количестве удаленных записей.
Из таблицы students удалите всех студентов с номером группы 38.
Указания: Напишем запрос с помощью связывания таблиц.
delete students
from grupy inner join students
on grupy.id_grup=students.id_grup
where nazv_grup like '38%';
После выполнения запроса в нижней части окна появится сообщение о количестве удаленных записей.
Из таблицы ocenki удалите все оценки по физике.
Указания: данный запрос выполняется по одной таблице ocenki:
delete ocenki
from ocenki inner join predmety on ocenki.id_predmet=predmety.id_predmet
where nazv_predmet='Физика';
После выполнения запроса в нижней части окна появится сообщение о количестве удаленных записей.
Создайте копию таблицу students под именем students2.
Указания: запрос на создание таблицы будет иметь вид:
select *
into students2
from students;
Попробуйте выполнить этот запрос еще раз. У вас появится сообщение об ошибке, что таблица students2 уже существует. Внесите изменения в предыдущий пример, чтобы копия таблицы создавалась всегда заново.
Указания: запрос на создание таблицы будет иметь вид:
--вначале удаляем таблицу students2, если она существует
if object_id('students2', 'U') is not null
drop table students2;
go
--создаем резервную копию таблицы students
select *
into students2
from students;
Скачайте исходную БД в формате MySQL. Выполните все рассмотренные выше запросы в этой СУБД.
Указания: распакуйте архив. В архиве находится файл со скриптом БД.
Запустите утилиту EMS SQL Manager for MySQL. В правой части окна программы выберите команду "Выполнить SQL скрипт". В новом окне выберите команду "Выполнить скрипт из файла". В диалоговом окне укажите распакованный файл скрипта. Если появится окно регистрации, то укажите Пользовать=root, Пароль=111. Если такого окна не появилось, то нажимайте в окне ОК. Появится сообщение, что скрипт выполнен успешно и появится окно для регистрации БД. Перенесите ее в правую часть окна и нажмите ОК. В результате БД будет установлена, зарегистрирована и готова к работе.
В левой части окна можете открыть БД, просмотреть ее таблицы.
Для выполнения запросов в окне выполните команду "Инструменты - Показать редактор SQL". В результате в правой части окна откроется поле для ввода тестов запросов.
Замечения для MySQL.
1) в запросе insert при добавлении новой записи значение для поля datar нужно записывать в формате MySQL: yyyy-mm-dd
2) Обратите внимание, что в запросе на обновление по связанным таблицам команда запроса будет иметь иной вид.
Например, для студентов из групп ПКС, увеличить балл по математике на 10 можно с помощью запроса:
Напишем запрос с помощью связывания таблиц:
update grupy, students, ocenki, predmety
set ocenka=ocenka+10
where grupy.id_grup=students.id_grup
and students.id_stud=ocenki.id_stud
and ocenki.id_predmet=predmety.id_predmet
and nazv_grup like '%ПКС%'
and nazv_predmet='Математика';
Для студентов, имеющих средний балл ниже среднего по учебному заведению, заменить значение в поле Отчество на значение «Плохо» можно с помощью запроса:
update students, stud_srbal
set otch='Плохо'
where students.id_stud=stud_srbal.id_stud
and srbal<(select avg(srbal) from stud_srbal);
3) При создании копии таблицы необходимо использовать другой синтаксис команды:
##удаляем копию таблицы students2
drop table if exists students2;
##создаем новую копию таблицы
create table students2
select * from students;