- •2. Модели бд: простая двумерная структура, иерархическая структура, реляционная модель.
- •708 Тульский механический завод.
- •3. Понятия первичного и внешнего ключа.
- •9. Задача поиска информации. Индексные файлы, их структура и принцип работы, хеширование.
- •10. Проблема достоверности информации, семантические ошибки. Защита и сохранность бд.
- •11. Оперативные таблицы, справочники, словари.
- •12. Функции универсальной информационной системы (основные и вспомогательные). Документальные системы.
- •13. Структура интерфейса субд «Access». Объекты, режим конструктора. Создание таблицы в режиме конструктора, типы полей, свойства полей.
- •14. Определение связей между таблицами, типы связей, их обозначение и просмотр. Понятие целостности данных.
- •15. Присоединённые таблицы, ввод изменение и просмотр данных.
- •16. Создание простых форм. Типы форм. Элементы форм.
- •1 7. Понятие запроса, типы запросов, создание простого запроса.
- •18. Понятие отчёта, создание простых отчётов.
- •19. Анализ таблиц, понятие подстановки.
- •20. Создание связей и объединений в запросах. Ограничения в многотабличных запросах.
- •21. Создание связей для запросов. Объединения и их типы. Объединение в запросе двух копий одной таблицы (самообъединение).
- •22. Использование в запросе автоподстановки для автоввода данных. Создание параметризованных запросов.
- •23. Запросы, вносящие изменения. Проблемы, возникающие при работе с ними.
- •24. Создание и использование подчинённых форм (с помощью мастера и без него). Связывание главной и подчинённой форм. Создание итогов в подчинённых формах.
- •25. Язык sql, его основные команды и их структура, понятие предиката. Понятие транзакции.
- •26. Команда select, устранение избыточности данных - distinct. Определение выборки - where.
- •27. Операторы in, between... And, like, is null.
- •28. Применение функций агрегирования, специальные атрибуты в count, скалярные выражения.
- •29. Предложения group by и having.
- •30. Форматирование результатов запросов, упорядочивание выходных полей, команда order by.
- •32. Вложенные запросы (подзапросы). Связанные подзапросы, оператор exists.
- •33. Объединение множества запросов в один - предложение union.
- •34. Построение запросов для ввода, удаления и изменения значений полей. Вставка результата запроса в таблицу.
- •35. Создание, изменение и удаление таблиц. Понятие представления (View).
- •38. Терминология модели «Клиент-сервер». Логические компоненты модели.
32. Вложенные запросы (подзапросы). Связанные подзапросы, оператор exists.
Вложенные запросы (подзапросы)
SQL позволяет вкладывать запросы друг в друга. Обычно внутренний запрос (подзапрос) генерирует множество значений, которые тестируются на предмет истинности предиката.
Допустим, нам нужны все заказы продавца с именем Hoffman. Его номера мы не знаем.
SELECT *
FROM Orders
WHERE Snum = (SELECT Snum FROM Sales people
WHERE sname = ‘Hoffman’);
Если бы мы знали номер (допустим 1004), то мы бы прямо написали:
WHERE snum = 1004;
но 1004- это результат подзапроса.
Здесь есть тонкость. Вы должны быть уверены, что это значение единственное (результат подзапроса), иначе будет ошибка.
Если получится NULL, то ошибки не будет. Предикат сработает по UN Known так же как по FALSE и не выдаст ни одной строки в результате.
Для гарантии единственности результата в подзапросе после слова SELECT нужно поставить DISTINCT.
Еще одно ограничение стандарта ANSI- нельзя подзапрос поставить слева (перед запросом).
Связанные подзапросы
Возможность подзапросов порождает возможность ссылки в подзапросе на таблицу, имя которой указано в FORM внешнего запроса. В этом случае подзапрос повторяется многократно по количеству строк таблицы основного запроса.
Пример. Отыскать всех покупателей, сделавших заказы 3 октября 2006 г.
SELECT *
FROM Customers outer (алиас)
WHERE 10/03/06 IN (дата начала работы)
(SELECT odate
FROM Orders inner
WHERE outer. cnum = inner. cnum);
(Сюда подставляется строка- кандидат из таблицы внешнего запроса)
Оператор EXISTS
Существует специальный оператор, всегда использующий подзапрос в качестве аргумента - это оператор EXISTS.
Он используется, когда от подзапроса нужно лишь узнать дает он NULL или нет. Соответственно EXISTS возвращает «ложь» или «истину».
Например, нужно извлечь данные из таблицы Customers в том случае, если хотя бы один покупатель из нее из London’а:
SELECT cnum, cname, city
FROM Customers
WHERE EXISTS (SELECT *
FROM Customers
WHERE city = ‘London’);
В результате можно получить:
33. Объединение множества запросов в один - предложение union.
Это еще один способ комбинирования данных запросов. С помощью предложения UNION можно объединить выходные данные нескольких запросов в единое множество строк и столбцов.
Пример: Получить сведения обо всех продавцах (Sales people) и покупателях (Customers) Лондона как данные одного запроса:
SELECT snum, sname
FROM Sales people
WHERE city = ‘London’
UNION
SELECT cnum, cname
FROM Customers
WHERE city = ‘London’;
Заметим, что ; ставится только в самом конце. Заголовки столбцов в результате отсутствуют, поскольку это объединения столбцов snum с cnum и sname с cname.
Очевидно, что реализовать UNION можно только при соблюдении определенных условий:
- Столбцы, входящие в состав выходных данных исходных запросов должны быть совместимы по объединению - union compatible. Это значит, что в каждом из запросов может быть указано одинаковое число столбцов в порядке: первый, второй, третий и т.д., причем n-й столбец одного запроса должен быть сравним с n-м столбцом другого запроса.
- Если для n-го столбца одного запроса в UNION NULL-значения запрещены, то они запрещены и для других запросов в UNION.
- Об избыточности (замечание). UNION автоматически исключает из выходных данных дублирующие строки.
- Если в UNION применяется сортировка- ORDER BY, то приходится указывать не имя столбца, а его номер.
Например: ORDER BY 3- по возрастанию.