Oracle union all: UNION ALL ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

sql — объединение и объединение всех в базе данных оракула

спросил

Изменено
3 года, 9 месяцев назад

Просмотрено
5к раз

При выполнении следующих двух запросов (сосредоточьтесь на части между двумя звездочками * ____ *) мне действительно интересно, как позиция UNION ALL меняет вывод. Я не могу понять.

Запрос 1

 ВЫБЕРИТЕ 'Джек' КАК Имя, 100 Метки AS ИЗ ДВОЙНОГО
*UNION All SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL*
UNION SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
 

Результат запроса

 ИМЯ ЗНАКИ
Джек 100
 

Запрос 2

 ВЫБЕРИТЕ 'Джек' КАК Имя, 100 меток AS ИЗ ДВОЙНОГО
UNION SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
*UNION ALL SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL*
 

Результат запроса

 ИМЯ ЗНАКИ
Джек 100
Джек 100
 

Спасибо 🙂

  • sql
  • oracle
  • union

1

Если вы не укажете круглые скобки, select будут выполняться один за другим. Все операторы множества минус , объединение , объединение всех , пересечение имеют одинаковый приоритет.

Документация Oracle

В первом запросе UNION выполняется в конце, чтобы в запросе не было повторяющихся строк. Во втором случае UNION ALL выполняется в конце, поэтому в вашем запросе будут повторяющиеся строки.

3

Разница между Union и Union all заключается в том, что Union all не удаляет повторяющиеся строки,

вывод первого запроса:

шаг 1:

 SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
UNION All SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
 

результат 2 строки, потому что union all допускает дублирование.

шаг 2:

 UNION SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
 

этот запрос выберет только строку без дубликатов из двух вышеуказанных строк и самой себя.
возвращает 1 строку.

во втором запросе…

шаг 1

 ВЫБЕРИТЕ 'Jack' AS Name, 100 AS Marks FROM DUAL
UNION SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
 

возвращает 1 строку, поскольку объединение выбирает только отдельные строки.

шаг 2

 UNION ALL SELECT 'Jack' AS Name, 100 AS Marks FROM DUAL
 

возвращает 2 строки, поскольку допускает дублирование.

1

И объединение, и объединение имеют тот же приоритет, что и операции. Таким образом, при отсутствии круглых скобок ваши два союза будут оцениваться сверху вниз. Ваш первый запрос оценивается следующим образом:

 SELECT Name, Marks
ОТ
(
    ВЫБЕРИТЕ 'Jack' AS Name, 100 AS Marks FROM DUAL
    СОЮЗ Все
    ВЫБЕРИТЕ 'Jack' AS Name, 100 AS Marks FROM DUAL
) т
СОЮЗ
ВЫБЕРИТЕ 'Jack' AS Name, 100 AS Marks FROM DUAL
 

То же самое относится ко второму запросу.

1

Чтобы понять это поведение, вам нужно четко понимать разницу между UNION и UNION ALL.

Запрос 1: Вывод первых двух строк вернет 2 строки. Однако последняя строка (инструкция sql) с оператором UNION удалит повторяющиеся строки, включая собственный вывод. Итак, всего первый запрос вернет только 1 строку.

Запрос 2: Теперь UNION находится на 2-й строке. После объединения с 1-й строкой он снова вернет только 1 строку. Но в 3-й строке с «ОБЪЕДИНЕНИЕМ ВСЕХ» он вернет 2 строки. Потому что «ОБЪЕДИНЕНИЕ ВСЕХ» не удалит дубликаты.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Union & Union Все операторы набора SQL в базе данных Oracle

Операторы набора позволяют нам объединять строки, возвращенные из двух или более запросов. В SQL у нас есть четыре оператора множеств.

  1. Союз
  2. Союз Все
  3. Пересечение
  4. Минус

В этом уроке мы изучим концепцию оператора Union и Union All set. Для демонстрационных целей я создал и заполнил две таблицы Cricket и Football. Оба из них имеют два столбца: имя и фамилию с тем же типом данных, что и Varchar2. Я также вставил некоторые строки в таблицы, вот скриншоты данных в этих таблицах.

Обе эти таблицы имеют 3 строки данных, и если вы внимательно посмотрите, то заметите, что в обеих из них есть повторяющиеся строки. Это строка 1, где имя Кларк, а фамилия Кент.

Теперь, когда мы разобрались с терминологией, давайте перейдем к теме и посмотрим, что такое операторы Union и Union All Set в Oracle SQL.

Оператор набора Union

Оператор набора UNION возвращает результаты всех участвующих запросов после устранения дублирования. Рассмотрим пример

ВЫБЕРИТЕ имя, фамилию ИЗ крикета
 СОЮЗ
 ВЫБЕРИТЕ имя, фамилию ИЗ футбола;

Здесь у нас есть 2 отдельных запроса. В первом запросе мы выбираем строки из столбца имени и фамилии таблицы Cricket, а во втором запросе мы извлекаем строки из столбца имени и фамилии таблицы Football, и оба эти запроса связаны с использованием оператора объединения.

При выполнении этого запроса будут возвращены все строки обоих столбцов обеих таблиц, кроме дубликата.

Оператор Union All Set

Оператор UNION ALL возвращает результаты всех участвующих запросов, включая повторяющиеся строки. Это означает, что если мы выполним один и тот же запрос, мы получим все строки, возвращаемые из обеих таблиц, вместе с дубликатом.

Позвольте мне продемонстрировать вам это.