Понимая, что его становится одним join
колонн без дубликатов, что общий случай:
inner join A и B он вручит результат пересечения наборов A и B. В других словах, часть помещает – пересечение – в диаграмме Venn.
full outer join между A и B он вручит результат союза A и B. В других словах, внешней части – союзе – в диаграмме Venn.
Давайте предполагать, что у нас есть два подмостков, с единственной колонной каждая и следующие данные:
A B
- -
1 3
2 4
3 5
4 6
Замечание, что (1,2) только находятся в A, (3,4) общие и (5,6) только находятся в B.
inner join – используя любой из синтаксисов эквивалентной консультации – вручает тебе пересечение обоих подмостков, а именно, линии, которые оба подмостков есть общим.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a, b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
Один outer join
из-за левой стороны, он даст тебе все линии A, включая общие линии между A и B.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
Один outer join
из-за правой стороны он даст тебе все линии B, включая общие линии с A.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
Один outer join
я завершаю (full) он вручит тебе союз A и B; а именно, все линии A и все линии B. Если у линии в A нет соответствующей линии в B, часть B - null, и vice поверни.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 5
null | 6
Само, мы можем видеть это с диаграммами Venn:
Изображение SQL Хоинс.свг де Арбекк, имеемое под лицензией CC BY 3.0.
Я буду использовать тот же пример jachguate, который очень ясный добавляя одни pequeños детали.
Глоссарий
-- Crear tabla A (tabla Izquierda)
CREATE TABLE A
(
a INT
);
-- Crear tabla B (tabla derecha)
CREATE TABLE B
(
b INT
);
-- Insertar datos
Insert into A (a) Values (1);
Insert into A (a) Values (2);
Insert into A (a) Values (3);
Insert into A (a) Values (4);
Insert into B (b) Values (3);
Insert into B (b) Values (4);
Insert into B (b) Values (5);
Insert into B (b) Values (6);
COMMIT;
-- Tabla A
SELECT * FROM A;
-- Tabla B
SELECT * FROM B;
/* Inner Join. */
-- Unión interna, filas que ambas tablas tienen en común.
select * from A INNER JOIN B on A.a = B.b;
select A.*, B.* from A, B where A.a = B.b;
/* Left outer join */
-- Unión externa por la izquierda, todas las filas de A (tabla izquierda) relacionadas con B, así estas tengan o no coincidencias.
select * from A LEFT OUTER JOIN B on A.a = B.b;
select A.*,B.* from A,B where A.a = B.b(+);
/* Right outer join */
-- Unión externa por la derecha, todas las filas de B (tabla derecha), así estas tengan o no coincidencias con A.
select * from A RIGHT OUTER JOIN B on A.a = B.b;
select A.*,B.* from A,B where A.a(+) = B.b;
/* Full outer join */
-- Unión externa completa, unión externa por la izquierda unida a unión externa por la derecha.
-- En oracle:
select * from A FULL OUTER JOIN B on A.a = B.b;
-- En MySql no está implementado FULL OUTER JOIN, para obtener este mismo resultado:
select * from A LEFT OUTER JOIN B on A.a = B.b
UNION
select * from A RIGHT OUTER JOIN B on A.a = B.b;
Видеть: