Главная страница

кос пм02 09.02. кос_ПМ02. Комплект контрольнооценочных средств по профессиональному модулю пм. 02 Разработка и администрирование баз данных для специальности 09. 02. 03 Программирование в компьютерных системах


Скачать 0.57 Mb.
НазваниеКомплект контрольнооценочных средств по профессиональному модулю пм. 02 Разработка и администрирование баз данных для специальности 09. 02. 03 Программирование в компьютерных системах
Анкоркос пм02 09.02.03
Дата26.06.2022
Размер0.57 Mb.
Формат файлаdocx
Имя файлакос_ПМ02.docx
ТипДокументы
#616175
страница8 из 9
1   2   3   4   5   6   7   8   9

«Добавление, изменение, удаление записей в таблицах»


Цель: «Сформировать навыки и умения построения запросов действий»
Ход Работы
Все запросы, рассмотренные ранее являются запросами на выборку. Добавление, изменение и удаление записей выполняется запросами действиями. Эти запросы не выводят данные на экран, а производят их изменение. Если необходимо просмотреть изменённые данные, то после запроса – действия , выполните запрос выборку.

Язык SQL ориентирован на выполнение операций над группами записей, хотя в некоторых случаях операция может проводиться и над отдельной записью. Поэтому неудивительно, что операторы добавления, изменения и удаления записей в общем случае вызывают соответствующие операции над группами записей.
1.Оператор INSERT

Оператор INSERТ применяется для добавления записей в объект. В качестве объекта может выступать таблица БД или просмотр (VIEW), созданный оператором CREATE VIEW. В последнем случае записи могут добавляться в несколько таблиц.

Формат оператора INSERT:
INSERT INTO <объект> [(столбец1[(, столбец2 ...] )]

{VALUES «значение1> (, <значение2> ...)) | <оператор SELECT> }

Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых записях. Список столбцов может быть опущен. В этом случае подразумеваются все столбцы объекта, причем в том порядке, в котором они определены в данном объекте.

Поставить в соответствие столбцам списки значений можно двумя способами. Первый состоит в явном указании значений после слова VALUES, второй - в формирован значений при помощи оператора SELECT.
Явное указание списка значений:

В этом случае оператор INSER Т при меняется для добавления одной записи и имеет формат
INSERT INTO <объект> (столбец1 (, столбец2 ...)) VALUES «значение1> (, <значение2> ...)
Значения назначаются столбцам по порядку следования тех и других в операторе: первому по порядку столбцу назначается первое значение, второму столбцу - второе значение и Т.д.
Задание 1. Добавить в таблицу tovar новую запись:
INSERT INTO tovar (kod_tov, zena, kod_post) VALUES (‘005’, 350, ‘12’)
Поскольку столбцы таблицы RASHOD указаны в полном составе и именно в том порядке, в котором они перечислены при создании таблицы tovar оператором CREAТ TЕABLE, оператор можно упростить:
INSERT INTO tovar VALUES (‘005’, 350, ‘12’)
Указание значений при помощи оператора SELECT :

INSERT INTO <объект> (столбец1 (, столбец2 ...)) <оператор SELECT>

При этом значениями, которые присваиваются столбцам, являются значения, возвращаемые оператором SELECT. Порядок их назначения столбцам аналогичен предыдущей форме оператора INSERТ: значение первого по порядку столбца результирующего набора данных оператора SELECT присваивается первому столбцу оператора INSERT, второй - второму и Т.Д. Следует обратить внимание на важную особенность: поскольку оператор SELECT в общем случае возвращает множество записей, то и оператор INSERT в данной форме приведет к добавлению в объект аналогичного количества новых записей.
Задание 2. Создайте таблицу itog, в которую добавляются записи, выбранные запросом.

Создание таблицы:

use sklad

createtable itog(

data varchar(15),

kol int )

В эту таблицу добавляется записи за каждую дату с суммарным количеством поступившего товара.

use sklad

INSERTINTO itog

SELECT data,sum (kol)

FROM postavka

groupby data
2.Оператор UPDAТЕ
Оператор UPDAТЕ применяется для изменения значения в группе записей или - в частном случае - в одной записи объекта. В качестве объекта могут выступать ТБД или просмотр, созданный оператором CREAТЕ VIEW. В последнем случае могут изменяться значения записей из нескольких таблиц.

Формат оператора UPDAТЕ:
UPDAТЕ <объект>

SET столбец1 = <значение1> (,столбец2 = <значение2>...)

(WНЕRE <условие поиска > )
При корректировке каждому из перечисленных столбцов присваивается соответствующее значение. Корректировка выполняется для всех записей, удовлетворяющих условию поиска. Условие поиска задается так же, как в операторе SELECT
Задание 3. Увеличьте цену товара на 10% для поставщика с кодом ‘11’

use sklad

select *

