Настройка операторов

Область применения:проверка помечено да 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 запроса2'.

    Если ALL указан параметр, повторяющиеся строки сохраняются.

    Если DISTINCT задано значение , результат не содержит повторяющихся строк. Это значение по умолчанию.

  • INTERSECT [ALL | DISTINCT]

    Возвращает набор строк, которые находятся в обоих вложенных запросах.

    Если ALL задано значение , строка, которая отображается несколько раз в subquery1 , а также в subquery , возвращается несколько раз.

    Если DISTINCT задано значение , результат не содержит повторяющихся строк. Это значение по умолчанию.

  • EXCEPT [ALL | DISTINCT ]

    Возвращает строки, в subquery1 которых нет в subquery2.

    Если ALL задан параметр , каждая строка в subquery2 удалит ровно одно из возможных совпадений из subquery1.

    Если DISTINCT задан параметр , повторяющиеся строки удаляются из subquery1 перед применением операции, поэтому все совпадения удаляются, а в результате не будет повторяющихся строк (совпадающих или несовпаденных). Это значение по умолчанию.

    В качестве альтернативы EXCEPTсинтаксису можно указать MINUS .

Если операции 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