Министерство образования и науки Российской Федерации
Федеральное государственное автономное образовательное
учреждение высшего образования
Национальный исследовательский университет “МИЭТ”
Факультет Прикладных информационных технологий
Дисциплина: Базы данных
Отчёт по 8 лабораторной работе
Использование объединяющих и вложенных запросов и корректирующих операторов языка SQL
Цель работы: изучить возможности оператора UNION и вложенных запросов и получить практические навыки использования операторов языка SQL, изменяющих данные, хранящиеся в БД.
Выполнил:
Студент П-21
Татьяна
Москва, 2019
Контрольные вопросы
Язык SQL предусматривает возможность объединения результатов двух или более запросов в одну таблицу с помощью оператора UNION.
SELECT Фамилия + Имя, Должность
FROM Сотрудники
WHERE Город = 'Москва'
UNION
SELECT ОбращатьсяК, Должность
FROM Клиенты
WHERE Город = 'Москва'
Оператор UNION можно использовать многократно, чтобы объединить результаты трех или более запросов, указывая с помощью круглых скобок порядок выполнения операторов:
SELECT * FROM A
UNION ALL (SELECT*FROM B UNION SELECT*FROM C)
Чтобы таблицы результатов запроса можно было объединить с помощью оператора UNION, они должны удовлетворять следующим требованиям:
1) таблицы должны содержать одинаковое число столбцов;
2) тип данных каждого столбца первой таблицы должен совпадать с типом данных соответствующего столбца во второй таблице;
3) ни одна из таблиц не может быть отсортирована с помощью предложения ORDER BY, однако объединенные результаты запроса можно отсортировать.
Если в результирующей объединенной таблице необходимо сохранить повторяющиеся строки, сразу за ключевым словом UNION следует указать ключевое слово ALL.
Использование предложения ORDER BY в операторах SELECT, составляющих оператор UNION, запрещено.
3. Какие запросы называются вложенными?
Вложенным, или подчиненным, запросом (подзапросом), называется запрос, содержащийся в списке возвращаемых столбцов или предложениях WHERE или HAVING другого оператора.
В чем отличие подзапроса от оператора 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 Фамилия, Имя)
Язык SQL позволяет изменять содержащуюся в ней информацию с помощью корректирующих запросов на добавление, удаление и обновление.
Добавление новых данных.
Существует два способа добавления новых строк в БД:
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 Доставка)
Добавление строки в таблицу «Предприятие», список столбцов не полный.
INSERT INTO Предприятие (НомерПредприятия, Название)
VALUES (8, 'Предприятие8');
Добавление строк в таблицу «Оптовая_База» с указанными именами столбцов в произвольном порядке.
INSERT INTO Оптовая_База (Адрес, Название, НомерБазы)
VALUES ('Речная15', Название, 7)
Добавление строки в таблицу «Товар» без списка столбцов.
INSERT INTO Товар
VALUES (7, Название)
Добавление в таблицу «Оптовая_База» сведений о базе, у которой адрес и название будут такими же как у Предприятия5.
INSERT INTO Оптовая_База ( Адрес, Название )
SELECT Адрес, Название
FROM Предприятие
WHERE Название = 'Предприятие5';
Изменяет название организации в таблице «Транспортная_Организация»
UPDATE Транспортная_Организация
SET Название = ‘Viki’
WHERE Название = ‘Gruzovik’
Обновление строк в таблице «Доставка»
UPDATE Доставка
SET Расходы = Расходы + 100
Сократить на 2 срок доставки для ТО, расходы на доставку в которых превышают 1500.