from tovar

where kod_post='11'
update tovar

set zena=zena+50

where kod_post='11'
select *

from tovar

where kod_post='11'

Перед выполнением запроса – действия запускается запрос на выборку, чтобы посмотреть состав данных перед обновлением. После выполнения обновления снова выведем данные для просмотра.
3.Оператор DELETE
Оператор DELETE предназначен для удаления группы записей из объекта. В качестве объекта могут выступать ТБД или просмотр, созданный оператор CREATE VIEW..

Формат оператора DELETE:
DELETE FROM <объект> [WHERE <условие поиска>];
Удаляются все записи из объекта, удовлетворяющие условию Условие поиска задается так же, как в операторе SELECT.
Задание 4.Удалите из таблицы расход все записи за 2 октября.

use sklad

select *

from rashod
deletefrom rashod

where data = '2 октября'
select *

from rashod

Перед выполнением запроса – действия запускается запрос на выборку, чтобы посмотреть состав данных перед обновлением. После выполнения обновления снова выведем данные для просмотра.
Контрольные задания.


  1. В таблицу ‘поставщик’ добавьте новую запись о поставщике с кодом «17», «Лесная ягода»

  2. Создайте таблицу ‘лучший товар’ с полями kod_tov, kol. Выполните последовательность команд: удалите все имеющиеся записи из таблицы ‘лучший товар’; добавьте в таблицу ‘лучший товар’ код товара и его количество, который больше всего был отпущен со складов (по таблице rashod, вложенный запрос на нахождение максимума); выведите на экран содержимое таблицы ‘лучший товар’.

  3. Увеличьте количество поставленного товара на 5 единиц для номера поставки ‘04’. Выведите содержимое таблице до обновления и после обновления.

  4. В таблицу Rashod добавьте новую запись о продаже товара с кодом ‘001’. Выведите содержимое таблице до добавления и после добавления записи.

  5. Из таблицы Rashod удалите все записи с количеством товара меньше 15. Выведите содержимое таблице до удаления и после удаления.

  6. В индивидуальной базе данных выполните примеры на добаление, удаление и обновление записей.

Практическая работа №10
«Создание триггеров в ИС «Учебный процесс» для поддержания целостности данных»

Цель: «Сформировать навыки и умения реализации триггеров для поддержания целостности данных»
Ход Работы
1. Определение триггера

Триггер – это хранимая процедура особого типа, вызываемая на выполнение в ответ на определённые события. Триггеры подразделяются на два основных типа: триггеры языка определения данных ( DDL) и триггеры языка манипулирования данными ( DML)
Триггеры DDL активизируются в ответ на внесение каких-либо изменений в структуру б.д пользователями ( создание, удаление, изменение структуры таблиц,).

Триггеры DML представляют собой фрагменты кода, которые закрепляются за конкретной таблицей.

В отличие от хранимых процедур, при использовании которых необходимо явно вызывать на выполнение определённый код, триггеры вызываются на выполнение автоматически при обнаружении события, связанного с ним. Триггеры не получают параметров и не возвращают значений.
Конструкция FOR ( или AFTER) позволяет указать какое действие приводит к запуску триггера.

Триггер |Insert этот триггер вызывается на выполнение каждый раз, когда вставляется новая строка в таблицу, за которой закреплён триггер. Для каждой новой строки создаётся её копия и вставляется в таблицу INSERTED. Эта таблица сохраняется до тех пор пока действует триггер ( с момента запуска до его завершения).
Триггер |Delete вызывается на выполнение каждый раз, при удалении записи. Копия удаляемой записи помещается во временную таблицу Deleted.
Триггер |Update вызывается на выполнение при обновлении записи таблицы, для которой он создан. операция модификации строки трактуется как удаление старой версии строки ( помещение её в Deleted) и добавление новой строки ( помещение её в INSERTED). При этом триггеры на удаление и добавление не запускаются.
2. Условный оператор для триггера в языке SQL-Transact


Один оператор

Несколько операторов

IF условие

Оператор1

Else

Оператор2


IF условие

begin

Оператор1

Оператор2

end

Else

begin

Оператор3

Оператор4

end


Создадим триггеры на удаление для таблиц со стороны мощности ‘многие’ в схеме данных «Учебный процесс»
Чтобы ввести код триггера для события «удаление» данных в таблице kafedra, щёлкните по изображению + . В появившемся списке выберите папку Triggers . Выделите её правой кнопкой мыши и из контекстного меню выберите New Trigger. В представленном шаблоне введите код
create trigger del_kafedra

on kafedra

for delete

as

declare @kk varchar(3)

begin

select @kk=kkaf from deleted

delete from prepodavatel where prepodavatel.kkaf=@kk

end

Запустите его на выполнение. Для того чтобы просмотреть код откомпеллированного триггера нужно для таблицы kafedra выбрать подраздел Triggers.

