Поделиться через


Операторы 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.

Примеры

-- 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