Материал: Отчёт_лаб_8

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство образования и науки Российской Федерации

Федеральное государственное автономное образовательное

учреждение высшего образования

Национальный исследовательский университет “МИЭТ”

Факультет Прикладных информационных технологий

Дисциплина: Базы данных

Отчёт по 8 лабораторной работе

Использование объединяющих и вложенных запросов и корректирующих операторов языка SQL

Цель работы: изучить возможности оператора UNION и вложенных запросов и получить практические навыки использования операторов языка SQL, изменяющих данные, хранящиеся в БД.

Выполнил:

Студент П-21

Татьяна

Москва, 2019

Контрольные вопросы

  1. Как объединить результаты выполнения нескольких запросов?

  • Язык SQL предусматривает возможность объединения результатов двух или более запросов в одну таблицу с помощью оператора UNION.

SELECT Фамилия + Имя, Должность

FROM Сотрудники

WHERE Город = 'Москва'

UNION

SELECT ОбращатьсяК, Должность

FROM Клиенты

WHERE Город = 'Москва'

  • Оператор UNION можно использовать многократно, чтобы объединить результаты трех или более запросов, указывая с помощью круглых скобок порядок выполнения операторов:

SELECT * FROM A

UNION ALL (SELECT*FROM B UNION SELECT*FROM C)

  1. Какие ограничения существуют при использовании оператора union?

  • Чтобы таблицы результатов запроса можно было объединить с помощью оператора UNION, они должны удовлетворять следующим требованиям:

1) таблицы должны содержать одинаковое число столбцов;

2) тип данных каждого столбца первой таблицы должен совпадать с типом данных соответствующего столбца во второй таблице;

3) ни одна из таблиц не может быть отсортирована с помощью предложения ORDER BY, однако объединенные результаты запроса можно отсортировать.

  • Если в результирующей объединенной таблице необходимо сохранить повторяющиеся строки, сразу за ключевым словом UNION следует указать ключевое слово ALL.

  • Использование предложения ORDER BY в операторах SELECT, составляющих оператор UNION, запрещено.

3. Какие запросы называются вложенными?

Вложенным, или подчиненным, запросом (подзапросом), называется запрос, содержащийся в списке возвращаемых столбцов или предложениях WHERE или HAVING другого оператора.

  1. В чем отличие подзапроса от оператора SELECT?

Подзапрос – законченный оператор SELECT, внедрённый в тело другого оператора SELECT.

5. Что называется внешней ссылкой?

Внешняя ссылка представляет собой имя столбца, принадлежащего таблице, указанной в предложении FROM главного запроса, и не входящего ни в одну из таблиц, перечисленных в предложении FROM вложенного запроса.

6. Какой подзапрос называется связанным?

Если во вложенном запросе имеется внешняя ссылка, то он называется связанным подзапросом.

7. В чем особенность выполнения связанного подзапроса?

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

8. Какие виды условий поиска с подзапросами предусмотрены в языке SQL? Приведите примеры.

  • Сравнение с результатом вложенного запроса. Сравнивает значение выражения с одним значением, возвращённым вложенным запросом (=, <> , < , <= , > , >=);

SELECT * FROM Поставщики

WHERE Название = (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)

  • Проверка на принадлежность результатам вложенного запроса. Проверяет значение выражения на равенство с одним из значений множества, возвращённого вложенным запросом.

SELECT * FROM Поставщики

WHERE Название NOT IN (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)

  • Проверка на существование. Проверяет наличие строк в таблице результатов вложенного запроса.

SELECT * FROM Поставщики

WHERE EXISTS (SELECT Название FROM Клиенты WHERE Клиенты.Название = Поставщики.Название)

  • Многократное сравнение. Сравнивает значение выражения с каждым из значений множества, возвращаемого вложенным запросом.

SELECT Фамилия, Имя, "оформил", COUNT(КодЗаказа) , "заказов"

FROM Сотрудники, Заказы

WHERE Сотрудники.КодСотрудника = Заказы.КодСотрудника

GROUP BY Фамилия, Имя

HAVING COUNT(КодЗаказа)

>= ALL

(SELECT COUNT(КодЗаказа)

FROM Сотрудники, Заказы

WHERE Сотрудники.КодСотрудника = Заказы.КодСотрудника GROUP BY Фамилия, Имя)

9. Какие операторы языка sql относятся к корректирующим?

