Выражение FROM
Выражение FROM
указывает источник данных, с которыми должна работать остальная часть запроса. С точки зрения логики, выражение FROM
— это место, с которого начинается выполнение запроса.
Выражение FROM
может содержать одну таблицу, комбинацию из нескольких таблиц, объединенных с помощью выражения JOIN
, или другой запрос SELECT
в узле подзапроса.
В Tengri также имеется дополнительный синтаксис FROM
-first, который позволяет выполнять запрос без оператора SELECT
.
Синтаксис
SELECT ...
FROM objectReference [ JOIN objectReference [ ... ] ]
[ ... ]
где:
objectReference ::=
{
[<namespace>.]<object_name>
[ AT | BEFORE ( <object_state> ) ]
[ CHANGES ( <change_tracking_type> ) ]
[ MATCH_RECOGNIZE ]
[ PIVOT | UNPIVOT ]
[ [ AS ] <alias_name> ]
| <table_function>
[ PIVOT | UNPIVOT ]
[ [ AS ] <alias_name> ]
| ( VALUES (...) )
| [ LATERAL ] ( <subquery> )
[ [ AS ] <alias_name> ]
| DIRECTORY( @<stage_name> )
}
Параметры
-
[<namespace>.]<object_name>
Указывает имя объекта (таблицы или представления), к которому производится запрос.
-
<table_function>
Указывает системную табличную функцию, табличную функцию UDF или метод класса для вызова в выраженииFROM
.
-
VALUES
ВыражениеVALUES
может указывать литеральные значения или выражения, которые будут использоваться в выраженииFROM
. Это выражение может содержать псевдонимы таблиц и столбцов (не показаны на схеме выше).
-
[ LATERAL ] ( <subquery> )
Указывает встроенное представление в выраженииFROM
. Если используется необязательное ключевое словоLATERAL
, то подзапрос может ссылаться на столбцы из других таблиц (или представлений, или табличных функций), которые находятся в текущем выраженииFROM
и слева от встроенного представления.
-
DIRECTORY( @stage_name )
Указывает имя этапа, включающего таблицу каталогов.
-
[ AS ] <alias_name>
Указывает имя, заданное для объекта, к которому она относится. Может использоваться с любыми другими подзапросами в выраженииFROM
. ОператорAS
может опускаться.
-
JOIN
Указывает на выполнение соединения между двумя (или более) таблицами (или представлениями или табличными функциями). Соединение может быть внутренним внешним или иметь другой тип. Соединение может использовать ключевое словоJOIN
или альтернативный поддерживаемый синтаксис соединения.
Подробное описание см. в разделе ВыражениеJOIN
.
Примеры
-
Выбираем все столбцы из таблицы с именем
my_table
:SELECT * FROM my_table;
-
Выбираем все столбцы из таблицы, используя синтаксис
FROM
-first:FROM my_table SELECT *;
-
Выбираем все столбцы, используя синтаксис
FROM
-first и опуская выражениеSELECT
:FROM my_table;
-
Выбираем все столбцы из таблицы с именем
my_table
через псевдонимmt
:SELECT mt.* FROM my_table mt;
-
Используем префиксный псевдоним:
SELECT mt.* FROM mt: my_table;
-
Выбираем все столбцы из таблицы
my_table
в схемеmy_schema
:SELECT * FROM my_schema.my_table;
-
Выбираем столбец
i
из табличной функцииrange
, где первый столбец функции диапазона переименован вi
:SELECT t.i FROM range(1000) AS t(i);
-
Выбираем все столбцы из подзапроса:
SELECT * FROM (SELECT * FROM my_table);
-
Объединяем две таблицы:
SELECT * FROM my_table JOIN other_table ON my_table.key = other_table.key;
Подробное описание см. в разделе Выражение
JOIN
.
Синтаксис FROM
-first
Tengri поддерживает синтаксис FROM
-first, т. е. позволяет поместить выражение FROM
перед выражением SELECT
или полностью опустить выражение SELECT
. Продемонстрируем это на примере:
CREATE TABLE capitals (country VARCHAR, capital VARCHAR);
INSERT INTO capitals VALUES
('Russia', 'Moscow'),
('Italy', 'Rome'),
('Spain', 'Madrid'),
('France', 'Paris');
Синтаксис FROM
-first с выражением SELECT
Следующее выражение демонстрирует использование синтаксиса FROM
-first:
FROM capitals
SELECT *;
+---------+---------+
| country | capital |
+---------+---------+
| France | Paris |
+---------+---------+
| Italy | Rome |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+
Это эквивалентно:
SELECT *
FROM capitals;
+---------+---------+
| country | capital |
+---------+---------+
| France | Paris |
+---------+---------+
| Italy | Rome |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+
Синтаксис FROM
-first без выражения SELECT
Следующее выражение демонстрирует необязательность выражения SELECT
:
FROM capitals;
+---------+---------+
| country | capital |
+---------+---------+
| France | Paris |
+---------+---------+
| Italy | Rome |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+
Это тоже эквивалентно полному запросу:
SELECT *
FROM capitals;
+---------+---------+
| country | capital |
+---------+---------+
| France | Paris |
+---------+---------+
| Italy | Rome |
+---------+---------+
| Russia | Moscow |
+---------+---------+
| Spain | Madrid |
+---------+---------+