Spec-Zone.ru › DuckDB

Запрос SELECT

Выражение SELECT извлекает строки из базы данных.

Примеры

Выбор всех столбцов из таблицы tbl:

SELECT * FROM tbl;

Выбор строк из tbl:

SELECT j FROM tbl WHERE i = 3;

Выполнение агрегации, сгруппированной по столбцу i:

SELECT i, sum(j) FROM tbl GROUP BY i;

Выбор только первых 3 строк из tbl:

SELECT * FROM tbl ORDER BY i DESC LIMIT 3;

Объединение двух таблиц с помощью USING-оператор:

SELECT * FROM t1 JOIN t2 USING (a, b);

Использование индексов столбцов для выбора первого и третьего столбцов из таблицы tbl:

SELECT #1, #3 FROM tbl;

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

SELECT DISTINCT city FROM addresses;

Возврат STRUCT с помощью переменной строки:

SELECT d
FROM (SELECT 1 AS a, 2 AS b) d;

Синтаксис

Выражение SELECT извлекает строки из базы данных. Канонический порядок выражения SELECT следующий, менее распространённые операторы отступлены:

SELECT ⟨select_list⟩
FROM ⟨tables⟩
    USING SAMPLE ⟨sample_expression⟩
WHERE ⟨condition⟩
GROUP BY ⟨groups⟩
HAVING ⟨group_filter⟩
    WINDOW ⟨window_expression⟩
    QUALIFY ⟨qualify_filter⟩
ORDER BY ⟨order_expression⟩
LIMIT ⟨n⟩;

По желанию, выражение SELECT может быть дополнено WITH оператором.

Поскольку выражение SELECT настолько сложное, мы разделили диаграммы синтаксиса на несколько частей. Полная диаграмма синтаксиса приведена внизу страницы.

Оператор SELECT

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

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

Оператор FROM

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

Оператор SAMPLE

Оператор SAMPLE позволяет выполнять запрос на выборке из основной таблицы. Это может значительно ускорить обработку запросов в ущерб точности результата. Выборки также могут использоваться для быстрого просмотра моментального снимка данных при исследовании набора данных. Оператор SAMPLE применяется сразу после всего в операторе FROM (т. е. после всех объединений, но перед оператором where или агрегациями). Более подробная информация представлена на странице Примеры.

Оператор WHERE

Оператор WHERE определяет любые фильтры, которые необходимо применить к данным. Это позволяет выбрать только подмножество данных, которые вас интересуют. Логически оператор WHERE применяется сразу после оператора FROM.

Операторы GROUP BY и HAVING

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

Оператор WINDOW

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

Оператор QUALIFY

Оператор QUALIFY используется для фильтрации результата WINDOW функций.

Операторы ORDER BY, LIMIT и OFFSET

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

Список VALUES

Список VALUES — это набор значений, который предоставляется вместо оператора SELECT.

Идентификаторы строк

Для каждой таблицы псевдостолбец rowid возвращает идентификаторы строк на основе физического хранения.

CREATE TABLE t (id INTEGER, content VARCHAR);
INSERT INTO t VALUES (42, 'hello'), (43, 'world');
SELECT rowid, id, content FROM t;
rowid id content
0 42 hello
1 43 world

В текущем хранилище эти идентификаторы являются последовательными беззнаковыми целыми числами (0, 1, …) при отсутствии удалённых строк. Удаления вводят разрывы в rowid, которые могут быть позже восстановлены. Поэтому настоятельно рекомендуется не использовать rowid в качестве идентификаторов.

Подсказка Значения rowid стабильны в рамках транзакции.

Если существует столбец с пользовательским именем rowid, он затеняет псевдостолбец rowid.

Общие выражения таблиц

Полная диаграмма синтаксиса

Ниже приведена полная диаграмма синтаксиса оператора SELECT:

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

Spec-Zone.ru

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