Asociación de múltiples tablas SQL-join

1. Conexión SQL (ÚNETE)

1. producto cartesiano

(1) Cuando se conectan y consultan varias tablas sin restricciones de condición, la cantidad final de resultados de la consulta es el producto de la cantidad de tablas múltiples

Por ejemplo, si hay 15 (filas) datos en la tabla A y 20 (filas) datos en la tabla B, cuando se consultan las dos tablas, se generarán 15 * 20 = 300 (filas) datos.

select empname,deptname from emp, dept;

(2) Evitar el fenómeno del producto cartesiano

select 
		empname,deptname 
	from 
		emp, dept
	where
		emp.deptno = dept.deptno;

	
// 或者
	select 
		e.empname,d.deptname 
	from 
		emp e, dept d
	where
		e.deptno = d.deptno; //SQL92语法

El resultado final se reducirá, pero el número de consultas sigue siendo el producto del número de filas en las dos tablas.

Por lo tanto: a través del fenómeno del producto cartesiano, cuanto mayor sea el número de conexiones de mesa, menor será la eficiencia y trate de evitar el número de conexiones de mesa

2. La cláusula SQL JOIN se usa para combinar filas de dos o más tablas en función de los campos comunes entre estas tablas ( consulta entre tablas )

SQL92: Sintaxis SQL para 1992
SQL99: Sintaxis SQL para 1999

Consulta por separado de una tabla, llamada consulta de tabla única

La siguiente figura muestra 7 usos relacionados con LEFT JOIN, RIGHT JOIN, INNER JOIN, OUTER JOIN

3. Tipo de UNIÓN SQL

(1) UNIÓN INTERNA : conexión interna

[1] Conexión equivalente, devuelve las filas con los mismos campos de conexión en las dos tablas (la condición es una relación de equivalencia)

[2] Conexión no equivalente, la condición no es una relación equivalente

[3] Autoconexión, la misma tabla se considera varias tablas

Nota:

        INTERIOR puede omitirse

        No existe una relación primaria y secundaria entre las dos tablas; igualdad

(2) UNIÓN EXTERNA  : conexión externa

UNIÓN IZQUIERDA (EXTERIOR) : conexión izquierda (externa), incluso si no hay ninguna coincidencia en la tabla de la derecha, todas las filas se devuelven de la tabla de la izquierda (la tabla a la izquierda de la palabra clave de combinación se considera la tabla principal, principalmente para consultar todos los datos de la tabla de la izquierda, aprovechando la tabla de la derecha de la consulta asociada)

JOIN DERECHO (EXTERIOR) : combinación derecha (externa), incluso si no hay ninguna coincidencia en la tabla de la izquierda, todas las filas se devuelven de la tabla de la derecha (la tabla a la derecha de la palabra clave de combinación se considera la tabla principal, principalmente para consultar todos los datos en la tabla de la derecha Salir, a cuestas en la tabla de la izquierda de la consulta asociada)

UNIÓN COMPLETA (EXTERNA)  : conexión completa (externa)

Outer join, devuelve siempre que haya una coincidencia en una de las tablas, es decir, devuelve filas de ambas tablas: combinación izquierda + combinación derecha

Nota:

        EXTERIOR puede omitirse

        En la combinación externa, las dos tablas están conectadas, lo que da como resultado una relación primaria y secundaria.

(3) Conexión cruzada

CROSS JOIN : El resultado es un producto cartesiano, que es el número de filas de la primera tabla multiplicado por el número de filas de la segunda tabla

4, UNIÓN INTERNA SQL

La palabra clave INNER JOIN devuelve filas cuando hay al menos una coincidencia en la tabla

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
 
或者
 
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
INNER JOIN 与 JOIN 是相同的

(1) Conexión equivalente

SQL92语法:
	select 
		e.ename,d.dname
	from
		emp e, dept d
	where
		e.deptno = d.deptno;
//sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

SQL99语法:
	select 
		e.ename,d.dname
	from
		emp e
	join
		dept d
	on
		e.deptno = d.deptno;
	

	//inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)
	select 
		e.ename,d.dname
	from
		emp e
	inner join
		dept d
	on
		e.deptno = d.deptno; // 条件是等量关系,所以被称为等值连接。
//sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where

 se puede omitir el interior, es más legible con el interior

Desventajas de sql92: la estructura no es clara, las condiciones de conexión de la tabla y las condiciones para un mayor filtrado en la etapa posterior se colocan detrás de donde

Ventajas de sql99: Las condiciones para la conexión de la tabla son independientes Después de la conexión, si se requiere una mayor detección, continúe agregando donde