При работе с таблицей kafedra во время удаления текущей записи, все записи об этой кафедре в таблице prepodavatel будут удалены.
Задание 1. Триггер для события «удаление» данных в таблице prepodavatel

create trigger del_prepodavatel

on prepodavatel

for delete

as

declare @tn varchar(3)

begin

select @tn=tabn from deleted

delete from isuchenie where isuchenie.tabn=@tn

end

При работе с таблицей prepodavatel во время удаления текущей записи, все записи об этом преподавателе в таблице isuchenie будут удалены.
Задание 2. Триггер для события «удаление» данных в таблице predmet

create trigger del_predmet

on predmet

for delete

as

declare @kp varchar(3)

begin

select @kp=kp from deleted

delete from isuchenie where isuchenie.kp=@kp

end

При работе с таблицей predmet во время удаления текущей записи, все записи об этом предмете в таблице isuchenie будут удалены.
Задание 3. Триггер для события «удаление» данных в таблице isuchenie

create trigger del_isuchenie

on isuchenie

for delete

as

declare @kp varchar(3)

declare @tn varchar(3)

declare @ng varchar(3)

declare @vidz varchar(3)

begin

select @kp=kp, @tn=tabn, @ng=ng, @vidz=vidz from deleted
delete from uspevaemost where kp=@kp and tabn=@tn and vidz=@vidz and ng=@ng

end

Если в созданный триггер необходимо внести изменения, то нужно выбрать таблицу, для которой он создавался, перейти к подразделу Triggers, выделить его и из контекстного меню выбрать Modify. Триггер отобразится в окне редактирования. После внесения изменений на панели выбрать кнопку Execute.
Контрольные задания


  1. создать триггер на удаление для таблицы gruppa.

  2. создать триггер на удаление для таблицы student.

  3. создать триггер на удаление для таблицы uspevaemost. В теле триггера выполняется следующий код: при удалении студента из таблицы uspevaemost в таблице gruppa изменяется pball для группы студента.

  4. создать триггер на обновление для таблицы uspevaemost. В теле триггера выполняется следующий код: при изменении оценки студента в таблице uspevaemost его pball в таблице student обновляется

Практическая работа №11
«Создание триггеров в ИС «Учебный процесс» для поддержания целостности данных»

Цель: «Сформировать навыки и умения реализации триггеров, реализующих бизнес - правила»
Ход Работы
Создадим таблицу “svodnaj”, которая содержит количество всех оценок из таблицы «Успеваемость».
CREATE TABLE svodnaj (

Ozenka int not null,

Kol int not null,

Primary key (Ozenka) )
.1 добавлении новой записи

При добавлении новой записи в «Успеваемость» ( Триггер на добавление для «Успеваемость») просматривается таблица “svodnaj”, если строка с такой оценкой уже есть, то изменяется её количество

До вставки

ozenka

kol

3

4


После вставки

ozenka

kol

3

5


В противном случае в таблицу “svodnaj” добавляется новая строка с этой оценкой и количеством: 1

svodnaj

ozenka

kol

3

1


Пример триггера

CREATE trigger InsUspevaemost

On uspevaemost

for INSERT

as

declare @k int

begin

select @k=ozenka from inserted

if@k>1 AND @k<=5

begin

IF exists (select s.ozenka from svodnaj s where s.ozenka=@k )// УЖЕ ЕСТЬ

UPDATE svodnaj set kol=kol+1 where svodnaj.ozenka=@k

else

insert into svodnaj ( ozenka,kol) values (@k, 1)

end

else

BEGIN

RAISERROR ('ENTER OZENKA ' ,16,1)

ROLLBACK TRAN

END

End
2 Удалениезаписи
При удалении записи в «Успеваемости» ( Триггер на удаление для «Успеваемость»), в таблице “svodnaj” для удаляемой оценки уменьшается количество

До удаления Удаление из «Успеваемости»

ozenka

kol




ng

ns

kp

ozenka

3

4




101

01

02

3

После удаления

ozenka

kol

3

3


Пример триггера
create trigger DelUspevaemost

on uspevaemost

for delete

as

declare @oz int

declare @k int

begin

select @oz=ozenka from deleted

select @k=kol from svodnaj where ozenka=@oz
UPDATE svodnaj set kol=kol-1 where ozenka=@oz

if @k=1

delete from svodnaj where ozenka=@oz
end
3 Обновление записи
При обновлении записи в «Успеваемости» ( Триггер на обновление для «Успеваемость»), в таблице “svodnaj” для удаляемой оценки изменяется количество
До обновления После обновления

ozenka

kol




ozenka

kol

3

4




3

3










5

1


Старое значение «Успеваемости»

ng

ns

kp

ozenka

101

01

02

3


Новое значение «Успеваемости»

ng

ns

kp

