
- •Select Извлекает строки из одной или нескольких таблиц
- •Синтаксис select [distinct]
- •Использование
- •Предложение select
- •Агрегатные функции
- •Count – возвращает количество строк, удовлетворяющих условию поиска
- •Соединения
- •Предложение where
- •B between a and c
- •Предложение group by
- •Предложение having
- •Union, intersect, except, и corresponding
- •Table Salespeople
- •Select * from Salespeople
- •Предложение order by
Предложение 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.