SQL: consulta de combinación de varias tablas

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;

Supongo que te gusta

Origin blog.csdn.net/J__aries/article/details/130130586
Recomendado
Clasificación