Задание необходимо выполнить до 08.05.2020!! Так же сдать предыдущее задание.

Занятие 06.05.2020

Лекция

Тема: SQL запросы на объединение записей и на изменение данных в таблицах.

Цель: изучение материала по теме

Задачи:

- изучение основ создания запросов на объединение

- изучение основ создания запросов на изменение БД

- изучение правил построения запросов на объединение записей

- изучение правил построения запросов на изменение данных

Ход работы:

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

Необходимо подробно записывать все примеры выполнения запросов с таблицами-результатами.

После составления конспекта лекции в тетради необходимо самостоятельно придумать 10 примеров запросов по рассмотренным в лекции видам запросов. Запросы необходимо записать в тетрадь. Запросы нужно придумывать к базе данных, которая рассматривается в лекционных примерах.

В качестве отчета по выполненному заданию необходимо прислать фото написанных самостоятельных запросов к БД.

 

Задание необходимо выполнить до 08.05.2020!! Так же сдать предыдущее задание.

 

Готовые работы можно сдать:

- личным сообщением в ВК https://vk.com/lena_lexy

- отправить по электронной почте lexy 83@ mail . ru

 

 

Запросы на объединение записей

Операция объединения реализуется фразой Union, которая объединяет два независимых подзапроса. Эта операция объединяет два множества в одно, значит, элементы исходных множеств должны быть однотипными. Понятно, что в каждом подзапросе должно быть одинаковое количество столбцов, и они должны быть сравнимы. С точки зрения стандарта ANSI сравнимость сводится к тому, чтобы тип и размер столбцов из каждой пары совпадали. Другое ограничение связано с допустимостью null-значений. Если они запрещены в одном подзапросе, они должны быть запрещены и в другом. Нельзя использовать Union в подзапросах, а в объединяемых выборках – агрегатные функции. В конкретных реализациях могут быть и другие ограничения.

При объединении из результата автоматически исключаются тождественные строки, в отличие от команды Select. Чтобы их оставить, следует использовать вариант Union All.

Для получения требуемого порядка строк в выборке используют, как обычно, фразу Order By, она ставится единственный раз, причем, в конце.

Пример

Выбрать номера покупателей, значимость которых выше 200 или которые сделали заказ на сумму более 3000:

Select ном_пок From Покупатель Where значимость>200

Union

Select ном _ пок From Заказ Where сумма >3000 Order By ном _ пок ;

Конец примера

Объединение – операция над двумя операндами, поэтому для объединения более чем двух выборок используют скобочные конструкции:

(Select < выборка 1> Union [All] Select < выборка 2>)

Union [All]

(Select < выборка 3> Union [All] Select < выборка 4>) …

Очевидно, что различный порядок выполнения действий при использовании Union и Union All может привести к разным результатам.

 

Изменение базы данных

Понятие «изменение базы данных» имеет, по крайней мере, две стороны: изменение содержания существующей БД и изменение ее структуры, в том числе – создание и уничтожение таблиц.

Изменение содержания

Добавление данных в таблицу выполняется командой Insert:

Insert Into < таблица > Values (< знач 1>, < знач 2>, …< знач N>);

Здесь номер каждого значения соответствует номеру атрибута в схеме отношения. Согласно стандарту ANSI, пустое значение (null) не может быть записано в таблицу непосредственно. Однако оно возникает, если воспользоваться ключевой формой записи, при которой указывается два списка: список атрибутов и список их значений. В этом случае могут быть указаны не все атрибуты:

Insert Into <таблица> (<атр1>, <атр2>, …<атрk>)

Values (<знач1>, <знач2>, …<значk>);

Вместо прямого указания значений можно использовать запрос. Как и ранее, существует два варианта: с заполнением всех атрибутов без их перечисления и заполнение части атрибутов с их указанием в списке.

Insert Into < таблица >

Select … From … Where …;

Insert Into < таблица > (< атр 1>, < атр 2>, …< атр k>)

Select … From … Where …;

Очевидные замечания.

1. Таблица уже должна существовать.

2. Полученные значения по смыслу должны соответствовать схеме таблицы или списку атрибутов.

3. Типы (домены) выбираемых значений должны соответствовать типам (доменам) атрибутов таблицы.

4. Добавленные записи не должны нарушать уникальность ключа.

 

Следует обратить внимание на одну важную особенность добавления. Там есть удобные варианты, позволяющие не перечислять значения, а загрузить их из переменных памяти или массива: Insert Into <таблица> From Memvar. Если один из атрибутов объявлен как автоматически наращиваемый (autoincrement), при добавлении данных регистрируется ошибка: этот атрибут считается доступным только для чтения. И тогда действительно приходится перечислять все значения. Это неудобно, так как при добавлении в схему базы данных одного атрибута или замене его имени потребуется проверить и исправить все места, где может быть изменение. В противном случае изменение производилось бы автоматически, правда, вероятность ошибки была бы больше.

И еще одна возможность: в качестве значения <значi> может быть задано любое допустимое выражение.

Пример

1. Добавить заказ в таблицу заказов:

Insert Into Заказ Values (337, 5500, 28, 17, ’07.10’);

2. Добавить итоги в таблицу итогов, если она заранее создана:

Insert Into Итоги (дата, итог)

Select дата, SUM(сумма) From Заказ Group By дата;

Конец примера

Исключение строк из таблицы производится командой Delete. Существует два варианта команды: для очистки таблицы целиком и для удаления найденных строк.

Delete From < таблица >;

Delete From < таблица > Where < условие >;

Изменение значений полей производится командой Update, которая имеет, как и команда удаления, две модификации. В первом варианте меняются значения атрибутов во всей таблице, во втором – в пределах выборки:

Update <таблица>

Set <атр1>=<знач1>, <атр2>=<знач2>, …<атрk>=<значk>;

Update <таблица>

Set <атр1>=<знач1>, <атр2>=<знач2>, …<атрk>=<значk>

Where <условие>;

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

Пример

1. Увеличить значимость всех покупателей из Тулы на 10:

Update Покупатель Set значимость=значимость+10

Where город=’Тула’;

2. Увеличить комиссионные всем продавцам, имеющим более трех покупателей, на 0,1:

Update Продавец Set комиссия=комиссия+0.1

Where 3<(Select COUNT(Distinct ном _ пок ) From Заказ

Where Заказ.ном_прод=Продавец.ном_прод);

Конец примера