Select — выполняет выборку (извлечение отдельных строк) и/или проекцию (извлечение отдельных столбцов) данных и возвращает результирующий набор.
Простой вариант:
1 2 | SELECT [ALL | DISTINCT] column_list FROM {table1 [tab_aliasl]},... |
Параметры:
- table1 — имя таблицы выборки
- tab_alias1 — псевдоним таблицы (альтернативное сокращенное имя таблицы)
- column_list может быть:
- символ звездочка (*) — все столбцы
- явное указание имен столбцов
- имя и псевдоним: column_name [AS] column_heading
- выражение
- системная или агрегатная функция
- ALL | DISTINCT
- ALL (по умолчанию) — все строки, включая дубликаты
- DISTINCT — только уникальные строки проекции (позволяет исключить повторяющиеся значения строк, при этом дубликатами считаются именно строки проекции целиком, а не отдельные столбцы)
Полный синтаксис:
1 2 3 4 5 6 7 | SELECT select_list [INTO new_table] FROM table [WHERE search_condition] [GROUP BY group_by_expression] [HAVING search_condition] [ORDER BY order_expression [ASC | DESC]]; |
Предложения должны следовать в указанном порядке.
Предложение WHERE — выборка строк. Должно содержать логическое выражение, которое проверяется для каждой строки. Могут использоваться любые операторы равенства и сравнения:
- = равно
- <> (или !=) не равно
- < меньше чем
- > больше чем
- >= больше чем или равно
- <= меньше чем или равно
- !> не больше чем
- !< не меньше чем
Частью условия в предложении WHERE может быть выражение.
Условия могут быть составными (содержать несколько условий). Создаются такие условия с помощью логических операторов AND, OR и NOT. При соединении условий оператором AND возвращаются только те строки, которые удовлетворяют обоим условиям. При соединении двух условий оператором OR возвращаются все строки таблицы, которые удовлетворяют одному или обоим этим условиям. NOT меняет логическое значение на противоположное. Операторы имеют разный приоритет (NOT самый высокий, OR самый низкий), с помощью скобок его можно изменять.
Оператор IN позволяет определить соответствует ли значение первого операнда (например, значение столбца) одному из значений из произвольного списка во втором операнде (оператор равнозначен последовательности условий, соединенных оператором OR):
1 | WHERE test_column [NOT] IN (value1, value2,…) |
Можно использовать с оператором NOT.
Оператор BETWEEN позволяет определить находится ли значение первого операнда в пределах диапазона, заданного вторым операндом (может быть заменен двумя сравнениями, объединенными оператором AND):
1 | WHERE test_column [NOT] BETWEEN low_value AND high_value |
Ни один из перечисленных операторов не может отобрать значения, равные или неравные NULL, т.к. любые сравнения с NULL всегда возвращают FALSE (NULL не равен даже самому себе). Для выборки строк, содержащих или не содержащих значение NULL используется оператор IS [NOT] NULL.
Оператор LIKE используется для сопоставления с образцом. Он применим только для строковых типов данных и дат:
1 | column [NOT] LIKE 'pattern' |
В образце можно использовать следующие специальные символы:
- % (знак процента) — обозначает последовательность любых символов любой длины
- _ (символ подчеркивания) — обозначает любой один символ
- [] — задают диапазон символов
- ^ — отрицание диапазона символов
Для экранирования спецсимволов их можно вставить в квадратные скобки или использовать оператор ESCAPE.
Предложение ORDER BY задает порядок сортировки результирующего набора:
1 | ORDER BY {[col_name | col_number [ASC | DESC]]} , ... |
В предложении OFFSET указывается количество строк результата, которые нужно пропустить в отображаемом результате. Это количество вычисляется после сортировки строк предложением ORDER BY.
В предложении FETCH NEXT указывается количество удовлетворяющих условию WHERE и отсортированных строк, которое нужно возвратить.