Предикаты условия поиска

В условии поиска могут использоваться следующие предикаты: предикат сравнения, предикат BETWEEN, предикат IN, предикат LIKE, предикат NULL, предикат с квантором и предикат EXISTS.

Предикат IN определяется следующим образом:

<предикат IN>::= <выражение> [NOT] IN (<значение> [,<значение>...] |.<подзапрос>)

Значение предиката является истинным, когда значение левого операнда совпадает хотя бы с одним значением списка правого операнда. Использование ключевого слова NOT осуществляет отрицание результата.

Подзапрос- это запрос, используемый в предикате условия поиска. Результатом выполнения подзапроса является единственный столбец.

Предикат BETWEEN определяется следующим образом:

<предикат BETWEEN>::= <выражение> [NOT] BETWEEN <выражение> AND <выражение>

По определению результат x BETWEEN y AND z тот же самый, что результат логического выражения x>=y AND x<=z.

Предикат LIKE имеет следующий синтаксис:

<предикат LIKE>::= <имя столбца> [NOT] LIKE <шаблон>[ESCAPE <escape-символ>]

Значение предиката LIKE является истинным, если шаблон является подстрокой заданного столбца. При этом, если раздел ESCAPE отсутствует, то при составлении шаблона со строкой производится специальная интерпретация символов-заместителей шаблона: символ подчеркивания ("_") обозначает любой одиночный символ, символ процента ("%") обозначает последовательность произвольных символов произвольной длины (может быть нулевой), парные квадратные скобки представляют любой символ, записанный в скобках. Если же раздел ESCAPE присутствует и специфицирует некоторый одиночный символ x, то пары символов "x_" и "x%" представляют одиночные символы "_" и "%" соответственно.

Предикат NULL описывается синтаксическим правилом:

<предикат NULL>::= <имя столбца> IS [NOT] NULL

Значение "x IS NULL" является истинным, когда значение x неопределено.

Предикат EXISTS имеет следующий синтаксис:

<предикат EXISTS>::= EXISTS <подзапрос>

Значение предиката является истинным, когда результат вычисления подзапроса не пуст.

 

Агрегатные функции

Агрегатные функции (функции множества) в запросе предназначены для вычисления некоторого значения для заданного множества строк. Таким множеством строк может быть группа строк, если агрегатная функция применяется к сгруппированной таблице, или вся таблица. В языке SQL определены следующие агрегатные функции:

    • AVG - функция определения среднего значения;
    • MAX - функция определения максимального значения;
    • MIN - функция определения минимального значения;
    • SUM - функция суммирования значений;
    • COUNT - функция для подсчета числа строк или значений.

Грамматика агрегатных функций следующая:

<агрегатная функция>::= COUNT(*) | <distinct-функция> | <all-функция>

<distinct-функция>::= {AVG | COUNT | MAX | MIN | SUM} (DISTINCT <имя столбца>)

<all-функция>::= {AVG | MAX | MIN | SUM} ([ALL]<выражение>)

Вычисление функции COUNT(*) производится путем подсчета числа строк в заданном множестве. Функция типа distinct выполняет вычисления только над одним столбцом, а в вычислениях используются только уникальные значения столбца. При использовании функции типа all список значений формируется из значений арифметического выражения, вычисляемого для каждой строки заданного множества.

 

Операции реляционной алгебры

Большинство SQL-запросов требует одновременного обращения к нескольким таблицам. Часто такого рода запросы основываются на операциях реляционной алгебры, в частности, соединения, декартова произведения, объединения, пересечения и разности.

При соединении двух таблиц по некоторому условию образуется результирующая таблица, строки которой являются конкатенацией (сцеплением) строк первой и второй таблиц и удовлетворяют этому условию. Операцию соединения можно реализовать с использованием обычного SQL-запроса типа SELECT-FROM-WHERE. По стандарту ANSI операция соединения таблиц может указываться явно в разделе FROM. Синтаксис раздела FROM в этом случае следующий:

<раздел FROM>::= FROM <имя таблицы> [JOIN <имя таблицы> ON <условие соединения>...]

При выполнении декартова произведения двух таблиц производится таблица, строки которой являются конкатенацией строк первой и второй таблиц. Операцию декартова произведения можно реализовать с использованием SQL-запроса типа SELECT-FROM. По стандарту ANSI операция декартова произведения может указываться явно в разделе FROM с использованием ключевой фразы CROSS JOIN.

При выполнении операции объединения двух таблиц производится таблица, включающая все строки, входящие хотя бы в одну из таблиц-операндов. При этом число столбцов и типы данных этих столбцов должны быть одинаковыми для всех операндов. Для объединения результирующих таблиц операторов SELECT используется ключевое слово UNION.

Операция пересечения двух таблиц производит таблицу, включающую все строки, входящие в обе исходные таблицы.

Таблица, являющаяся разностью двух таблиц, включает все строки, входящие в таблицу - первый операнд, такие, что ни одна из них не входит в таблицу, являющуюся вторым операндом.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: