Может кто-нибудь объяснить мне, в чем разница между union All и join в Oracle SQL?
Я ищу этот вопрос с последних 2 дней, в чем разница между UNION и JOIN. Специально UNION ALL и Natural JOIN. Итак, у меня есть 2 запроса здесь первый
CREATE OR REPLACE VIEW VU_m1 AS
SELECT department_id,manager_id FROM employees
NATURAL JOIN departments ;
SELECT * FROM vu_m1;
а второй
CREATE OR REPLACE VIEW VU_m2 AS
SELECT department_id,manager_id FROM employees
UNION ALL
SELECT department_id,manager_id FROM departments;
SELECT * FROM vu_m2;
Результат обоих запросов одинаков. Так в чем же разница между UNION ALL и Natural JOIN?
Подробности: я использую Oracle 11gR2, работающий над образцом базы данных HR.
3 ответа
Это мои 2 цента
+----------------------------------+--------------------------------------------+
+- UNION +- JOIN +
+----------------------------------+--------------------------------------------+
+SELECT 1 AS bah FROM DUAL + SELECT * +
+ EMP.DEPTNO + FROM +
+SELECT 2 AS bah FROM DUAL; + (SELECT 1 AS bah from dual) foo +
+ + JOIN +
+ + (SELECT 2 AS bah from dual) bar +
+ + ON 1=1; +
+----------------------------------+--------------------------------------------+
+- RESULTS +
+----------------------------------+--------------------------------------------+
+This gives everything in vertical + This gives everything in horizontal +
+ BAH + BAH BAH +
+ 1 + 1 2 +
+ 2 + +
+----------------------------------+--------------------------------------------+
+- OBSERVATIONS +
+----------------------------------+--------------------------------------------+
+ UNION puts lines from queries + JOIN makes a Cartesian product +
+ after each other + and subsets it +
+ + +
+ UNION combines the results of + JOIN can retrieve data from two or +
+ two or more queries into a single+ more tables based on logical relationships +
+ result set that includes all the + between the tables. Joins indicate how SQL +
+ rows that belong to all queries + should use data from one table to select +
+ in the union. + the rows in another table. +
+ + +
+ UNION makes two queries look + JOIN examine two or more tables in +
+ like one. + a single query statement +
+ + +
+ UNION returns the results of two + JOIN relates similar data in different +
+ different queries as a single + tables. +
+ recordset. + +
+ + +
+----------------------------------+--------------------------------------------+
JOIN выбирает поля из таблицы A и поля из таблицы B и складывает их все вместе, JOIN является "горизонтальным", например:
SELECT A.A1, A.A2, A.A3, B.B1, B.B2
FROM A
INNER JOIN B
ON A.A10 = B.B20
который может быть написан так:
select A1, A2, A3, B1, B2 from TABLEA, TABLEB
WHERE A10 = B20
результат:
Field-A1 | Field-A2 | Field-A3 | Field-B1 | Field-B2 |
...
СОЮЗ / UNIONALL:
Разница между ними заключается в том, что UNION возвращает только различные результаты, а UNIONALL возвращает ВСЕ результаты (включая дубликаты). UNION/UNIONALL объединяет результаты двух выборок - но есть "зацепка" - имена столбцов должны быть точно такими же - это свойство делает UNION "вертикальным", например:
Select A1 as X1, A2 as X2 from TABLEA
UNIONALL
Select B1 as X1, B2 as X2 from TABLEB
результат:
Field-X1 | Field-X2
A1 | A2
B1 | B2
...
Объединение. Объединение - это операция SQL, выполняемая для установления соединения между двумя или более таблицами базы данных на основе совпадающих столбцов, тем самым создавая связь между таблицами. Наиболее сложные запросы в системе управления базами данных SQL включают команды соединения. Например: SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate ОТ заказов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Клиентов НА Orders.CustomerID=Customers.CustomerID;
Оператор UNION используется для объединения результирующего набора из двух или более операторов SELECT.
Обратите внимание, что каждый оператор SELECT в UNION должен иметь одинаковое количество столбцов. Столбцы также должны иметь похожие типы данных. Кроме того, столбцы в каждой инструкции SELECT должны иметь один и тот же синтаксис: SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;