Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KURS_WIN / Оператор SELECT.doc
Скачиваний:
39
Добавлен:
10.04.2015
Размер:
69.12 Кб
Скачать

Предложение where

Предложение WHERE содержит предикат, который может включать одно или несколько выражений и принимать одно из трех значений: TRUE, FALSE или UNKNOWN. Сравнение значения NULL с другим значением (в том числе и NULL) дает результат UNKNOWN. Другие значения сравниваются в соответствии с последовательностями сортировки для строк текста, с порядком числовых значений для числовых типов, хронологическим порядком для данных типа дата-время или по величине значения (для данных типа INTERVAL). Сравнения осуществляются с помощью операторов =, <, <=, >, >= и <> (не равно). Применение таких операторов, как * (умножение) или | (конкатенация), зависит от типа данных. В большинстве случаев вместо простых выражений можно использовать конструкторы значений строк.

B between a and c

Это выражение эквивалентно: (A<=B) AND (B<=C). Параметр A должен быть меньше C. Выражение B BETWEEN С AND A будет интерпретироваться как (C<=B) AND (B<=A), и оно имело бы значение FALSE при значении выражения (A<=B) AND (B<=C) равном TRUE, за исключением случая, когда все три величины одинаковы. Если один из параметров равен NULL, значение предиката не определено.

A IN (C, D, …)

Это выражение будет истинным, если A равняется одному из значений, включенных в список.

A LIKE ‘строка’

В этом случае подразумевается, что A – строка символов, и операция заключается в поиске указанной подстроки. При этом можно использовать строку фиксированной длины или строку с шаблоном подстановки.

A IS NULL

Это выражение проверяет, является ли A значением NULL, В отличие от большинства других предикатов результат данного предиката может быть только TRUE или FALSE (не UNKNOWN).

A оператор_сравнения SOME | ANY подзапрос

SOME и ANY имеют одинаковый смысл. Результатом подзапроса является набор величин. Если для какого-нибудь значения X, получаемого из подзапроса, результат операции «А оператор_сравнения X» равняется TRUE, то предикат ANY также равен TRUE.

A оператор_сравнения ALL подзапрос

Исполняется так же, как и ANY, но для всех значений X, получаемого из подзапроса, результат операции «А оператор_сравнения X» должен равняться TRUE.

EXISTS подзапрос

Если в результате подзапроса найдена хотя бы одна строка, предикат равняется TRUE, в противном случае – FALSE. Результат никогда не может быть UNKNOWN. Это выражение имеет смысл только для зависимого подзапроса.

UNIQUE подзапрос

Если подзапрос не находит идентичных строк, то значение UNIQUE равняется TRUE, в противном случае – FALSE. В этом предикате подразумевается, что идентичные строки не содержат значения NULL. В противном случае строки не идентичны.

Предложение group by

Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, M1N, AVG и т.д.). Если это предложение отсутствует и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют запросу. В противном случае все столбцы списка SELECT, не вошедшие в агрегатную функцию, должны быть "сгруппированы" с помощью предложения GROUP BY. Все выходные строки запроса, которые сгруппированы по равенству значений столбцов, образуют единую группу (для GROUP BY все значения NULL трактуются, как равные). Агрегатная функция будет применяться к каждой из таких групп. Рассмотрим простой пример:

SELECT snum, AVG (amount), MAX (amount)

FROM Salespeople

GROUP BY snum;

В этом запросе предполагается, что таблица Salespeople имеет, как минимум, два столбца (snum и amount) и, скорее всего, содержит записи с платежными транзакциями. Этa таблица имеет одну строку па каждую транзакцию, содержащую имя продавца и сумму (если это базовая таблица, а не представление, то она должна иметь первичный ключ). Все транзакции с одинаковыми значениями snum (имя продавца) образуют группу, и на выходе SELECT вычисляются максимальные и средние значения для каждой группы. Если бы в SELECT присутствовал столбец с датой, то можно было бы вычислять эти цифры для каждой конкретной латы. Для этого нужно было бы задать дату в качестве группирующего столбца, и тогда агрегатные функции будут вычисляться для каждой комбинации значений (продавец-дата). Такую группировку можно реализовать с помощью соединения, при записи которого необходимо использовать имена таблиц или связанные .префиксы вместе с именами столбцов (чтобы избежать неоднозначности).

Если используется предложение COLLATE FROM, то полученная последовательность сортировки будет определена для выходного столбца, полученного с помощью группировки. После COLLATE FROM должен следовать атрибут приведения, сданный и явном виде. Естественно, что предложение COLLATE применимо только к сгруппированному столбцу типа CHARACTER.

Соседние файлы в папке BD_KURS_WIN