Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БАЗЫ ДАННЫХ_2.doc
Скачиваний:
137
Добавлен:
09.03.2016
Размер:
666.11 Кб
Скачать

Лабораторная работа № 16. Предикат null. Подзапросы. Предикаты exists, any, all

Цель работы: научиться применять в запросах предикаты NULL,EXISTS,ANYиALL.

Предикат IS NULL.Для выяснения смысла значения NULL рассмотрим пример. Пусть в городе N ведётся база данных, в которой хранятся данные обо всех жителях, включая детей. Очевидно, что в графу «профессия» записи о ребёнке поместить нечего, так как у ребёнка ещё нет профессии. Графа профессия может оказаться пустой и в том случае, когда в момент занесения данных профессия жителя не была известна. Предполагается, что графа будет заполнена позже. Для неизвестного значения в SQL применяется специальное обозначение NULL. Значение NULL имеют по умолчанию все поля, в которые ничего не заносилось.

NULL применяется в полях всех типов и само не имеет типа. Значение NULL можно использовать только в специальном предикате IS NULL, имеющем следующий синтаксис:

<выражение> IS [NOT]NULL

Предикат IS NULL принимает значение «истина» только, если выражение равно NULL.

Для работы с NULL-значениями полей создайте в базе данных таблицу NullPusto, состоящую из двух текстовых полей длиной по 30 символов. Назовите поля «ФИО» и «адр». Введите в таблицу данные из табл. 3.

Создайте и выполните следующие запросы к таблице NullPusto:

  1. выбрать все записи с NULL;

  2. выбрать все записи с “”;

  3. выбрать все записи, в которых есть адреса;

  4. выбрать все записи, в которых нет адресов;

  5. подсчитать количество записей, содержащих NULL;

  6. подсчитать количество записей, содержащих NULL и “”.

Сохраните запросы и покажите их преподавателю.

Таблица 3

Поле

Значение в поле «адр»

ФИО

адр

А

К

“К”

Б

“” (две двойные кавычки)

В

NULL

Г

М

“М”

Д

NULL

Е

“” (две двойные кавычки)

Ж

NULL

Подзапросы.С помощью SQL можно вкладывать один запросы внутрь другого. Внутренний запрос называют подзапросом. Обычно, внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса, определяющего верно оно или нет. Например, в следующем запросе выбираются из таблицы «Товары» те товары, цена которых меньше средней цены всех товаров таблицы:

SELECT * FROM Товары WHERE Цена<(SELECT AVG(Цена) FROM Товары);

Самостоятельнос помощью подзапроса выберите из таблицы «Заказано» заказы на товары с маркой «Pavlova». Марки товаров хранятся в таблице «Товары».

Предикат EXISTSимеет синтаксис

EXISTS подзапрос

и принимает значение ИСТИНА (TRUE), если подзапрос содержит хотя бы одну строку.

В следующем запросе выбираются фамилии всех сотрудников, оформлявших заказы для клиента ANTON, при условии, что хотя бы один заказ для клиента ANTON был размещён в мае любого года.

SELECT DISTINCT b.Фамилия FROM Заказы a, Сотрудники b WHERE EXISTS (SELECT * FROM Заказы WHERE КодКлиента='ANTON' AND DatePart('m',ДатаРазмещения)=5) AND a.КодСотрудника = b.КодСотрудника AND a.КодКлиента='ANTON';

Самостоятельно, используя таблицы «Сотрудники», «Клиенты» и «Заказы», создайте и выполните запрос на выборку всех клиентов из Рио-Де-Жанейро, если был сделан хотя бы один заказ из Рио-Де-Жанейро, оформленый сотрудником Кротовым.

Предикаты количественного сравнения ANY, SOME и ALL имеют синтаксис

оператор сравнения {ANY | SOME | ALL} подзапрос.

ANY и SOME – синонимы.

Пример использования предиката ANY:

SELECT КодЗаказа FROM Заказы WHERE СтоимостьДоставки < ANY(SELECT СтоимостьДоставки FROM Заказы WHERE ГородПолучателя ='Ванкувер');

Для исследования особенностей предиката ANY проделайте следующее упражнение:

  1. выберите из таблицы «Товары» цены товаров от поставщика с кодом 2; запишите эти цены;

  2. используя ANY, выберите все товары, цены которых больше цен поставщика 2; сравните выбранные цены с записанными;

  1. повторите предыдущий пункт, иcпользуя вместо ANY предикат ALL; сравните результаты.

Сохраните все выполненные запросы и покажите их преподавателю

Соседние файлы в предмете Базы данных