- •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. Терминология модели «Клиент-сервер». Логические компоненты модели.
26. Команда select, устранение избыточности данных - distinct. Определение выборки - where.
Команда SELECT
Все запросы в SQL конструируются на базе одной команды – SELECT. Ее можно расширять для выполнения сложных обработок.
SELECT name1, name2, … - список столбцов, представляемых в результате
FROM Table name; связаны
Перенос на другую строку ничего не меняет в команде.
*- означает все.
Если поменять местами порядок столбцов, то в таком порядке получается результат.
Устранение избыточности данных
Допустим, SELECT выбирает один столбец из таблицы. В нем могут быть повторяющиеся значения, которые не нужны в результате запроса. Если в запрос
SELECT snum
FROM Orders;
Если добавить аргумент DISTINCT, то
SELECT DISTINCT snum
FROM Orders;
Исключит дублирующиеся значения из результата.
Противоположным аргументом является ALL– он включает все значения (по умолчанию - ALL).
Определение выборки – предложение WHERE
Предложение WHERE команды SELECT позволяет определить предикат, условие, которое может быть либо истинным, либо ложным для каждой строки. Команды извлекает только те, для которых предикат имеет значение “истина”.
Предположим, нужно узнать имена всех продавцов в городе London:
SELECT sname, city
FROM Sales people
WHERE city = ‘London’;
Пример на числовое поле:
SELECT * FROM Customers
WHERE rating = 100;
Очевидно, что применение WHERE не исключает DISTINCT и наоборот.
Допустимы и другие операторы:
>, <, >=, <= , <>
‘а’ <’n’ означает, что ‘а’ предшествует ‘n’ в алфавитном порядке.
Булевы операторы: AND, OR, NOT
Пример:
SELECT * FROM Customers
WHERE city = ‘London’
AND rating > 200;
Пример на OR:
SELECT * FROM Customers
WHERE city = ‘London’
OR NOT rating > 200;
Или записи у которых город Лондон, или если rating не больше 200.
NOT должен предшествовать булеву выражению, значение которого он должен изме-нить (но не перед оператором сравнения rating NOT >200 ). SQL применяет NOT только к тому выражению, которое непосредственно следует за ним. Если нужно охватить больше, то ставятся круглые скобки:
… WHERE NOT (city = ‘London’ OR rating > 200);
Проследим логику в намеренно усложненном примере:
SELECT *
FROM Orders
WHERE NOT ((odate = 10/03/1990 AND snum > 1002)
OR amt > 2000.00);
Способ оценки сложного выражения следующий: оценить булево выражение, имеющее наибольшую глубину вхождения в круглые скобки, скомбинировать результаты в одно булево выражение, а затем связать его значение со значением выражений, имеющих меньшую глубину вхождения в скобки.
Рассмотрим приведенный пример:
Наибольшая глубина вхождения у предиката:
odate = 10/03/1990 AND snum > 1002, который дает “истину” для строк, удовлетворяющим обоим условиям. Обозначим его как В1. Это выражение соединено с amt > 2000,00 В2 с помощью OR и образует выражение В3. Оно полностью в круглых скобках перед NOT и вместе с ним образует В4 – предикат запроса.
27. Операторы in, between... And, like, is null.
Оператор IN
IN полностью определяет множество, к которому данное значение может принадлежать или не принадлежать. Допустим, нужно наити всех продавцов, расположенных либо в «Barcelona», либо в «London»:
SELECT * FROM Sales people
WHERE city = «Barcelona» OR city = «London»:
IN позволяет упростить:
SELECT * FROM Sales people
WHERE city IN («Barcelona», «London»);
Пример 2. Найти всех покупателей, обслуживаемых продавцами 1001, 1007, 1004.
SELECT * FROM Customers
WHERE snum IN (1001, 1007, 1004);
Но наиболее полезен IN в случае, когда в скобках расположен подзапрос (рассмотрен далее).
Оператор BETWEEN … AND
Вместо перечисления, как в IN, в BETWEEN задаются границы. Первое значение должно быть первым в алфавитном или числовом порядке (чувствителен к порядку).
SELECT * FROM Salespeople
WHERE comm BETWEEN .10 AND .12;
Граничные значения включаются в зону истинности. Если их нужно исключить, то:
SELECT * FROM Salespeople
WHERE (comm BETWEEN .10 and .12) and not
Comm IN (.10, .12);
Для символьных полей:
SELECT * FROM Salespeople
WHERE cname BETWEEN “A” AND “G”;
Заметим, что “A” и “G” строки и при сравнении неравные строки заполняются пробелами, но пробел предшествует символам в алфавитной кодировке, поэтому строка “Giovanni” не будет включена, поэтому нужно либо дать следующую букву- «Н», либо приписать несколько Z к G- “GZZ”, чтобы включить все имена на G.
Оператор LIKE
Используется для поиска подстрок и применим только к символьным (текстовым) полям. Для расширения зоны поиска применяются символы- шаблоны:
« _ » - заменяет один любой; % - последовательность, в том числе и нулевой длины
SELECT * FROM Customers
WHERE cname LIKE “G%”;
Иногда (достаточно редко) возникает проблема для самих этих символов (как искать их). Для ее решения существует возможность определить так называемый ESCAPE- символ. Предшествуя символу - шаблону ESCAPE-символ делает из него обычный символ. Он действует и на себя самого если указать два раза подряд.
SELECT * FROM Sales people
WHERE sname LIKE “%/-%” ESCAPE ‘/’;
определяет символ ‘/’ как служебный ESCAPE
Оператор IS NULL
Поскольку в полях может быть значение NULL, которые расшифровываются как «неизвестные», то и операции над ними дают «неизвестное» (например NOT). Поэтому нужен механизм фильтрования подмножества с NULL и это оператор IS NULL:
SELECT * FROM Customers WHERE city IS NULL;
Допустима противоположная конструкция IS NOT NULL. Еще пример на NOT с другими операторами:
WHERE NOT city IN (“London”, “Barcelona”);