Язык SQL позволяет изменять содержащуюся в ней информацию с помощью корректирующих запросов на добавление, удаление и обновление.

10. Приведите правила записи и перечислите особенности выполнения корректирующих операторов.

  • Добавление новых данных.

Существует два способа добавления новых строк в БД:

1) однострочный оператор INSERT позволяет добавить в таблицу новую строку;

2) многострочный оператор INSERT обеспечивает извлечение строк из одной части БД и добавление их в другую таблицу.

  • Если список столбцов опущен, то последовательность значений данных должна точно соответствовать порядку столбцов в таблице.

INSERT INTO Доставка

VALUES (1234, 'ООО Быструм', '(495) 124-3195')

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

INSERT INTO Доставка (Название, Телефон, КодДоставки)

VALUES ('Турбо', '(495) 529-3175', 1235)

  • При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов оператора INSERT, СУБД автоматически присваивает значение NULL либо значение, заданное по умолчанию при описании структуры таблицы.

INSERT INTO Доставка (Телефон, Название)

VALUES ('(496) 924-3376', 'Скороход')

  • Обновление существующих данных.

Наименьшей единицей информации, которую можно обновить в реляционной БД является значение одного столбца в одной строке. Для обновления значения одного или нескольких столбцов в выбранных строках одной таблицы предназначен оператор UPDATE.

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

Оператор UPDATE может одновременно обновить столбцы в нескольких строках, соответствующих условию поиска. Строки, для которых условие поиска имеет значение TRUE, обновляются, а строки, для которых условие поиска имеет значение FALSE или NULL, не обновляются.

Выражение не может включать в себя какие-либо агрегатные функции или запросы. Если выражение содержит ссылку на один из столбцов целевой таблицы, то для вычисления выражения используется значение этого столбца в текущей строке, которое было перед обновлением. То же самое справедливо для ссылок на столбцы в предложении WHERE.

Например, можно повысить в должности сотрудников, оформивших более 100 заказов:

UPDATE Сотрудники SET Должность = 'Топ-менеджер' WHERE 100 < (SELECT COUNT (*) FROM Заказы

WHERE Сотрудники.КодСотрудника = Заказы.КодСотрудника)

  • Удаление существующих данных.

Наименьшей единицей информации, которую можно удалить из реляционной БД, является строка.

Для удаления выбранных строк из одной таблицы используется оператор DELETE, в предложении FROM которого указывается таблица, содержащая удаляемые строки, а в предложении WHERE указывается условие, которому должны соответствовать удаляемые строки, например:

DELETE FROM Доставка

WHERE КодДоставки=1235

Если предложение WHERE отсутствует в записи оператора DELETE, то такой оператор удаляет из таблицы все строки.

В предложении WHERE условие поиска может содержать вложенный запрос. Например, прежде чем удалять информацию из таблицы ДОСТАВКА, необходимо из таблицы ЗАКАЗЫ удалить все строки, связанные с таблицей ДОСТАВКА:

DELETE FROM Заказы

WHERE Заказы.Доставка IN (SELECT КодДоставки FROM Доставка)

Лабораторная работа

  1. Добавление строки в таблицу «Предприятие», список столбцов не полный.

INSERT INTO Предприятие (НомерПредприятия, Название)

VALUES (8, 'Предприятие8');

  1. Добавление строк в таблицу «Оптовая_База» с указанными именами столбцов в произвольном порядке.

INSERT INTO Оптовая_База (Адрес, Название, НомерБазы)

VALUES ('Речная15', Название, 7)

  1. Добавление строки в таблицу «Товар» без списка столбцов.

INSERT INTO Товар

VALUES (7, Название)

  1. Добавление в таблицу «Оптовая_База» сведений о базе, у которой адрес и название будут такими же как у Предприятия5.

INSERT INTO Оптовая_База ( Адрес, Название )

SELECT Адрес, Название

FROM Предприятие

WHERE Название = 'Предприятие5';

  1. Изменяет название организации в таблице «Транспортная_Организация»

UPDATE Транспортная_Организация

SET Название = ‘Viki’

WHERE Название = ‘Gruzovik’

  1. Обновление строк в таблице «Доставка»

UPDATE Доставка

SET Расходы = Расходы + 100

  1. Сократить на 2 срок доставки для ТО, расходы на доставку в которых превышают 1500.