Выражение SELECT
Выражение SELECT — это DML-оператор, который применяется для извлечения данных из таблицы или представления.
SELECT определяет список колонок, которые будут возвращены запросом. Хотя оно стоит первым в запросе, логически элементы этого выражения выполняются последними. SELECT может содержать произвольные выражения, преобразующие вывод, а также агрегатные и оконные функции.
Синтаксис
[ WITH ... ]
SELECT [ DISTINCT ]
{ * | <col_name> | <expression> [ [AS] <alias> ] [,...] }
[ FROM ... ]
[ WHERE ... ]
[ GROUP BY ... ]
[ HAVING ... ]
[ QUALIFY ... ]
[ UNION ... ]
[ INTERSECT ... ]
[ EXCEPT ... ]
[ ORDER BY ... ]
[ OFFSET ... ]
[ LIMIT ...]
Параметры
-
DISTINCT
Указывает, следует ли выполнять удаление дубликатов в наборе результатов.
Подробное описание см. в разделе ВыражениеDISTINCT.
-
*(звездочка)
Звездочка является сокращением, обозначающим, что в выводе должны быть все колонки указанного объекта.
Подробное описание см. в разделе Выражение со звездочкой*.
-
<col_name>
Указывает идентификатор колонки.
-
<expression>
Указывает выражение, которое вычисляется как определенное значение для любой заданной строки.
-
<alias>
Задает псевдоним колонки в результирующей таблице.Не назначайте такой псевдоним колонки, который будет совпадать с именем другой колонки, на которую есть ссылка в запросе. Например, если вы выбираете колонки с именами prod_idиproduct_id, не назначайте псевдонимproduct_idколонкеprod_id.См. также раздел Оператор
AS
В списке колонок поддерживается конечная запятая. Например, поддерживается следующее выражение SELECT:
SELECT
name,
department,
FROM employees;
Примеры
-
Выбираем все колонки из таблицы с именем
my_table:SELECT * FROM my_table; -
Выполняем арифметические действия над колонками таблицы и указываем псевдоним:
SELECT column_1 + column_2 AS sum, sqrt(column_1) AS sq_root FROM my_table; -
Выбираем все уникальные имена из таблицы
employees(работники):SELECT DISTINCT name FROM employees; -
Выводим общее количество строк в таблице
employeesс помощью агрегатной функцииcount:SELECT count(*) FROM employees; -
Используем двойные кавычки (
"), чтобы выбрать колонки с пробелами или специальными символами:SELECT "Фамилия Имя Отчество" FROM employees;
Список колонок SELECT
Запрос SELECT содержит список колонок или выражений над колонками, которые определяют результат запроса. Этот список может ссылаться на любые колонки в выражении FROM и объединять их с помощью выражений. Поскольку результатом запроса SELECT является таблица, каждая колонка в списке SELECT имеет имя. Имена могут быть явно названы с помощью оператора AS (например, expr AS name). Если пользователь не указал имя, то колонки в результатах именуются системой автоматически.
| Имена колонок не чувствительны к регистру, если они задаются без кавычек. |
Выражение со звездочкой *
Выражение со звездочкой (*) — это специальное выражение, которое расширяется до множества выражений на основе содержимого выражения FROM. В простейшем случае * расширяется до всех выражений в выражении FROM.
-
Выбираем все колонки из таблицы с именем
my_table:SELECT * FROM my_table;
Выражение DISTINCT
Выражение DISTINCT можно использовать для получения только уникальных строк в результате — таким образом, все дубликаты будут отфильтрованы.
-
Выбираем все уникальные имена из таблицы
employees:SELECT DISTINCT name FROM employees;
Запросы, начинающиеся с SELECT DISTINCT, выполняют дедупликацию, которая является дорогостоящей операцией. Поэтому используйте DISTINCT только в случае необходимости.
|
Агрегатные функции
Агрегатные функции — это функции, которые объединяют значения из нескольких строк в одно. Когда агрегатные функции присутствуют в выражении SELECT, запрос превращается в агрегатный запрос. В агрегатном запросе все выражения должны быть либо частью агрегатной функции, либо частью группы (как указано в выражении GROUP BY).
-
Получаем общее количество строк в таблице сотрудников:
SELECT count(*) FROM employees; -
Получаем общее количество строк в таблице сотрудников, сгруппированных по отделам:
SELECT department, count(*) FROM employees GROUP BY department;
Подробное описание см. в разделе Агрегатные функции.
Оконные функции
Оконные функции — это функции, которые выполняют вычисления для набора строк, некоторым образом связанных с текущей строкой. Вызов оконной функции всегда содержит выражение OVER, следующее за названием и аргументами оконной функции. Выражение OVER определяет, как именно нужно разделить строки запроса для обработки оконной функцией.
-
Получаем колонку
row_number, содержащую инкрементные идентификаторы для каждой строки таблицы зарплат:SELECT row_number() OVER () FROM salaries; -
Вычисляем разницу между текущей и предыдущей суммой в порядке убывания времени:
SELECT amount - lag(amount) OVER (ORDER BY time) FROM salaries;
Подробное описание см. в разделе Оконные функции.