Si una consulta involucra dos o más tablas al mismo tiempo, se denomina consulta de unión (reflejada en la cláusula FROM). Puede haber varias tablas participando en la conexión, pero la operación de conexión se realiza entre dos tablas, es decir, una conexión por pares.
Las consultas de unión incluyen:
- unir internamente
- Unión equivalente: use "=" para comparar los valores de columna de las columnas unidas
- Conexión no equivalente: use los signos ">, >=, <, <=, <>" para operaciones de comparación
- Autoconexión: conexión interna especial, una tabla se considera como dos tablas, y está conectada por sí misma, y la tabla debe tener un alias
- unión externa
- exterior izquierdo
- exterior derecho
- frente exterior
- conexión cruzada
1 unión interna
El proceso de realizar una operación de conexión:
Primero tome la primera tupla en la tabla 1 , luego explore la tabla 2 desde el principio y encuentre las tuplas que cumplen con las condiciones de conexión una por una ;
Después de encontrarlo, empalme la primera tupla en la Tabla 1 con esta tupla para formar una tupla en la tabla de resultados.
Después de completar todas las búsquedas en la tabla 2 , tome la segunda tupla en la tabla 1 y luego explore la tabla 2 desde el principio,...
Repita este proceso hasta que se hayan procesado todas las tuplas de la Tabla 1 .
select ...
from tablename [inner] join 被连接表
on 连接条件
......
——Ejemplo (citar base de datos existente: bjpowernode.sql)
departamento: tabla de departamento | emp: tabla de empleados | salgrade : Tabla de calificaciones salariales |
deptno: número de departamento |
empno: número de empleado |
grado: grado |
dname: nombre del departamento | ename: nombre del empleado | losal: salario mínimo |
loc: ubicación del departamento | trabajo: puesto de trabajo | hisal: el salario más alto |
mgr: número de liderazgo superior | ||
fecha de contratación: hora de entrada | ||
sal: salario mensual | ||
com: subsidio/estipendio | ||
deptno: número de departamento |
1.1 Conexión equivalente
Consulte el nombre del departamento de cada empleado y muestre el nombre del empleado y el nombre del departamento.
select ename,dname
from emp e join dept d
on e.deptno=d.deptno;
1.2 Conexión no equivalente
Consulte el nivel de salario de cada empleado, muestre el nombre del empleado, el salario y el nivel de salario.
select ename,sal,grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal;
1.3 Auto-unión
Uniones internas especiales: las tablas interconectadas son físicamente la misma tabla.
Las dos tablas deben tener alias para formar lógicamente dos tablas (una es la tabla de resultados de la consulta y la otra es la tabla de condiciones de la consulta). Nota: Al especificar un alias para una tabla, en otros lugares de la declaración de consulta, todos los lugares donde se usa el nombre de la tabla deben usar el alias, y el nombre de la tabla original no se puede volver a usar.
<nombre de tabla> [AS] <alias de tabla> (observe la diferencia con los alias de columna, los alias de columna no se pueden usar después de agrupar por)
Consulta el líder superior de un empleado, muestra el nombre del empleado y el nombre del líder correspondiente.
Nota: número de líder del empleado = número de empleado del líder
select a.ename as '员工名',b.ename as '领导名'
from emp a inner join emp b
on a.mgr=b.empno;
2 uniones exteriores
Sólo los datos de una tabla deben cumplir las condiciones de conexión , mientras que los datos de la otra tabla pueden no cumplir las condiciones de conexión .
La diferencia entre la unión externa y la unión ordinaria: la operación de unión ordinaria solo genera tuplas que cumplen las condiciones de unión
La operación de combinación externa utiliza la tabla especificada como el cuerpo principal de la conexión y genera las tuplasen la tabla principal que no cumplen las condiciones de combinación .
Combinación externa izquierda : enumera todas las tuplas en la relación izquierda
Combinación externa derecha : enumera todas las tuplas en la relación correcta
# 1.ANSI方式的外连接的语法格式为:
FROM 表1 LEFT | RIGHT |FULL [OUTER]
JOIN 表2 ON <连接条件>
# 2.theta方式的外连接的语法格式为:
# 左外连接(输出表1中所有内容):
FROM 表1, 表2 WHERE [表1.]列名(+) = [表2.]列名
# 右外连接(输出表2中所有内容):
FROM 表1, 表2 WHERE [表1.]列名= [表2.]列名(+)
2.1 Unión exterior izquierda
Consulta al supervisor de cada empleado.
Nota: consulta principalmente la tabla de empleados de la izquierda
select a.ename as '员工', b.ename '领导'
from emp a left join emp b
on a.mgr=b.empno;
2.1 Unión exterior derecha
Consulta al supervisor de cada empleado.
Nota: consulte principalmente la tabla de líderes a la derecha
select a.ename as '员工', b.ename '领导'
from emp a right join emp b
on a.mgr=b.empno;
Consulta qué departamento no tiene empleados.
Nota: La tabla principal es la tabla de departamentos, use la derecha donde e.empno es nulo
select d.*
from emp e right join dept d
on e.deptno=d.deptno
where e.empno is null;
3 conexión de tres mesas
Consulta el nombre del departamento y el grado salarial de cada empleado.
Nota: Use la tabla de departamento de la mesa emp para conectar primero, y luego conecte la mesa emp y la mesa salgrade
select
e.ename,d.dname,s.grade
from
emp e
join
dept d
on
e.deptno=d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal;
Consulta el nombre del departamento, el grado salarial y el líder superior de cada empleado.
Nota: La unión externa izquierda no se puede realizar en la primera unión
select e.ename '员工',d.dname,s.grade,e1.ename '领导'
from
emp e
join
dept d
on
e.deptno=d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal
left join
emp e1
on
e.mgr = e1.empno;