Spec-Zone.ru › DuckDB

Оператор SELECT

Оператор SELECT определяет список столбцов, которые будут возвращены запросом. Хотя он и находится в начале, логически выражения здесь выполняются только в конце. Оператор SELECT может содержать произвольные выражения, которые преобразуют вывод, а также агрегатные и оконные функции.

Примеры

Выбрать все столбцы из таблицы под названием table_name:

SELECT * FROM table_name;

Выполнить арифметические операции над столбцами в таблице и задать псевдоним:

SELECT col1 + col2 AS res, sqrt(col1) AS root FROM table_name;

Выбрать все уникальные города из таблицы addresses:

SELECT DISTINCT city FROM addresses;

Возвратить общее количество строк в таблице addresses:

SELECT count(*) FROM addresses;

Выбрать все столбцы, кроме столбца city, из таблицы addresses:

SELECT * EXCLUDE (city) FROM addresses;

Выбрать все столбцы из таблицы addresses, но заменить city на lower(city):

SELECT * REPLACE (lower(city) AS city) FROM addresses;

Выбрать все столбцы, соответствующие заданному регулярному выражению, из таблицы:

SELECT COLUMNS('number\d+') FROM addresses;

Вычислить функцию для всех заданных столбцов таблицы:

SELECT min(COLUMNS(*)) FROM addresses;

Для выбора столбцов с пробелами или специальными символами используйте двойные кавычки ("):

SELECT "Some Column Name" FROM tbl;

Синтаксис

SELECT Список

Оператор SELECT содержит список выражений, которые определяют результат запроса. Список выбора может ссылаться на любые столбцы в операторе FROM, и объединять их с помощью выражений. Поскольку результатом SQL-запроса является таблица, каждое выражение в операторе SELECT также имеет имя. Выражения могут быть явно переименованы с помощью оператора AS (например, expr AS name). Если имя не указано пользователем, выражения автоматически получают имена от системы.

Имена столбцов не чувствительны к регистру. Дополнительные сведения см. в разделе Правила чувствительности к регистру.

Выражения со звездочкой

Выбрать все столбцы из таблицы под названием table_name:

SELECT *
FROM table_name;

Выбрать все столбцы, соответствующие заданному регулярному выражению, из таблицы:

SELECT COLUMNS('number\d+')
FROM addresses;

Выражение со звездочкой (*) — это специальное выражение, которое расширяется до нескольких выражений на основе содержимого оператора FROM. В простейшем случае, * расширяется до всех выражений в операторе FROM. Столбцы также могут выбираться с использованием регулярных выражений или лямбда-функций. Дополнительные сведения см. на странице выражения со звездочкой.

Оператор DISTINCT

Выбрать все уникальные города из таблицы адресов:

SELECT DISTINCT city
FROM addresses;

Оператор DISTINCT может использоваться для возвращения только уникальных строк в результате — таким образом, любые дублирующиеся строки отфильтровываются.

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

Оператор DISTINCT ON

Выбрать только город с наибольшим населением для каждой страны:

SELECT DISTINCT ON(country) city, population
FROM cities
ORDER BY population DESC;

Оператор DISTINCT ON возвращает только одну строку на уникальное значение в наборе выражений, как определено в операторе ON. Если присутствует оператор ORDER BY, возвращаемой строкой является первая встреченная строка по критериям ORDER BY. Если оператор ORDER BY отсутствует, первая встреченная строка не определена и может быть любой строкой в таблице.

При запросах к большим наборам данных использование DISTINCT для всех столбцов может быть дорогостоящим. Поэтому рассмотрите возможность использования DISTINCT ON для столбца (или набора столбцов), который гарантирует достаточную степень уникальности результатов. Например, использование DISTINCT ON для ключевого столбца(ов) таблицы гарантирует полную уникальность.

Агрегаты

Возвратить общее количество строк в таблице адресов:

SELECT count(*)
FROM addresses;

Возвратить общее количество строк в таблице адресов, сгруппированных по городу:

SELECT city, count(*)
FROM addresses
GROUP BY city;

Агрегатные функции — это специальные функции, которые объединяют несколько строк в одно значение. Когда агрегатные функции присутствуют в операторе SELECT , запрос преобразуется в агрегатный запрос. В агрегатном запросе все выражения должны быть либо частью агрегатной функции, либо частью группы (как указано оператором GROUP BY clause).

Оконные функции

Генерировать столбец row_number, содержащий инкрементные идентификаторы для каждой строки:

SELECT row_number() OVER ()
FROM sales;

Вычислить разницу между текущим значением и предыдущим значением в порядке времени:

SELECT amount - lag(amount) OVER (ORDER BY time)
FROM sales;

Оконные функции — это специальные функции, которые позволяют вычислять значения относительно других строк в результате. Оконные функции обозначаются оператором OVER , который содержит описание окна. Описание окна определяет диапазон или контекст, в котором вычисляется оконная функция. Дополнительные сведения см. на странице оконные функции.

Функция unnest

Распаковать массив на один уровень:

SELECT unnest([1, 2, 3]);

Распаковать структуру на один уровень:

SELECT unnest({'a': 42, 'b': 84});

Функция unnest — это специальная функция, которая может использоваться совместно с массивами, списками или структурами. Функция unnest удаляет один уровень вложенности из типа. Например, INTEGER[] преобразуется в INTEGER. STRUCT(a INTEGER, b INTEGER) преобразуется в a INTEGER, b INTEGER. Функция unnest может использоваться для преобразования вложенных типов в обычные скалярные типы, что облегчает работу с ними.

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/query_syntax/select.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API