SELECT¶
DQL-команда SELECT
используется для получения, фильтрации и
преобразования кортежей из таблиц в запросе. Если никакие данные не
удовлетворяют условиям фильтрации, то в ответе вернется только описание
метаданных колонок без самих кортежей. В контексте распределенной
системы, команда SELECT
в Picodata получает информацию из всех частей
таблицы, которая может храниться на нескольких узлах кластера.
Примечание
Кортежи в выводе идут в том порядке, в каком их отдают узлы Picodata. Гарантии порядка не предоставляются.
Синтаксис¶
Проекция¶
Диаграмма
Сканирование¶
Диаграмма
Выражение¶
Диаграмма
Литерал¶
Диаграмма
Параметры¶
-
Псевдоним — позволяет переопределить названия получаемых столбцов в запросах. Псевдоним вставляется после опционального слова
AS
и может содержать произвольный текст со следующими ограничениями: он не должен начинаться с цифры и не может содержать пробелов и специальных служебных символов (кроме знака подчеркивания). -
DISTINCT — возвращаются только уникальные значения кортежей.
-
INNER JOIN — к колонкам каждого кортежа из внутренней (правой) части запроса присоединяются только колонки тех кортежей внешней (левой) части, которые удовлетворяют условию соединения
ON
. Если во внешней части не нашлось подходящего кортежа, то внутренний кортеж не попадает в результат. -
LEFT OUTER JOIN — к колонкам каждого кортежа из внешней (левой) части запроса присоединяются только колонки тех кортежей внутренней (правой) части, которые удовлетворяют условию соединения
ON
. Если во внутренней части не нашлось подходящего кортежа, то вместо значений его колонок будет подставленNULL
. -
WHERE — условие фильтрации при сканировании таблицы или подзапроса.
-
GROUP BY — группировка данных по списку колонок или выражений.
-
HAVING — фильтрация уже сгруппированных данных.
-
ORDER BY — сортировка результата запроса по одной или нескольким колонкам. Используется для упорядочивания получаемого набора данных. Колонки могут быть указаны как по их именам, так и по порядковым номерам. Если не указан тип упорядочивания (
ASC
— по возрастанию,DESC
— по убыванию), то по умолчанию подразумевается возрастание значений. -
UNION — объединение результатов с одинаковым набором колонок из нескольких DQL-запросов. При этом результат не содержит дубликаты строк.
-
UNION ALL — объединение результатов с одинаковым набором колонок из нескольких DQL-запросов. При этом результат может содержать дубликаты строк.
-
EXCEPT DISTINCT — исключение результатов с одинаковым набором колонок одного запроса из другого. При этом результат не содержит дубликаты строк.
См. также:
Примеры¶
Тестовые таблицы
Примеры использования команд включают в себя запросы к тестовым таблицам.
Получение данных из таблицы с фильтрацией¶
SELECT name from items WHERE stock > 1000;
Получение данных без повторов¶
SELECT DISTINCT type FROM warehouse;
Внутреннее соединение¶
SELECT
c.item,
c.type,
a.stock
FROM warehouse AS c
JOIN items AS a
ON c.id = a.id
Внешнее левое соединение¶
SELECT
c.item,
c.type,
a.stock
FROM warehouse AS c
LEFT JOIN items AS a
ON TRUE
Множественные соединения¶
SELECT
warehouse.item,
items.stock,
orders.amount
FROM warehouse
INNER JOIN items
ON warehouse.item = items.name
LEFT OUTER JOIN orders
ON items.name = orders.item
Агрегация¶
SELECT COUNT(*) FROM warehouse WHERE type = 'heavy';
Группировка с предварительной фильтрацией¶
SELECT type, COUNT(*) FROM warehouse
WHERE id < 5
GROUP BY type;
Упорядочивание результата по убыванию значений в третьей колонке¶
SELECT * FROM items
ORDER BY 3 DESC
Разнонаправленное упорядочивание результата по двум явно именованным колонкам¶
SELECT * FROM items
ORDER BY name ASC, stock DESC
Объединение только уникальных строк из результатов двух запросов¶
SELECT item FROM warehouse
UNION
SELECT item FROM orders
Объединение только уникальных строк из результатов многих запросов¶
SELECT item FROM warehouse
UNION
SELECT item FROM orders
UNION
SELECT name FROM items
Полное объединение результатов с использованием подзапроса¶
SELECT item FROM warehouse WHERE type = 'heavy'
UNION ALL
SELECT * FROM (
SELECT name FROM items
UNION ALL
SELECT item FROM orders WHERE amount > 400
)
Последовательное исключение результатов одного запроса из другого¶
SELECT item FROM orders
EXCEPT
SELECT item FROM warehouse
Последовательное исключение результатов с использованием подзапроса¶
SELECT item FROM warehouse
EXCEPT
SELECT * FROM (
SELECT item
FROM orders
EXCEPT
SELECT NAME
FROM items
WHERE stock > 200
)