Подзапросы. Предикаты EXISTS, ANY, ALL
Предикат IS NULL.
Создать в базе данных таблицу NullPusto, состоящую из двух текстовых полей длиной по 30 символов. Назвать поля «ФИО» и «адр».
CREATE Table NullPusto
(ФИО CHAR (30),
Адр CHAR (30));
Ввести в таблицу данные из табл. 1.
Таблица 1
Поле | Значение в поле «адр» | |
ФИО | адр | |
А | К | “К” |
Б | “” (две двойные кавычки) | |
В | NULL | |
Г | М | “М” |
Д | NULL | |
Е | “” (две двойные кавычки) | |
Ж | NULL |
выбрать все записи с NULL
SELECT *
FROM NullPusto
WHERE Адр="NULL";
выбрать все записи с “”
SELECT *
FROM NullPusto
WHERE Адр="";
выбрать все записи, в которых есть адреса
SELECT *
FROM NullPusto
WHERE NOT Адр='NULL' AND Адр<>'';
выбрать все записи, в которых нет адресов
SELECT *
FROM NullPusto
WHERE Адр='NULL' OR Адр='';
подсчитать количество записей, содержащих NULL
SELECT COUNT(*)
FROM NullPusto
WHERE Адр='NULL';
подсчитать количество записей, содержащих NULL и “”
SELECT Count(*)
FROM NullPusto
WHERE Адр='NULL' OR Адр='';
Подзапросы.
Выбрать из таблицы «Заказано» заказы на товары с маркой «Pavlova». Марки товаров хранятся в таблице «Товары».
SELECT *
FROM Заказано
WHERE КодТовара=(SELECT КодТовара FROM Товары WHERE Марка='Pavlova');
Предикат EXISTS.
Используя таблицы «Сотрудники», «Клиенты» и «Заказы», создать и выполнить запрос на выборку всех клиентов из Рио-Де-Жанейро, если был сделан хотя бы один заказ из Рио-Де-Жанейро, оформленый сотрудником Кротовым.
SELECT DISTINCT b.Название
FROM Сотрудники AS a, Клиенты AS b
WHERE EXISTS (SELECT * FROM Клиенты WHERE Город='Рио-де-Жанейро'
AND a.Фамилия='Кротов');
Предикаты количественного сравнения ANY, SOME и ALL.
Выбрать из таблицы «Товары» цены товаров от поставщика с кодом 2; записать эти цены;
SELECT Цена
FROM Товары
WHERE КодПоставщика=2;
Полученные данные (1): 947,25р., 765,00р., 990,00р., 960,75р.
Используя ANY, выбрать все товары, цены которых больше цен поставщика 2; сравнить выбранные цены с записанными;
SELECT *
FROM Товары
WHERE Цена>ANY(SELECT Цена FROM Товары WHERE КодПоставщика=2);
Были выбраны цены больше, чем наименьшая цена из полученных данных (1).
Повторить предыдущий пункт, используя вместо ANY предикат ALL; сравнить результаты.
SELECT *
FROM Товары
WHERE Цена>ALL(SELECT Цена FROM Товары WHERE КодПоставщика=2);
Были выбраны цены больше, чем наибольшая цена из полученных данных (1).
Лабораторная работа № 17. Объединение результатов нескольких запросов – UNION. Создание таблицы из существующих таблиц – SELECT … INTO
Предложение UNION
Выбрать из таблиц «Клиенты» и «Сотрудники» следующие данные: фамилию и имя; должность, город. В дополнительном столбце указать, из какой таблицы выбрана запись.
SELECT ALL Должность, Город, 'Заказы' AS Источник
FROM Клиенты
UNION SELECT ALL Фамилия, Имя, 'Клиенты' AS Источник
FROM Сотрудники;
Создание таблицы из существующих таблиц с помощью SELECT … INTO.
С помощью SELECT … INTO создать таблицу «Клиенты2», содержащую данные из таблицы «Клиенты» обо всех клиентах, живущих в Лондоне.
SELECT DISTINCT * INTO Клиенты2
FROM Клиенты
WHERE Город='Лондон';
Лабораторная работа № 18. Операторы INSERT, UPDATE, DELETE
Вставка в таблицу одной или нескольких строк с помощью оператора INSERT.
Добавить в таблицу «писатель» Толстого А.Н..
INSERT INTO Писатель (КодП, ФИО)
VALUES (10, 'А.Н.Толстой');
Добавить в таблицу «книга» - роман «Сёстры».
INSERT INTO Книга (КодКн, Наим, Автор)
VALUES (10, 'Сёстры', 10);
Изменение (редактирование) данных в таблице с помощью оператора UPDATE.
С помощью оператора UPDATE занести в таблицу «книга» все недостающие значения полей.
UPDATE книга SET Автор = 10
WHERE КодКн=8;
Указали в таблице книга недостающий код писателя.
Удаление строк таблицы с помощью оператора DELETE.
С помощью оператора DELETE удалить из таблицы «писатель» Тургенева.
DELETE *
FROM писатель
WHERE КодП=4;