ozenka

101

01

02

5



Пример триггера

create trigger [UpdUspevaemost]

on [uspevaemost]

for update

as

declare @prev_oz int

declare @new_oz int

declare @k int

begin

select @prev_oz=ozenka from deleted

select @new_oz=ozenka from inserted

if @prev_oz<>@new_oz

begin

// изменение старой оценки: как при удалении

select @k=kol from svodnaj where ozenka=@prev_oz

UPDATE svodnaj set kol=kol-1 where ozenka=@prev_oz

if @k=1

delete from svodnaj where ozenka=@prev_oz
// изменение новой оценки: как при добавлении

if @new_oz>1 AND @new_oz<=5

begin

IF exists (select s.ozenka from svodnaj s where s.ozenka=@new_oz )

UPDATE svodnaj set kol=kol+1 where svodnaj.ozenka=@new_oz

else

insert into svodnaj ( ozenka,kol) values (@new_oz, 1)

end

else

BEGIN

RAISERROR ('ENTER OZENKA ' ,16,1)

ROLLBACK TRAN

END
end
end
Контрольные задания


  1. Создать триггер на удаление в индивидуальной базе данных для всех таблиц со стороны «одного» в мощности отношений.

  2. Создать триггер на обновление в индивидуальной базе данных для всех таблиц со стороны «одного» в мощности отношений.

  3. Создать триггер на добавление записи в индивидуальной базе данных.

Практическая работа №12
«Хранимые процедуры в SQL Server»

Цель: «познакомить студентов с понятием хранимая процедура, рассмотреть основные методы их создания»
Ход Работы
Хранимая процедура (stored procedure) – это именованный набор команд Transact-SQL, хранящийся непосредственно на сервере и представляющий собой самостоятельный объект базу данных. Она существует независимо от таблиц или каких-либо других объектов баз данных. Хранимая процедура может быть вызвана клиентской программой, другой хранимой процедурой или триггером. Возможно управлять правами доступа пользователей к хранимы процедурам. Прежде чем выполнить хранимую процедуру, сервер генерирует для неё так называемый план исполнения (execution plan), выполняет её оптимизацию и компиляцию. Выполняется кэширование плана исполнения процедуры, а также оптимизированного компилирования кода. Использование хранимых процедур реализует принцип модульного проектирования.

1. Типы хранимых процедур

Системные хранимые процедуры (system stored procedures) – это хранимые процедуры, поставляемые в составе SQL Server 2000. Предназначены для выполнения различных административных действий. Такие процедуры имеют префикс sp_ . Они хранятся в база данных master.

Пользовательские хранимые процедуры (user-defined stored procedures) – это процедуры созданные пользователями, реализующие те или иные действия (полноценный объект баз данных). Следствием этого является то, что каждая хранимая процедура хранится в конкретной базе данных.

Временные хранимые процедуры (temporary stored procedures) – эти процедуры существуют лишь некоторое время, после чего автоматически уничтожаются сервером. Бывают локальные и глобальные.

Локальные временные хранимые процедуры(local temporary stored procedure) – могут быть вызваны только из того соединения, в котором они были созданы. При создании такой процедуры необходимо дать ей имя, начинающееся символом #. Они хранятся в база данных tempdb и автоматически удаляются при отключении пользователя.

2. Синтаксис процедуры
Для создания хранимой процедуры на языке Transact-SQL используется SQL-оператор
CREATE PROCEDURE

Синтаксис данного оператора для MS SQL Server 2000

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS

Аргументы:

procedure_name – имя создаваемой процедуры. Используются префиксы sp_, #, ## (значение указано выше). Как видно из синтаксиса, не допускается указывать имя владельца, которому будет принадлежать создаваемая процедура, а также имя базы данных, в которой должна быть размещена процедура. Чтобы разместить хранимую процедуру в конкретной базе данных нужно создать её в контексте этой базы данных.

;number – идентификационный номер хранимой процедуры, однозначно определяющий её в группе процедур. На пример: orderproc;1, orderproc;2. Процедура orderproc объединяет в себе две процедуры. При вызове DROP PROCEDURE orderproc, будут удалены все процедуры этой группы.

@parameter – имя параметра, который будет использоваться создаваемой хранимой процедурой для передачи входных или выходных данных. Имена параметров должны начинаться с символа @. В одной хранимой процедуре может использоваться до 1024 параметров.

data_type – тип данных, который будет иметь соответствующий параметр хранимой процедуры. Можно использовать все типы данных, включая text, ntext и image и пользовательские типа данных. Однако, тип данных cursor может использоваться только как выходной параметр (с указанием ключевого слова OUTPUT).

VARYING – ключевое слово, которое используется совместно с параметром OUTPUT, имеющим тип данных cursor. В качестве выходного параметра будет представлено результирующее множество.

