Операторы Set
Область применения: Databricks SQL Databricks Runtime
Объединяет два вложенных запроса в один. Databricks SQL поддерживает три типа операторов набора:
EXCEPT
INTERSECT
UNION
Синтаксис
subquery1 { { UNION [ ALL | DISTINCT ] |
INTERSECT [ ALL | DISTINCT ] |
EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
subquery1, subquery2
Любые два предложения
subquery
, указанные в предложении SELECT. Оба вложенных запроса должны иметь одинаковое число столбцов и наименьший общий тип для каждого соответствующего столбца.UNION [ALL | DISTINCT]
Возвращает результат
subquery1 plus the rows of
subquery2".Если указан параметр
ALL
, то дублирующиеся строки сохраняются.Если указан параметр
DISTINCT
, то результат не содержит повторяющихся строк. Это значение по умолчанию.INTERSECT [ALL | DISTINCT]
Возвращает набор строк, которые возвращаются обоими подзапросами.
Если указан параметр
ALL
, то любая строка, которая несколько раз встречается вsubquery1
и вsubquery
, будет включена в ответ несколько раз.Если указан параметр
DISTINCT
, то результат не будет содержать повторяющихся строк. Это значение по умолчанию.EXCEPT [ALL | DISTINCT ]
Возвращает строки из
subquery1
, которые не входят вsubquery2
.Если указан параметр
ALL
, каждая строка вsubquery2
будет удалять только одно из возможных совпадений изsubquery1
.Если указан параметр
DISTINCT
, то перед применением операции изsubquery1
удаляются дублирующиеся строки, поэтому удаляются все совпадения и результат не будет содержать повторяющихся строк (как совпадающих, так и не совпадающих). Это значение по умолчанию.Можно указать
MINUS
вместоEXCEPT
.
При объединении операций в цепочки INTERSECT
имеет более высокий приоритет, чем UNION
и EXCEPT
.
Тип каждого результирующего столбца является наименьшим общим типом для соответствующих столбцов в subquery1
и subquery2
.
Если результирующий столбец является STRING
, то его сортировка определяется путем применения правил сортировки по приоритету к столбцам вложенных запросов.
Примеры
-- Use number1 and number2 tables to demonstrate set operators in this page.
> CREATE TEMPORARY VIEW number1(c) AS VALUES (3), (1), (2), (2), (3), (4);
> CREATE TEMPORARY VIEW number2(c) AS VALUES (5), (1), (1), (2);
> SELECT c FROM number1 EXCEPT SELECT c FROM number2;
3
4
> SELECT c FROM number1 MINUS SELECT c FROM number2;
3
4
> SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);
3
3
4
> SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);
3
3
4
> (SELECT c FROM number1) INTERSECT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);
1
2
2
> (SELECT c FROM number1) UNION (SELECT c FROM number2);
1
3
5
4
2
> (SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);
1
3
5
4
2
> SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
3
1
2
2
3
4
5
1
1
2