(2) Conexión no equivalente

select 
	e.ename, e.sal, s.grade
from
	emp e
join
	salgrade s
on
	e.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。


select 
	e.ename, e.sal, s.grade
from
	emp e
inner join
	salgrade s
on
	e.sal between s.losal and s.hisal;

(3) Autoconexión

Una mesa como dos mesas

select 
	a.ename as '员工名', b.ename as '领导名'
from
	emp a
join
	emp b
on
	a.mgr = b.empno; //员工的领导编号 = 领导的员工编号

 INNER JOIN es lo mismo que JOIN

5, UNIÓN IZQUIERDA DE SQL

La palabra clave LEFT JOIN devuelve todas las filas de la tabla de la izquierda (tabla1), incluso si no hay coincidencias en la tabla de la derecha (tabla2). Si no hay ninguna coincidencia en la tabla de la derecha, el resultado es NULL

La tabla a la izquierda de la palabra clave join se considera la tabla principal, principalmente para consultar todos los datos de la tabla de la izquierda y para consultar la tabla del lado derecho por asociación.

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
 
或
 
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN

como sigue: 

select 
	e.ename,d.dname
from
	dept d 
left (outer) join 
	emp e
on
	e.deptno = d.deptno;

En algunas bases de datos, LEFT JOIN se llama LEFT OUTER JOIN

Cuando la palabra clave en 
la base de datos devuelve registros al conectar dos o más tablas, se generará una tabla temporal intermedia y luego esta tabla temporal se devolverá al usuario.

Cuando se utiliza la combinación izquierda, la diferencia entre las condiciones on y where es la siguiente:

(1) La condición on es la condición utilizada al generar la tabla temporal, independientemente de si la condición on es verdadera o no, devolverá los registros de la tabla izquierda.
(2) La condición where es la condición para filtrar la tabla temporal después de generar la tabla temporal. En este momento, la combinación izquierda no tiene sentido (se deben devolver los registros de la tabla izquierda) y todas las condiciones se filtran si no se cumplen.

Supongamos que hay dos tablas:

 Dos SQL:

select * from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
 
select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')

 La razón clave de los resultados anteriores es la particularidad de la unión izquierda, la unión derecha y la unión completa. No importa si la condición de on es verdadera o no, devolverá los registros en la tabla izquierda o derecha, y full tiene la unión. de las características de izquierda y derecha. Pero inner jion no tiene esta particularidad, la condición se coloca en y donde, y el conjunto de resultados devuelto es el mismo.

【6】 UNIÓN DERECHA DE SQL

La palabra clave RIGHT JOIN devuelve todas las filas de la tabla derecha (tabla2), incluso si no hay coincidencias en la tabla izquierda (tabla1). Si no hay ninguna coincidencia en la tabla de la izquierda, el resultado es NULL

La tabla del lado derecho de la palabra clave join se considera la tabla principal, principalmente para consultar todos los datos de la tabla derecha y para consultar la tabla del lado izquierdo por asociación.

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
 
或
 
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN

como sigue: 

select 
	e.ename,d.dname
from
	emp e 
right (outer) join 
	dept d
on
	e.deptno = d.deptno;

En algunas bases de datos, RIGHT JOIN se llama RIGHT OUTER JOIN

【7】CONEXIÓN EXTERNA COMPLETA DE SQL

La palabra clave FULL OUTER JOIN devuelve filas siempre que haya una coincidencia en una de las tablas izquierda (tabla 1) y tabla derecha (tabla 2)

La palabra clave FULL OUTER JOIN combina los resultados de LEFT JOIN y RIGHT JOIN (FULL OUTER JOIN no es compatible con MySQL)

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

Resumido de la siguiente manera:

Una unión interna B toma la intersección.

Una combinación izquierda B toma todo A, y B no tiene un valor correspondiente como nulo.

Una unión a la derecha B toma B todo A no tiene valor correspondiente es nulo.

Una unión externa completa B toma la unión, no hay un valor correspondiente a nulo

Por ejemplo: la columna "deptId" en la tabla "usuario" apunta al campo "id" en la tabla "dept"; las dos tablas anteriores están vinculadas por la columna "deptId"

select u.id,d.id,d.name,d.number 
from user u left join dept d 
on u.deptId = d.id;
 
或
 
select u.id,u.name,d.id,d.name,d.number 
from user u inner join dept d 
on u.deptId = d.id;

Los resultados de la consulta son los mismos.

Supongo que te gusta

Origin blog.csdn.net/MinggeQingchun/article/details/122302972
Recomendado
Clasificación