- •Содержание
- •Часть I. Построение информационной системы 3
- •Часть II. Запросы к базам данных 18
- •1.Введение
- •2.Особенности субд Access
- •ЧастьI. Построение информационной системы Лабораторная работа № 1. Создание простейшей базы данных и экранных форм для работы с ней
- •1. Создание и заполнение базы данных
- •2. Создание экранных форм для просмотра, ввода и редактирования
- •3. Создание кнопочной формы
- •Лабораторная работа №2. Импорт и экспорт данных
- •Лабораторная работа № 3. Использование связей между таблицами для поддержания целостности данных и построения подчинённых форм
- •1. Определение связей между таблицами и создание подчинённых форм
- •2. Поддержка целостности базы данных, имеющей связи «многие ко многим»
- •3. Формы для просмотра и ввода данных, имеющих связи «многие ко многим»
- •4. Формы для ввода связей «многие ко многим»
- •Лабораторная работа № 4 Главная (управляющая) форма информационной системы «Кафедра»
- •ЧастьIi. Запросы к базам данных
- •Лабораторная работа № 5. Создание запросов с помощью конструктораAccess
- •Лабораторная работа № 6. Создание и изменение объектов базы данных средствамиSql
- •Лабораторная работа № 7. ОператорSelect
- •1. Выборка всех записей из одной таблицы
- •2. Оператор select … where. Выборка из таблицы записей, удовлетворяющих заданному условию
- •3. ПредложенияGroupbYиHaving
- •4. Многотабличные запросы
- •5. ПредикатNull. Подзапросы. Предикаты exists, any, all
- •6. Объединение результатов нескольких запросов –union. Создание таблицы из существующих таблиц –select…into
- •Лабораторная работа № 8. ОператорыInsert,update,delete
5. ПредикатNull. Подзапросы. Предикаты exists, any, all
Для выяснения смысла значения NULLрассмотрим пример. Пусть в городеNведётся база данных, в которой хранятся данные обо всех жителях, включая детей. Очевидно, что в графу «профессия» записи о ребёнке поместить нечего, так как у ребёнка ещё нет профессии. Графа профессия может оказаться пустой и в том случае, когда в момент занесения данных профессия жителя не была известна. Предполагается, что графа будет заполнена позже. Для неизвестного значения вSQLприменяется специальное обозначениеNULL. ЗначениеNULLимеют по умолчанию все поля, в которые ничего не заносилось.
NULLприменяется в полях всех типов и само не имеет типа. ЗначениеNULLможно использовать только в специальном предикатеIS NULL, имеющем следующий синтаксис:
<выражение> IS [NOT]NULL
Предикат IS NULL принимает значение «истина» только, если выражение равноNULL.
5.1.Для работы с NULL-значениями полей создайте в базе данных таблицуNullPusto, состоящую из двух текстовых полей длиной по 30 символов. Назовите поля «ФИО» и «адр». Запишите в таблицу следующие данные:
Поле |
Значение в поле «адр» | |
ФИО |
адр | |
А |
К |
“К” |
Б |
|
“” (две двойные кавычки) |
В |
|
NULL |
Г |
М |
“М” |
Д |
|
NULL |
Е |
|
“” (две двойные кавычки) |
Ж |
|
NULL |
Создайте и выполните следующие запросы к таблице NullPusto:
выбрать все записи с NULL;
выбрать все записи с “”;
выбрать все записи, в которых есть адреса;
выбрать все записи, в которых нет адресов;
подсчитать количество записей, содержащих NULL;
подсчитать количество записей, содержащих NULLи “”.
Сохраните запросы и покажите их преподавателю.
5.2.Подзапросы. С помощью SQL можно вкладывать один запросы внутрь другого. Внутренний запрос называют подзапросом. Обычно, внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса, определяющего верно оно или нет. Например, в следующем запросе выбираются из таблицы «Товары» те товары, цена которых меньше средней цены всех товаров таблицы:
SELECT * FROM Товары WHERE Цена<(SELECT AVG(Цена) FROM Товары);
Самостоятельнос помощью подзапроса выберите из таблицы «Заказано» заказы на товары с маркой «Pavlova». Марки товаров хранятся в таблице «Товары».
5.3.Предикат 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';
Самостоятельно, используя таблицы «Сотрудники», «Клиенты» и «Заказы», создайте и выполните запрос на выборку всех клиентов из Рио-Де-Жанейро, если был сделан хотя бы один заказ из Рио-Де-Жанейро, оформленый сотрудником Кротовым.
5.4.Предикаты количественного сравнения ANY, SOME и ALLимеют синтаксис
оператор сравнения {ANY|SOME|ALL} подзапрос.
ANYиSOME– синонимы.
Пример использования предиката ANY:
SELECT КодЗаказа FROM Заказы WHERE СтоимостьДоставки < ANY(SELECT СтоимостьДоставки FROM Заказы WHERE ГородПолучателя ='Ванкувер');
Для исследования особенностей предиката ANY проделайте следующее упражнение:
выберите из таблицы «Товары» цены товаров от поставщика с кодом 2; запишите эти цены;
используя ANY, выберите все товары, цены которых больше цен поставщика 2; сравните выбранные цены с записанными
повторите предыдущий пункт, иcпользуя вместо ANY предикат ALL; сравните результаты
Сохраните все выполненные запросы и покажите их преподавателю