Base de datos MySQL: consulta de varias tablas (3): autounión, consulta conjunta, subconsulta

Tabla de contenido

autoconexión 

Sintaxis de consulta

Demostración de autoconexión

consulta sindical

Sintaxis de consulta

subconsulta

introducir

subconsulta escalar

subconsulta de columna

subconsulta de fila

Subconsulta de tabla


autoconexión 

A través del estudio anterior, ya tenemos una cierta comprensión de las conexiones. La autounión, en términos sencillos, significa unirse a sí mismo, es decir, consultar una tabla varias veces.

En el proceso de autounión, una tabla debe tratarse como dos tablas, es decir, con alias.

Sintaxis de consulta

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

La consulta de autounión puede ser una consulta de unión interna o una consulta de unión externa.

Demostración de autoconexión

1. Consultar los nombres de los empleados y sus líderes.

Observamos la tabla, encontramos las condiciones de conexión correspondientes a las preguntas y las clasificamos:

  • Estructura de la tabla: emp
  • Condición de conexión: id = managerid
select a.name '员工',b.name '领导' from emp a ,emp b where a.managerid = b.id;

resultado de búsqueda:

2. Consultar los nombres de todos los empleados y sus líderes, si el empleado no tiene un líder, también es necesario consultarlos.

Si los empleados no tienen un líder, es necesario consultarlos. Se deben utilizar uniones externas, ya sean uniones externas izquierda o derecha.

La estructura de la tabla y las condiciones de conexión permanecen sin cambios.

select a.name '员工',b.name '领导' from emp a left outer join emp b on a.managerid = b.id;

resultado de búsqueda: 

consulta sindical

Veamos un pequeño punto de conocimiento.

Unión consulta-unión, unión todos

Para consultas de unión, los resultados de varias consultas se combinan para formar un nuevo conjunto de resultados de consulta.

Sintaxis de consulta

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

Para consultas conjuntas, el número de columnas en varias tablas debe ser coherente y los tipos de campos también deben ser coherentes.

Union all fusionará todos los datos directamente y union deduplicará los datos combinados.

subconsulta

introducir

1. Concepto

Anidar una instrucción SELECT en una instrucción SQL se denomina consulta anidada , también conocida como subconsulta .

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

 La declaración fuera de la subconsulta puede ser cualquiera de INSERT/UPDATE/DELETE/SELECT.

2. Según los diferentes resultados de la subconsulta, se divide en:

  • Subconsulta escalar (el resultado de la subconsulta es un valor único)
  • Subconsulta de columna (el resultado de la subconsulta es una columna)
  • Subconsulta de fila (el resultado de la subconsulta es una fila)
  • Subconsulta de tabla (los resultados de la subconsulta son varias filas y columnas)

3. Según la posición de la subconsulta, se divide en: después de DÓNDE, después de DESDE y después de SELECCIONAR.

subconsulta escalar

El resultado devuelto por una subconsulta es un valor único (número, cadena, fecha, etc.) En su forma más simple, esta subconsulta se denomina subconsulta escalar.

Operadores de uso común: = <> < <= > >=

Hagámoslo en la práctica:

1. Consultar toda la información de los empleados del "Departamento de Ventas"

La consulta se divide primero en dos pasos: primero, consulta el ID del departamento de ventas y segundo, consulta la información del empleado correspondiente al ID del departamento;

Anídelo nuevamente y use subconsultas escalares.

-- 1.查询销售部的所有员工信息
-- a.查询'销售部'的部门ID
select id from dept where name = '销售部'; -- 返回结果为 4

-- b.根据销售部部门ID,查询员工信息
select * from emp e where e.dept_id = 4;

-- 标量子查询
select * from emp e where e.dept_id = (select id from dept where name = '销售部');

2. Consultar información de los empleados después de que 'Fang Dongbai' se uniera a la empresa

Resuelto por el mismo método.

-- 2.查询在'方东白'入职之后的员工信息
-- a.查询'方东白'的入职日期
select entrydate from emp where name = '方东白';