default – значение, которое будет принимать соответствующий параметр по умолчанию. При вызове процедуры, явно можно будет не указывать значение соответствующего параметра. Будет использовано значение, созданное с помощью этого параметра.

OUTPUT – его наличие указывает, что параметр предназначается для возвращения данных из хранимой процедуры. Но этот параметр также может использоваться и для передачи значений в процедуру. Значение соответствующего параметра при вызове процедуры может быть задано только с помощью локальной переменной. Нельзя использовать выражения и константы, допустимые для обычных параметров.

n – количество определённых параметров.

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

RECOMPILE - Указывает, что SQL Server должен создавать план выполнения хранимой процедуры при каждом её вызове.

ENCRYPTION - Указывает, что SQL Server должен выполнить кодирование хранимой процедуры. Обратите внимание, сохранённые процедуры, созданные с выбором ENCRYPTION не могут рассматриваться с sp_helptext.

FOR REPLICATION – используется при репликации данных и включение создаваемой хранимой процедуры в качестве статьи в публикацию. Этот параметр не может быть использован совместно с параметром RECOMPILE.

AS – ключевое слово, свидетельствующее о начале тела процедуры

3. Вызов хранимой процедуры

Для вызова хранимой процедуры используется оператор EXECUTE.

Синтаксис оператора:
EXEC procedure_name

[ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ]
Указывая ключевое слово OUTPUT, вы предписываете присвоить соответствующей локальной переменной (внешней по отношению к процедуре) при завершении хранимой процедуры значение соответствующего параметра. При этом значения параметров могут изменяться в ходе процедуры.
DROP PROCEDURE – удаляет процедуру с сервера.

Задание 1.

Создать процедуру, которая выводит среднюю оценку по каждому предмету. Функция не принимает и не возвращает параметров

Выберите базу uch_proc , откройте папку Programmbility, выберите Stored Procedures.

Из контекстного меню для Stored Procedures выберите New Stored Procedure.

CREATE PROCEDURE sred_ozenka

AS

BEGIN

SELECT kp, avg(ozenka)

from uspevaemost

group by kp

END

Для компиляции нажмите !Execute. Процедура появится в списке.

Для выполнения процедуры в редакторе запросов введите команду Exec sred_ozenka.

Задание 2.

Создать процедуру, которая выводит среднюю оценку по предмету, переданному через параметр

CREATE PROCEDURE sred_ozenka_pred

@pred varchar(20)

AS

BEGIN

SELECT avg(uspevaemost.ozenka)

from uspevaemost, isuchenie, predmet

where uspevaemost.ng=isuchenie.ng and uspevaemost.kp=isuchenie.kp and uspevaemost.tabn=isuchenie.tabn

and uspevaemost.vidz=isuchenie.vidz and isuchenie.kp= predmet.kp and predmet.np=@pred

END

Для выполнения процедуры в редакторе запросов введите команду

Exec sred_ozenka_pred 'информатика'
Задание 3.

Создать процедуру, которая выводит через выходной параметр фамилию студента, который получал наибольшее количество двоек в группе, переданной через входной параметр. Итак, процедура будет иметь один входной и один выходной параметр. Около выходного параметра указывается ключевое слово output
CREATE PROCEDURE neud

@ngr varchar(3) , входной параметр – номер группы

@fio_s varchar(20) output выходной параметр

AS

BEGIN

SELECT @fio_s=fio

from student

where ng=@ngr and ns in(

SELECT ns

from uspevaemost

group by ns, ozenka

having ozenka=2 and count(kp)>= all (

SELECT count(kp)

from uspevaemost

group by ns, ozenka, ng

having ozenka=2 and ng=@ngr) )

END
Для выполнения процедуры в редакторе запросов введите команду

use uch_proc

declare @f varchar (20)

exec neud '101', @fio_s=@f output

print @f

Задание 4.

Создать процедуру, которая выводит коды предметов и вид занятий, по которым получал двойки самый неуспевающий студент указанной группы. Самый неуспевающий студент определяется процедурой neud . Т. е. создаваемая процедура будет вызывать neud

CREATE PROCEDURE neud_pred

@ngg varchar(3)
AS

declare @f varchar (20)

BEGIN

exec neud @ngg, @fio_s=@f output // вызов процедуры neud

select @f // вывод фамилии неуспевающего
// вывод кода предмета и вида занятия,по которым он получил 2
select uspevaemost.kp, uspevaemost.vidz

from uspevaemost, student

where uspevaemost.ng= student.ng and uspevaemost.ns= student.ns and student.fio=@f
END

Для выполнения процедуры в редакторе запросов введите команду

use uch_proc

exec neud_pred '101'

