diff options
author | robot-piglet <[email protected]> | 2025-07-14 19:10:40 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-07-14 19:24:38 +0300 |
commit | a879d14c72e4b65963ba1f7acd1f4a84063a1b55 (patch) | |
tree | d99b5add298f542b5e22b9e8bd23bd385f9cd5d0 | |
parent | 715b4fe85a26bfd10539ee2c640cccb2977be349 (diff) |
Intermediate changes
commit_hash:50f62a6c3fe0fa8fbf1231f6f14d7434b83fa964
-rw-r--r-- | yql/essentials/docs/en/syntax/select/index.md | 60 | ||||
-rw-r--r-- | yql/essentials/docs/ru/syntax/select/index.md | 50 |
2 files changed, 88 insertions, 22 deletions
diff --git a/yql/essentials/docs/en/syntax/select/index.md b/yql/essentials/docs/en/syntax/select/index.md index 449c7e80020..949414b8440 100644 --- a/yql/essentials/docs/en/syntax/select/index.md +++ b/yql/essentials/docs/en/syntax/select/index.md @@ -76,6 +76,66 @@ is interpreted as (query1 UNION query2) UNION ALL query3 ``` +Intersection of several `SELECT` statements (or subqueries) can be computed using `INTERSECT` and `INTERSECT ALL` keywords. + +```yql +query1 INTERSECT query2 +``` + +Intersection of more than two queries is interpreted as a left-associative operation, that is + +```yql +query1 INTERSECT query2 INTERSECT query3 +``` + +is interpreted as + +```yql +(query1 INTERSECT query2) INTERSECT query3 +``` + +Difference between several `SELECT` statements (or subqueries) can be computed using `EXCEPT` and `EXCEPT ALL` keywords. + +```yql +query1 EXCEPT query2 +``` + +Difference between more than two queries is interpreted as a left-associative operation, that is + +```yql +query1 EXCEPT query2 EXCEPT query3 +``` + +is interpreted as + +```yql +(query1 EXCEPT query2) EXCEPT query3 +``` + +Different operators (`UNION`, `INTERSECT`, and `EXCEPT`) can be used together in a single query. In such cases, `UNION` and `EXCEPT` have equal, but lower precedence than `INTERSECT`. + +For example, the following queries: + +```yql +query1 UNION query2 INTERSECT query3 + +query1 UNION query2 EXCEPT query3 + +query1 EXCEPT query2 UNION query3 +``` + +are interpreted as: + +```yql +query1 UNION (query2 INTERSECT query3) + +(query1 UNION query2) EXCEPT query3 + +(query1 EXCEPT query2) UNION query3 +``` + +respectively. + If the underlying queries have one of the `ORDER BY/LIMIT/DISCARD/INTO RESULT` operators, the following rules apply: * `ORDER BY/LIMIT/INTO RESULT` is only allowed after the last query diff --git a/yql/essentials/docs/ru/syntax/select/index.md b/yql/essentials/docs/ru/syntax/select/index.md index 200c77c9b5c..ef6a5cf6e50 100644 --- a/yql/essentials/docs/ru/syntax/select/index.md +++ b/yql/essentials/docs/ru/syntax/select/index.md @@ -31,7 +31,7 @@ SELECT 2 + 2; * вычисляются выражения в `SELECT`; * выражениям в `SELECT` назначаются имена заданные алиасами; * к полученным таким образом колонкам применяется top-level [DISTINCT](distinct.md); -* таким же образом вычисляются все подзапросы в операторах [UNION [ALL]](operators.md#union), [INTERSECT [ALL]](operators.md#intersect), [EXCEPT [ALL]](operators.md#except) и выполняется их объединение, пересечение, исключение соответственно; в текущей реализации комбинация `INTERSECT [ALL]`, `EXCEPT [ALL]` и `UNION [ALL]` не поддерживается, также не поддерживается использование более одного оператора `INTERSECT [ALL]` или `EXCEPT [ALL]` в `SELECT` выражении; +* таким же образом вычисляются все подзапросы в операторах [UNION [ALL]](operators.md#union), [INTERSECT [ALL]](operators.md#intersect), [EXCEPT [ALL]](operators.md#except) и выполняется их объединение, пересечение, исключение соответственно; * выполняется сортировка согласно [ORDER BY](order_by.md); * к полученному результату применяются [OFFSET и LIMIT](limit_offset.md). @@ -74,59 +74,65 @@ query1 UNION query2 UNION ALL query3 (query1 UNION query2) UNION ALL query3 ``` -Пересечение только двух `SELECT` (или подзапросов) может быть вычислено с помощью ключевых слов `INTERSECT` и `INTERSECT ALL`. +Пересечение нескольких `SELECT` (или подзапросов) может быть вычислено с помощью ключевых слов `INTERSECT` и `INTERSECT ALL`. ```yql query1 INTERSECT query2 ``` -Запрос из нескольких операторов `INTERSECT [ALL]` не допускается. +Пересечение более двух запросов интерпретируется как левоассоциативная операция, то есть ```yql -query1 INTERSECT query2 INTERSECT query3 ... -- ошибка +query1 INTERSECT query2 INTERSECT query3 +``` + +интерпретируется как -query1 INTERSECT query2 INTERSECT ALL query3 ... -- ошибка +```yql +(query1 INTERSECT query2) INTERSECT query3 ``` -Исключение только двух `SELECT` (или подзапросов) может быть вычислено с помощью ключевых слов `EXCEPT` и `EXCEPT ALL`. +Исключение нескольких `SELECT` (или подзапросов) может быть вычислено с помощью ключевых слов `EXCEPT` и `EXCEPT ALL`. ```yql query1 EXCEPT query2 ``` -Запрос из нескольких операторов `EXCEPT [ALL]` не допускается. +Исключение более двух запросов интерпретируется как левоассоциативная операция, то есть ```yql -query1 EXCEPT query2 EXCEPT query3 -- ошибка +query1 EXCEPT query2 EXCEPT query3 +``` + +интерпретируется как -query1 EXCEPT query2 EXCEPT ALL query3 -- ошибка +```yql +(query1 EXCEPT query2) EXCEPT query3 ``` -Одновременное использование двух разных операторов `UNION`, `INTERSECT` и `EXCEPT` в одном запросе не допускается. +Допускается одновременное использование разных операторов `UNION`, `INTERSECT` и `EXCEPT` в одном запросе. Тогда операторы `UNION` и `EXCEPT` имеют равный приоритет, который ниже, чем у `INTERSECT`. + +Например, запросы ```yql -query1 UNION query2 INTERSECT query3 -- ошибка +query1 UNION query2 INTERSECT query3 -query1 UNION query2 EXCEPT query3 -- ошибка +query1 UNION query2 EXCEPT query3 -query1 INTERSECT query2 EXCEPT query3 -- ошибка +query1 EXCEPT query2 UNION query3 ``` -Данное поведение не зависит от наличия или отсутствия `DISTINCT` / `ALL`. +интерпретируется как ```yql -query1 UNION ALL query2 INTERSECT ALL query3 -- ошибка +query1 UNION (query2 INTERSECT query3) -query1 UNION ALL query2 EXCEPT ALL query3 -- ошибка +(query1 UNION query2) EXCEPT query3 -query1 INTERSECT ALL query2 EXCEPT ALL query3 -- ошибка +(query1 EXCEPT query2) UNION query3 ``` -{% note warning %} - -Только `UNION` и `UNION ALL` могут использоваться несколько раз (больше 1). Использование `INTERSECT`, `INTERSECT ALL`, `EXCEPT` и `EXCEPT ALL` несколько раз не допускается. - -{% endnote %} +соответственно. При наличии `ORDER BY/LIMIT/DISCARD/INTO RESULT` в объединяемых подзапросах применяются следующие правила: |