summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-07-14 19:10:40 +0300
committerrobot-piglet <[email protected]>2025-07-14 19:24:38 +0300
commita879d14c72e4b65963ba1f7acd1f4a84063a1b55 (patch)
treed99b5add298f542b5e22b9e8bd23bd385f9cd5d0
parent715b4fe85a26bfd10539ee2c640cccb2977be349 (diff)
Intermediate changes
commit_hash:50f62a6c3fe0fa8fbf1231f6f14d7434b83fa964
-rw-r--r--yql/essentials/docs/en/syntax/select/index.md60
-rw-r--r--yql/essentials/docs/ru/syntax/select/index.md50
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` в объединяемых подзапросах применяются следующие правила: