- •1) Базовые понятия реляционных баз данных.
- •Кортеж, отношение
- •2) Фундаментальные свойства отношений. Отсутствие кортежей-дубликатов
- •Отсутствие упорядоченности кортежей
- •Отсутствие упорядоченности атрибутов
- •Атомарность значений атрибутов
- •3) Теоретические языки запросов.
- •4) Реляционная алгебра.
- •Общая интерпретация реляционных операций:
- •Замкнутость реляционной алгебры и операция переименования
- •Специальные реляционные операции:
- •Операция ограничения
- •Операция взятия проекции
- •Операция соединения отношений
- •Операция деления отношений
- •5) Реляционное исчисление.
- •Кортежные переменные и правильно построенные формулы
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •6) Индексирование.
- •7) Связывание таблиц.
- •8) Контроль целостности связей.
- •1) Общая характеристика субд Access.
- •2) Создание таблиц и ввод данных средствами sql.
- •Определение столбца
- •Определение ограничений целостности таблицы
- •3) Выборка данных средствами sql.
- •Директива from
- •4) Предикаты.
- •Предикат all
- •Предикат distinct
- •Предикат distinctrow
- •Предикат null
- •Операция объединения inner join
- •5) Сложные запросы в sql и поддержка целостности данных. Групповые функции
- •Запросы на выполнение действия
4) Предикаты.
Синтаксис:
[ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM <исходная таблица>
Предикат сравнения
Синтаксис предиката сравнения определяется следующими правилами:
<comparison predicate> ::=
<value expression> <comp op>
{<value expression> | <subquery>}
<comp op> ::=
= | <> | < | > | <= | >=
Через "<>" обозначается операция "неравенства". Арифметические выражения левой и правой частей предиката сравнения строятся по общим правилам построения арифметических выражений и могут включать в общем случае имена столбцов таблиц из раздела FROM и константы. Типы данных арифметических выражений должны быть сравнимыми (например, если тип столбца a таблицы A является типом символьных строк, то предикат "a = 5" недопустим).
Предикат all
SELECT ALL ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО FROM Клиенты
Выбираются перечисленные поля из всех записей таблицы Клиенты.
Если предикат не указывается, то предполагается наличие предиката ALL. Предикаты служат для установки дополнительных фильтров после применения критериев директивы WHERE.
Предикат distinct
Используется в тех случаях, когда нужно включить в выборку только уникальные значения выбираемых полей.
SELECT DISTINCT Клиенты.Фирма
FROM Клиенты, [Заинтересованные лица]
WHERE Клиенты.Фирма = [Заинтересованные лица].Фирма;
Если в этом примере предикат DISTINCT не будет указан, в выборку будут включены названия фирм из всех записей таблицы клиентов, которые упоминаются в таблице заинтересованных лиц. В выборке могут появиться дублирующие записи. Предикат DISTINCT приведет к отбрасыванию дублирующих значений поля “Фирма”.
Предикат distinctrow
Используется, когда следует пропустить данные, представляющие собой полностью дублирующие записи в выборке, но не дублирование значений отдельных полей.
Таблица «Клиенты» не содержит дублирующих кодов клиентов, в то время как таблица «Заказы» может содержать дублирующие коды клиентов, поскольку один клиент может сделать несколько заказов. В приведенном ниже примере показано, как можно использовать предикат DISTINCTROW для того, чтобы составить список фирм, которые сделали хотя бы один заказ, не вдаваясь в подробности о количестве таких заказов:
SELECT DISTINCTROW [Название фирмы]
FROM Клиенты INNER JOIN Заказы
ON Клиенты.[Код клиента] = Заказы.[Код клиента]
ОRDER BY [Название фирмы];
DISTINCTROW применяется только в запросах, использующих несколько таблиц, при этом включаемые в выборку поля принадлежат лишь некоторым, но не всем таблицам, использующимся в запросе. DISTINCTROW игнорируется, если в запросе участвует только одна таблица.
Использование DISTINCTROW эквивалентно установке значения ДА для параметра Уникальные записи в окне свойств запроса при проектировании QBE-запросов в режиме конструирования.
Предикат TOP
Используется для включения в выборку определенного числа записей, расположенных в начале или в конце группы записей, отобранных с помощью критерия отбора WHERE и упорядоченных с помощью директивы ORDER BY.
Предположим, мы хотим отобрать 25 лучших студентов выпуска 2007 года:
SELECT TOP 25 [имя],[отчество],[фамилия]
FROM Студенты
WHERE [год выпуска] = 2007
ORDER BY [средний балл] DESC
Если не будет включена директива ORDER BY, то в выборку будут включены любые 25 студентов БД “Студенты”, удовлетворяющие условиям отбора, заданным в директиве WHERE.
Предикат TOP не разделяет записи, имеющие одинаковые значения при упорядочении. В примере, если двадцать пятый студент имеет точно такой же средний балл, как двадцать шестой и двадцать седьмой, то в выборку будут включены 27, а не 25 записей.
Можно также использовать ключевое слово PERCENT для того, чтобы включить в выборку определенный процент из верхней или нижней части диапазона, отсортированного в соответствии с директивой ORDER BY. Например, вместо 25 студентов можно запросить 10% курса:
SELECT TOP 10 PERCENT [имя],[отчество],[фамилия]
FROM Студенты
WHERE [год выпуска] = 2007
ORDER BY [средний балл] DESC
Используемое число в предикате ТОР должно быть целым без знака.
Использование TOP эквивалентно использованию параметра НАБОР ЗНАЧЕНИЙ в окне свойств запроса при проектировании QBE-запроса в режиме конструирования. Использование ключевого слова PERCENT эквивалентно использованию знака процента (%) при указании свойства НАБОР ЗНАЧЕНИЙ.
Предикат between
Предикат between имеет следующий синтаксис:
<between predicate> ::=
<value expression>
[NOT] BETWEEN <value expression> AND <value expression>
Результат "x BETWEEN y AND z" тот же самый, что результат "x >= y AND x <= z". Результат "x NOT BETWEEN y AND z" тот же самый, что результат "NOT (x BETWEEN y AND z)".