Контрольные задания


  1. Создать процедуру, которая в базе данных ‘sklad’определяет количество товара в таблице ‘tovar’.

  2. Создать процедуру, которая по входному параметру наименование поставщика выводит наименование, код, цену товара.

  3. Создать процедуру, у которой два параметра: входной параметр - наименование товара, выходной – цена товара. По входному параметру определить цену товара.

  4. Создать процедуру_2, которая выводит товар и его цену большую средней цены. Среднюю цену возвращает процедура_1 ( как в задании 4).

  5. База данных Учебный процесс. Создать процедуру, которая по входному параметру номер группы определяет количество положительных оценок ( выходной параметр)

  6. База данных Учебный процесс. Создать процедуру, которая через выходной параметр возвращает наименование предмета с максимальным количеством часов. Входного параметра нет.

  7. База данных Учебный процесс. Создать процедуру, которая по входному параметру фамилия студента, возвращает номер группы.

  8. Сформулируйте и выполните процедуры в индивидуальной базе данных ( без параметров, с входным и выходным параметром)


Практическая работа №13
«Создание запросов с использованием внешнего соединения»

Цель: «выявить отличия внешнего и внутреннего соединений, создать запросы для внешних соединений»
Ход Работы
При внутреннем соединении, рассмотренном ранее, таблицы связывались в условном операторе предложением:
<имя столбца таблицы 1> = < имя столбца таблицы 2>

Например: отобразить фамилии преподавателей с кафедры ‘информатика’

Select prepodavatel.fio

From kafedra, prepodavatel

Where kafedra.kkaf = prepodavatel.kkaf and kafedra.nkaf=информатика
В этом случае осуществляется декартово произведение таблиц kafedra, prepodavatel и из полученного набора данных отбираются записи, удовлетворяющие условию поиска (kafedra.kkaf = prepodavatel.kkaf)
Существует и другой вид соединения таблиц – внешнее соединение. Оно определяется предложением From согласно спецификации

Select * from <таблица 1> <вид соединения> JOIN < таблица 2>

ON <условие поиска>
Внешнее соединение похоже на внутреннее, но в результирующий набор включаются записи ведущей таблицы соединения, которые объединяются с пустым множеством записей другой таблицы. Какая из таблиц будет ведущей определяет вид соединения:

  • Left - ( левое внешнее соединение), когда ведущей является таблица1 (расположенная слева от вида соединения);

  • Right – (правое внешнее соединение), когда ведущей является таблица2 (расположенная справа от вида соединения);


Задание 1: создайте две таблицы


Create table tab1(

P1 varchar(1),

P2 varchar(1),

P3 int

)


Create table tab2(

P2 varchar(1),

P4 varchar(1),

)


Заполните данными эти таблицы.

tab1

Р1

Р2

Р3

a

x

400

b

x

200

c

y

500

d










tab2

Р2

Р4

x

1

y

2

z

2











Тогда выполнение оператора Select, реализующего внешнее левое соединение

Select tab1.Р1, tab1.Р2, tab2.Р4 from tab1 Left JOIN tab2

ON tab1.Р2= tab2.Р2

Приведёт к выдаче результирующего набора

tab1.Р1

tab1.Р2

tab2.Р2

a

x

1

b

x

1

c

y

2

d







Пунктиром показаны столбцы ведущей таблицы tab1. Как видно для записи таблицы tab1, где столбец tab1.Р1 имеет значение «d», нет парных записей в таблице tab2, для которых бы удовлетворялось условие поиска tab1.Р2= tab2.Р2. Поэтому данная запись таблицы tab1 показана в соединении с пустой записью.

В то же время, выполнение оператора Select, реализующего внешнее правое соединение

Select tab1.Р1, tab1.Р2, tab2.Р4 from tab1 Right JOIN tab2

ON tab1.Р2= tab2.Р2

Приведёт к выдаче результирующего набора

tab1.Р1

tab1.Р2

Tab2.Р2

a

x

1

b

x

1

c

y

2







2


Пунктиром показаны столбцы ведущей таблицы tab2. Как видно, для записи таблицы tab2, где столбец tab2.Р1 имеет значение ’z’ и столбец tab2.Р2 имеет значение «2», нет парных записей в таблице tab1, для которых бы удовлетворялось условие поиска tab1.Р2= tab2.Р2. Поэтому данная запись таблицы tab2 показана в соединении с пустой записью.
Задание 2:Построить внешнее соединение по таблице uspevaemost с таблицей student, т.е. показать студента, соответствующего каждой оценке.
use uch_proc

Select uspevaemost.ozenka,uspevaemost.kp, student.ns, student.ng from uspevaemost Left JOIN student

ON uspevaemost.ns=student.ns and uspevaemost.ng=student.ng

Или

use uch_proc

Select uspevaemost.ozenka,uspevaemost.kp, student.ns, student.ng from student RightJOIN uspevaemost

ON uspevaemost.ns=student.ns and uspevaemost.ng=student.ng
Результат запроса:
Ozenka kp ns ng

