Si 内连接
consultamos los datos usando:
Cláusula de uso inner join - on
: mostrar toda la información coincidente
select *
from emp e
inner join dept d
on e.deptno = d.deptno;
inner join - on
Desventajas de la cláusula:
- Si el número de departamento es 40, no se muestra información del empleado y no se mostrará en la consulta
- Un empleado no tiene información de número de departamento y no se mostrará en la consulta
Por lo tanto, si utiliza una conexión interna para consultar, a veces los datos que se muestran están incompletos . Si queremos mostrar información que no coincide en las dos tablas, podemos usar 外连接
una consulta.
Las uniones externas incluyen:
- Unión exterior izquierda :
left outer join
- Unión exterior derecha :
right outer join
PD : en el proceso de uso,outer
se puede omitir.
Con la combinación externa izquierda, la información de la tabla de la izquierda puede mostrar los datos aunque no coincidan;
con la combinación externa derecha, la información de la tabla de la derecha puede mostrar los datos aunque no coincidan.
Unión exterior completa :full outer join
Esta sintaxis mostrará todos los datos no coincidentes en las tablas izquierda y derecha , pero mysql
no se admite en , pero oracle
sí se admite en .
select *
from emp e
full outer join dept d
on e.deptno = d.deptno;
Devuelve un error de sintaxis 1064:
1064 - Tiene un error en su sintaxis SQL; verifique el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'full external join dept d on
e.deptno = d.deptno' en la línea 3
union
Sin embargo, esta lógica se puede implementar mediante la sintaxis y la palabra clave union
representa la unión de las consultas de combinación externa izquierda y derecha.
1. El uso de fetch union deduplicaráunion
automáticamente , por lo que la eficiencia es baja .
select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union -- 并集-去重-效率低
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;
2. union all
La unión se usa sin deduplicación , por lo que la eficiencia es alta .
select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union all -- 并集-不去重-效率高
select *
from emp e
right outer join dept d
on e.deptno = d.deptno;
mysql
El soporte para las operaciones de conjunto es débil, solo se admiten las operaciones de unión, las operaciones de intersección y diferencia no se admiten ( oracle
se admite el medio).