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.