3 01 01 101

4 01 01 101

3 03 01 101
Задание3:Построить внешнее соединение по таблице student с таблицей uspevaemost, т.е. показать все оценки по каждому студенту.
use uch_proc

Select uspevaemost.ozenka,uspevaemost.kp, student.ns, student.ng from student LeftJOIN uspevaemost

ON uspevaemost.ns=student.ns and uspevaemost.ng=student.ng

Или

use uch_proc

Select uspevaemost.ozenka,uspevaemost.kp, student.ns, student.ng from uspevaemost RightJOIN student

ON uspevaemost.ns=student.ns and uspevaemost.ng=student.ng
Результат запроса:

Ozenka kp ns ng

3 01 01 101

4 01 01 101

3 03 01 101

NULL NULL 03 102

NULL NULL 01 103

NULL NULL 02 103

NULL NULL 01 104
Задание 4. Используя внутреннее соединение между таблицами student ,isuchenie, predmet и условия существования хотябы одной записи (exists ) в наборе данных, вывести фамилии студентов, которые не получали оценок по изучаемым предметам.
use uch_proc

Select student.fio, student.ng , predmet.np,isuchenie.vidz

from student ,isuchenie, predmet

where isuchenie.ng=student.ng and predmet.kp=isuchenie.kp and not exists(

select uspevaemost.ns

from uspevaemost

where uspevaemost.ns=student.ns and uspevaemost.kp=isuchenie.kp and isuchenie.vidz=uspevaemost.vidz
)

Аристов 101 математика лек

Аристов 101 математика пр

Аристов 101 история лек

Аристов 101 ин яз пр

Аристов 101 философия лек

.

Контрольные задания


  1. Построить внешнее соединение по таблице kafedra с таблицей prepodsavatel, т.е. показать состав каждой кафедры. Построить левое внешнее соединение и правое соединение.

  2. Построить внешнее соединение по таблице predmet с таблицей isuchenie, которое отобразит в каких группах и с каим количеством часов преподаются предметы. Построить левое внешнее соединение и правое соединение

  3. Построить внешнее соединение по таблице gruppa с таблицей student, которое покажет состав групп. Построить левое внешнее соединение и правое соединение.

  4. Сформулировать и выполнить запросы в индивидуальной базе данных с использованием левого внешнего соединения.

  5. Сформулировать и выполнить запросы в индивидуальной базе данных с использованием правого внешнего соединения.

Практическая работа №14
«Транзакции. Уровни изоляций транзакций. Резервирование данных»
Цель: «познакомить студентов с основными принципами администрирования баз данных в SQL Server, изучить основные приемы при резервировании баз данных и журналов транзакций, а также их восстановления»
Ход Работы
1.Уровни изоляции транзакций
Разработчику предоставляется возможность выбора уровня изоляции транзакций:

  • READCOMMITTED(значение, применяемое по умолчанию)

  • READUNCOMMITTED

  • SERIALIZABLE


Для выбора конкретного уровня изоляции транзакций применяется оператор:

SET TRANSACTION ISOLATION LEVEL < READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE >
Опция READCOMMITTED

При использовании этой опции все созданные разделяемые блокировки автоматически освобождаются после завершения выполнения оператора, в котором они были созданы.
Задание 1 “уровень изоляции транзакции «READCOMMITTED» “
Установите соединение с базой данных «Учебный процесс».

В окне редактора нового запроса ( New Query) введите команду начала транзакции и обновления записи для группы 101

begin tran

use uch_proc

update gruppa set kol=35 where ng='101'

выполните запрос (! Execute ). Запись обновляется, но транзакция не завершена. Транзакция блокирует запись.

В новом окне введите код запроса для отображения записи из таблицы «gruppa» с номером '101'.

use uch_proc

select * from gruppa where ng='101'

Внизу на панели будет отображаться процесс «зависания» выполнения запроса: Executing query. При обновлении на запись была установлена «исключительная блокировка», которая не даёт возможность выполнится «разделяемой блокировке» чтения данных.

Если в новом окне редактора запросов ввести код, отображающий информацию о группах кроме 101, то он будет выполнен.

use uch_proc

select * from gruppa where ng<>'101'

Результат

ng kol pbal

102 32 4,5

103 29 4,8

104 35 4,4

105 45 4,8

.

.

Все остальные записи таблицы оказались не заблокированы.

В окне, где запускалась транзакция завершите её подтверждением : commit tran. После этого код запроса для отображения записи из таблицы «gruppa» с номером '101' будет выполнен.

Результат

ng kol pbal
101 35 4,5
Задание 2 “уровень изоляции транзакции «READUNCOMMITTED» “
В окне редактора нового запроса ( New Query) введите команду начала транзакции и обновления записи для группы 101

Транзакция № 1

begin tran

use uch_proc

