- •Введение в модель данных sql
- •1. Лекция: Язык баз данных sql: общее введение, типы данных и средства определения доменов Введение
- •Краткая история языка sql
- •Структура языка sql
- •Типы данных sql
- •Tочные числовые типы
- •Истинно целые типы
- •Точные типы, допускающие наличие дробной части
- •Приближенные числовые типы
- •Типы символьных строк
- •Типы битовых строк
- •Типы даты и времени
- •Тип даты
- •Типы времени
- •Типы временной метки
- •Типы времени и временной метки с временной зоной
- •Типы временных интервалов
- •Булевский тип
- •Типы коллекций
- •Типы массивов
- •Типы мультимножеств
- •Анонимные строчные типы
- •Типы, определяемые пользователем
- •Ссылочные типы
- •Средства определения, изменения определения и отмены определения доменов
- •Определение домена
- •Примеры определений доменов
- •Изменение определения домена
- •Примеры изменения определения домена
- •Отмена определения домена
- •Неявные и явные преобразования типа или домена
- •Неявные преобразования типов в sql
- •Явные преобразования типов или доменов и оператор cast
- •Заключение
- •2. Лекция: Язык баз данных sql: средства определения базовых таблиц и ограничений целостности
- •Введение
- •Средства определения, изменения и ликвидации базовых таблиц
- •Определение базовой таблицы
- •Определение столбца
- •Значения столбца по умолчанию
- •Ограничения целостности столбца
- •Определение табличного ограничения
- •Табличное ограничение первичного или возможного ключа
- •Проверочное табличное ограничение
- •Табличное ограничение внешнего ключа
- •Разновидности способов сопоставления значений внешнего и возможного ключей
- •Поддержка ссылочной целостности и ссылочные действия
- •Примеры определений базовых таблиц
- •Изменение определения базовой таблицы
- •Добавление, изменение или удаление определения столбца
- •Примеры изменения определения столбца
- •Изменение набора табличных ограничений
- •Примеры изменения набора табличных ограничений
- •Отмена определения (уничтожение) базовой таблицы
- •Средства определения и отмены общих ограничений целостности
- •Определение общих ограничений целостности
- •Отмена определения общего ограничения целостности
- •Немедленная и откладываемая проверка ограничений
- •Заключение
- •3. Лекция: Язык баз данных sql: общая характеристика оператора select и организация списка ссылок на таблицы в разделе from
- •4. Лекция: Язык баз данных sql: предикаты раздела where оператора select
- •Предикат сравнения
- •Примеры запросов с использованием предиката сравнения
- •Предикат between
- •Примеры запросов с использованием предиката between
- •Предикат null
- •Примеры запросов с использованием предиката null
- •Предикат in
- •Примеры запросов с использованием предиката in
- •Предикат like
- •Примеры запросов с использованием предиката like
- •Предикат similar
- •Примеры запросов с использованием предиката similar
- •Предикат exists
- •Примеры запросов с использованием предиката exists
- •Предикат unique
- •Примеры запросов с использованием предиката unique
- •Предикат overlaps
- •Примеры запросов с использованием предиката overlaps
- •Предикат сравнения с квантором
- •Примеры запросов с использованием предиката сравнения с квантором
- •Предикат match
- •Примеры запросов с использованием предиката match
- •Предикат distinct
- •Примеры запросов с использованием предиката distinct
- •Заключение
- •5. Лекция: Язык баз данных sql: группировка и условия раздела having, порождаемые и соединенные таблицы
- •Логические выражения раздела having
- •Предикаты сравнения
- •Предикат between
- •Предикат null
- •Предикат in
- •Предикат like
- •Предикат exists
- •Предикат unique
- •Предикаты сравнения с квантором
- •Предикат distinct
- •Более сложные конструкции оператора выборки
- •Соединенные таблицы
- •Формальные определения
- •Примеры соединений разного вида
- •Примеры запросов с использованием соединенных таблиц
- •6. Лекция: Язык баз данных sql: средства формулировки аналитических и рекурсивных запросов
- •Возможности формулирования аналитических запросов
- •Раздел group by rollup
- •Агрегатная функция grouping
- •Раздел group by cube
- •Рекурсивные запросы
- •Определения, относящиеся к рекурсии
- •Рекурсивные запросы с разделом with
- •Раздел search
- •Раздел cyrcle
- •Рекурсивные представления
- •Заключение
- •7. Лекция: Язык баз данных sql: средства манипулирования данными
- •Введение
- •Базовые средства манипулирования данными
- •Оператор insert для вставки строк в существующие таблицы
- •Вставка всех строк указанной таблицы
- •Вставка явно заданного набора строк
- •Вставка строк результата запроса
- •Оператор update для модификации существующих строк в существующих таблицах
- •Оператор delete для удаления строк в существующих таблицах
- •Представления, над которыми возможны операции обновления
- •Представления, допускающие применение операций обновления, в стандарте sql/92
- •Представления, допускающие применение операций обновления, в стандарте sql:1999
- •Критерии применимости операций обновления
- •Правила функциональных зависимостей
- •Раздел with check option определения представления
- •Режимы проверки cascaded и local
- •Примеры результатов действия раздела with check option
- •Исторический очерк
Предикат match
Предикат позволяет сформулировать условие соответствия строчного значения результату табличного подзапроса. Синтаксис определяется следующим правилом:
match_predicate ::= row_value_constructor
MATCH [ UNIQUE ] [ SIMPLE | PARTIAL | FULL ]
query_expression
Степень первого операнда должна совпадать со степенью таблицы-результата выражения запроса. Типы данных столбцов первого операнда должны быть совместимы с типами соответствующих столбцов табличного подзапроса. Сравнение пар соответствующих значений производится аналогично тому, как это специфицировалось для предиката сравнения.
Пусть x обозначает строку-первый операнд. Тогда:
Если отсутствует спецификация вида сопоставления или специфицирован тип сопоставления SIMPLE, то:
если значение некоторого столбца x является неопределенным, то значением условия является true;
если в x нет неопределенных значений, то:
если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s в такая, что x = s, то значением условия является true;
если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что x = s, то значением условия является true;
в противном случае значением условия является false.
Если в условии присутствует спецификация PARTIAL, то:
если все значения в x являются неопределенными, то значение условия есть true;
иначе:
если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s, такая, что каждое отличное от неопределенного значение x равно соответствующему значению s, то значение условия есть true;
если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что каждое отличное от неопределенного значение x равно соответствующему значению s, то значение условия есть true;
в противном случае значение условия есть false.
Если в условии присутствует спецификация FULL, то:
если все значения в x неопределенные, то значение условия есть true;
если ни одно значение в x не является неопределенным, то:
если не указано UNIQUE, и в результате выражения запроса существует (возможно, не уникальная) строка s, такая, что x = s, то значение условия есть true;
если указано UNIQUE, и в результате выражения запроса существует уникальная строка s, такая, что x = s, то значение условия есть true;
в противном случае значение условия есть false.
в противном случае значение условия есть false.
Примеры запросов с использованием предиката match
Все примеры этого пункта основаны на запросе "Найти номера служащих и номера их отделов для служащих, для которых в отделе со "схожим" номером работает служащий со "схожей" датой рождения" c некоторыми уточнениями.
SELECT EMP_NO, DEPT_NO
FROM EMP
WHERE (DEPT_NO, EMP_BDATE) MATCH SIMPLE
(SELECT EMP1.DEPT_NO, EMP1.EMP_BDATE
FROM EMP EMP1
WHERE EMP1.EMP_NO <> EMP.EMP_NO);
Пример 14.25. (html,txt)
Этот запрос вернет данные о служащих, про которых:
либо неизвестны номер отдела илидата рождения (или и то, и другое);
либо в отделе данного служащего работает по крайней мере еще один человек с той же датой рождения.
Если использовать предикат MATCH UNIQUE SIMPLE, то мы получим данные о служащих, про которых:
либо неизвестны номер отдела илидата рождения (или и то, и другое);
либо в отделе данного служащего работает еще один человек с той же датой рождения.
SELECT EMP_NO, DEPT_NO
FROM EMP
WHERE (DEPT_NO, EMP_BDATE) MATCH PARTIAL
(SELECT EMP1.DEPT_NO, EMP1.EMP_BDATE
FROM EMP EMP1
WHERE EMP1.EMP_NO <> EMP.EMP_NO);
Пример 14.26. (html,txt)
Этот запрос вернет данные о служащих, про которых:
либо неизвестны номер отдела идата рождения;
либо неизвестен номер отдела, но имеется по крайней мере еще один человек с той же датой рождения;
либо неизвестна дата рождения, но в отделе данного служащего работает по крайней мере еще один человек;
либо известны и номер отдела, и дата рождения, и в отделе данного служащего работает по крайней мере еще один человек с той же датой рождения.
Если использовать предикат MATCH UNIQUE PARTIAL, то мы получим данные о служащих, про которых:
либо неизвестны номер отдела идата рождения;
либо неизвестен номер отдела, но имеется еще один человек с той же датой рождения;
либо неизвестна дата рождения, но в отделе данного служащего работает еще один человек;
либо известны и номер отдела, и дата рождения, и в отделе данного служащего работает еще один человек с той же датой рождения.
SELECT EMP_NO, DEPT_NO
FROM EMP
WHERE (DEPT_NO, EMP_BDATE) MATCH UNIQUE FULL
(SELECT EMP1.DEPT_NO, EMP1.EMP_BDATE
FROM EMP EMP1
WHERE EMP1.EMP_NO <> EMP.EMP_NO);
Пример 14.27. (html,txt)
Этот запрос вернет данные о служащих, о которых:
либо неизвестны номер отдела идата рождения;
либо в отделе данного служащего работает по крайней мере еще один человек с той же датой рождения.
Если использовать предикат MATCH UNIQUE SIMPLE, то мы получим данные о служащих, о которых:
либо неизвестны номер отдела идата рождения;
либо в отделе данного служащего работает еще один человек с той же датой рождения.