-- b.查询指定入职日期之后入职的员工信息
select * from emp where entrydate > '2009-02-12';

-- 标量子查询
select * from emp where entrydate > (select entrydate from emp where name = '方东白');

subconsulta de columna

El resultado devuelto por una subconsulta es una columna (pueden tener varias filas), esta subconsulta se denomina subconsulta de columna .

Operadores de uso común: EN, NO EN, CUALQUIERA, ALGUNOS, TODOS

Operador describir
EN Dentro del rango de colección especificado, seleccione uno de más de uno
NO EN No dentro del rango de colección especificado
CUALQUIER En la lista devuelta por la subconsulta, cualquiera de ellos puede satisfacerse.
ALGUNO Igual que ANY, ANY se puede usar dondequiera que se use SOME.
TODO Todos los valores de la lista devuelta por la subconsulta deben satisfacer

Manifestación:

 1. Consultar información sobre empleados cuyo salario es superior al de todos los miembros del departamento de finanzas.

Primero verifique los salarios de todo el personal del departamento de finanzas.

select salary from emp e where e.dept_id = (select id from dept where name = '财务部');

Anidarlo de nuevo

select * from emp e
    where salary >
        all(select salary from emp e where e.dept_id = (select id from dept where name = '财务部'));
-- 相当于 salary > all(8500,48000,5250)

2. Consultar información sobre empleados cuyo salario es superior al de cualquier persona del departamento de I+D.

select * from emp
    where salary > any
                    (select salary from emp where dept_id =
                            (select id from dept where name = '研发部'));
-- 这里any也可以使用some,效果是一样的

subconsulta de fila

El resultado devuelto por una subconsulta es una fila (pueden tener varias columnas), esta subconsulta se denomina subconsulta de fila .

Operadores de uso común: =, <>, IN, NOT IN 

Demostración de ejemplo:

Consulta la información de empleados con el mismo salario y liderazgo directo que 'Zhang Wuji'

Primero verifique el salario y el liderazgo directo de 'Zhang Wuji'

select salary,managerid from emp where name = '张无忌';

 

Luego consulta la información de los empleados con el mismo salario y liderazgo directo que 'Zhang Wuji'.

select * from emp where salary = 12500 and managerid = 1;
-- 另一种写法
select * from emp where (salary,managerid) = (12500,1);
-- 行子查询
select * from emp where (salary,managerid) = 
    (select salary,managerid from emp where name = '张无忌');

Subconsulta de tabla

El resultado devuelto por una subconsulta son varias filas y varias columnas. Esta subconsulta se denomina subconsulta de tabla .

Operadores de uso común: IN

Generalmente se coloca después de y se puede consultar como una nueva tabla temporal.

Demostración de ejemplo

1. Consultar información de empleados con el mismo puesto y salario que 'Luzhangke' y 'Song Yuanqiao'

Primero verifique los puestos y salarios de 'Luzhangke' y 'Song Yuanqiao'

select job,salary from emp where name = '鹿杖客' or '宋远桥';

Realizar subconsulta de tabla nuevamente

select * from test.emp where
    (job,salary) in (select job,salary from test.emp where name = '鹿杖客' or '宋远桥');

2. Consultar la información del empleado y la información del departamento cuya fecha de incorporación es posterior al '2006-01-01'

Consulta también paso a paso:

select * from emp where entrydate > '2006-01-01';

 resultado de búsqueda:

Luego use esto como una nueva tabla para consultar. Debido a que es necesario consultar toda la información del departamento, aquí se usa una combinación izquierda.

select e.*,d.* from (select * from emp where entrydate > '2006-01-01') e
    left join dept d on e.dept_id = d.id;

resultado de búsqueda:


fin 


Aprenda de: Programador Dark Horse - Curso de base de datos MySQL

Supongo que te gusta

Origin blog.csdn.net/li13437542099/article/details/132481695
Recomendado
Clasificación