update gruppa set kol=32 where ng='101'
выполните запрос (! Execute ). Запись обновляется, но транзакция не завершена.

В новом окне введите код запроса для отображения записи из таблицы «gruppa» с номером '101'. Для выборки данных запустим транзакцию с уровнем изоляции READUNCOMMITTED

Транзакция №2
set transaction isolation level read uncommitted

begin tran

use uch_proc

select * from gruppa where ng='101'
ng kol pbal
101 32 4,5

102 32 4,5

103 29 4,8

.

.

Транзакции с этим уровнем изоляции удалось прочитать «незафиксированные» данные.

В окне начала транзакции на обновление введём команду «отката» изменений: rollback tran.

Просмотрим данные из таблицы «группа» после отката транзакции

ng kol pbal
101 35 4,5

102 32 4,5

103 29 4,8

.

2. Резервирование данных и журналов транзакций
Одни из лучших способов управления резервной копией информации предоставляется SQL Server Enterprise Manager. Для начала работы с системой резервирования выберите базу данных, которую требуется сохранить, правой кнопкой мыши и выполните команду Tasks | Back Up. Появится диалоговое окно SQL Server Backup, где расположены вкладки General и Options.
Основными видами резервирования в SQL Server являются:

- Full (полная копия базы данных). В этом случае сохраняются любые действия над базой данных, производимые в процессе копирования, все незафиксированные транзакции и, естественно, все данные. Для создания первой копии необходимо выбрать именно этот вариант.

- Differential (дифференциальная копия). В этом случае SQL Server сохраняет только те части базы данных, которые изменились со времени создания полной копии и имеющиеся в журнале незафиксированные транзакции. В этом случае резервное копирование производится быстрее, чем в предыдущем, но полная копия должна существовать.

- Transaction log (копия журнала транзакций). В этом случае сохраняются все изменения, произошедшие в базе данных.
Для эффективной работы с базой данных, спроектированной в SQL Server, обязательно должны резервироваться следующие объекты:

  1. главная база данных;

  2. все базы данных, информацию из которых нельзя потерять;

  3. все журналы транзакций для каждой базы данных, которые работают в системе или подвергаются тестированию.

Если база данных была повреждена в силу некорректных действий пользователя или вследствие сбоев в работе аппаратной и программной части системы, то необходимо провести восстановление системы. Основными действиями для её восстановления являются:

  1. восстановление главной базы данных;

  2. восстановление последней полной копии базы данных, если она была сделана;

восстановление журналов транзакций, которые были зарезервированы пользователем, начиная с момента получения последней резервной/
Задание 3. Создать резервную копию базы данных ‘sklad’.


  • В выберите базу данных ‘sklad’, для которой нужно выполнить резервное копирование.

  • Выполните последовательность действий: TasksBack Up.

  • В результате чего на экран будет выведено диалоговое окно SQL Server Backup, содержащее вкладки General и Options.

  • В поле Database укажите имя базы данных, подлежащей резервированию; в поле Name – имя ее резервной копии; Description – задается описание, использование которого облегчит работу с резервируемой базой данных.

  • С помощью клавиши Tab перейдите в область Backup type и укажите тип создаваемой резервной копии (Full, Differential, Transaction log ).

  • Затем активизируйте область окна Destination, в которой указывается область диска или диск для размещения резервной копии базы данных.

  • Нажмите кнопку Add в группе Destination.

  • В диалоговом окне Select Backup Destination определите месторасположения резервной копии базы данных: в отдельном файле или на внешнем устройстве. Для сохранения резервной копии в отдельном файле достаточно указать полный путь доступа к нему; во втором случае – указывается и тип носителя, на котором будет сохраняться копия, и новое имя файла. Для возврата в диалоговое окно SQL Server Backup достаточно нажать кнопку ОК.




Рис 17 в диалоговое окно SQL Server Backup
Задание 4 Выполнить восстановления базы данных ‘sklad’.


  • В начале операции восстановления базы данных выполните следующую последовательность команд: TasksRestore ->Database.

  • После чего на экран будет выведено диалоговое окно Restore Database, которое также содержит вкладки General и Options.

  • Затем из предлагаемого списка выберите базу данных для восстановления.

  • После заполнения диалогового окна Restore Database нажмите на кнопку ОК. Если все параметры для восстановления базы данных указаны верно, то на экран будет выведено окно сообщений, в котором отображается процесс восстановления базы данных.


Контрольные задания


  1. Выполните резервное копирование индивидуальной базы данных.

  2. Выполните восстановление индивидуальной базы данных.

  3. В индивидуальной базе данных запустите транзакцию с уровнем изоляции «READCOMMITTED»

  4. В индивидуальной базе данных запустите транзакцию с уровнем изоляции READUNCOMMITTED



1   2   3   4   5   6   7   8   9


написать администратору сайта