Consulta multitabla MySQL (consulta conjunta, consulta conjunta, subconsulta)

Tabla de contenido

Consulta conjunta de varias tablas

Tipo de consulta de unión

Consulta de combinación de varias tablas

Clasificación de consultas de varias tablas

Consulta cruzada (producto cartesiano)

consulta de unión interna

Consulta de unión externa

consulta de unión automática

reglas de subconsulta

Clasificación de Subconsultas

Diferentes resultados para subconsultas

EXISTE 和 NO EXISTE

Diferentes lugares donde se aplican las subconsultas

Aplicación de subconsultas en diferentes declaraciones externas


Consulta conjunta de varias tablas

1. Mediante consulta conjunta, puede obtener el conjunto de registros en dos tablas o el conjunto de registros comunes, o el conjunto de registros en una de las tablas

2. La consulta conjunta opera sobre la tabla en unidades de filas, principalmente para aumentar o disminuir el número de filas

3. El número de columnas y el tipo del número de columnas entre varias tablas utilizadas como consulta conjunta deben ser iguales (por ejemplo: qué columnas se consultan en la tabla 1, qué columnas se consultan en la tabla 2)

4. La consulta conjunta eliminará los registros duplicados de forma predeterminada

5. La consulta conjunta puede usar cualquier declaración SELECT, pero la cláusula ORDER BY solo se puede usar en la última vez

Tipo de consulta de unión

UNION agrega registros de ciertos campos de dos tablas (unión)

ALL se usa como palabra clave, lo que indica que el resultado de la operación de conjunto retiene filas duplicadas (generalmente UNION ALL)

INTERSECT extrae (intersección) registros comunes de algunos campos de dos tablas (MySQL no existe, puede usar la siguiente consulta de conexión en su lugar)

EXCEPT resta los registros comunes de algunos campos de las dos tablas y luego devuelve los registros restantes (conjunto de diferencias) de una tabla (MySQL no existe, use el campo NOT IN para lograrlo)

Formato de consulta de unión

formato de unión

SELECCIONE la lista de campos DE la tabla A ...   UNION SELECCIONE la lista de campos DE la tabla B ...;

Devolver la unión de la consulta de la tabla A y la consulta de la tabla B (y deduplicar el procesamiento)

Unión todo formato

En comparación con la consulta de unión, esta consulta no puede desduplicar los datos combinados

Demostración de consulta de unión

Usamos las siguientes dos tablas para la demostración.

seleccionar nombre , edad del personal 1 donde origo = ' Chongqing ' unión seleccionar nombre , edad del usuario;   # consultar tabla 1 origo es el nombre de Chongqing , el resultado del campo de edad más el resultado de la consulta de tabla 2 nombre , edad y deduplicación procesamiento ( Se requiere que los tipos de datos de nombre y edad de las dos tablas sean consistentes)

seleccionar nombre , edad del personal1 donde origo = ' Chongqing ' union all seleccionar nombre , edad del usuario; #Sin procesamiento de deduplicación

seleccione nombre , edad del personal1 donde ( nombre , edad ) no está en ( seleccione nombre , edad del usuario ) #Consulte la diferencia entre la tabla 1 y la tabla 2 (reste la intersección de la tabla 1 y la tabla 2 del resultado de la consulta de la tabla 1 )


Consulta de combinación de varias tablas

La consulta de tablas múltiples se basa en columnas horizontales, principalmente agregando algunas columnas de otras tablas

Al realizar consultas de tablas múltiples, las columnas en la cláusula SELECT generalmente se escriben en el formato de nombre de tabla alias.nombre de columna

Usamos dos tablas para la demostración.

Clasificación de consultas de varias tablas

consulta cruzada

       Combinando todos los registros de las dos tablas, el número de registros obtenidos es el producto del número de filas en las dos tablas

consulta de unión interna

Consultar los datos en la intersección de las tablas A y B

Consulta de unión externa

       Combinación externa izquierda: consulta todos los datos de la tabla de la izquierda y los datos de la intersección de las dos tablas

       Combinación externa derecha: consulta todos los datos en la tabla derecha y los datos en la intersección de las dos tablas

consulta de unión automática

Solo hay una tabla y la tabla actual está conectada a sí misma (la subunión debe usar el alias de la tabla)

Consulta cruzada (producto cartesiano)

Las uniones cruzadas se realizan utilizando el operador set GROSS JOIN (producto cartesiano)

Combinando todos los registros de las dos tablas, mientras se agregan otros campos de la tabla, la cantidad de registros obtenidos es el producto de la cantidad de filas en las dos tablas

Formato

SELECCIONE la lista de campos DE la tabla 1, tabla 2; el volumen de datos mostrado es el volumen de datos de la tabla 1 * el volumen de datos de la tabla 2

Precauciones

Podemos ver a través del fenómeno que hay demasiados resultados y hay errores, no hay mucho valor práctico y toma mucho tiempo de cómputo, por lo que esta consulta no se usará en negocios reales.

Pero esta consulta es la base para todas las consultas de tablas.

seleccione usuario .nombre , carrera .nombre from usuario , carrera    ; #No   se utilizan alias seleccione u.nombre , c.nombre from usuario u , carrera c ; #Usar alias para consulta cruzada

consulta de unión interna

Se pueden seleccionar los datos que existen en ambas tablas, es decir, los datos de intersección de las dos tablas

Divididos en conexión interna implícita y conexión interna explícita, los dos se escriben de manera diferente y los resultados obtenidos son exactamente los mismos.

unión interna implícita

SELECCIONE la lista de campos DE la tabla 1, la tabla 2 DONDE la lista de condiciones;

unión interna explícita

SELECCIONE la lista de campos DE la tabla 1 [INTERIOR] ÚNASE a la tabla 2 EN la lista de condiciones de conexión [DONDE declaración de juicio];

INTERIOR puede omitirse

Si desea agregar Dónde a esta declaración, debe prestar atención a que la declaración ON debe estar entre DESDE y DONDE

La secuencia de ejecución es: primero mostrar la conexión interna y luego ejecutar Where en el resultado de la conexión

Precauciones

Es posible que falten datos al usar uniones internas, y se perderán los valores NULL

seleccione u. nombre , u. edad , c. nombre del usuario u , carrera c   donde u. carrera_id = c. id ;   # consulta implícita ; seleccione los registros con el mismo usuario.carrera_id y carrera.id , y muestre los registros correspondientes Los campos user.name , user, age , carrera.nombre ; en este momento, si user.career_id tiene un valor nulo o carrera.id tiene un valor nulo, se perderán los datos correspondientes al valor nulo (en este momento, el sexto Los datos)
seleccione u. nombre , u. edad , c. nombre del usuario que se une a la carrera c   en u. carrera_id = c. id #consulta explícita; los resultados de las dos consultas son los siguientes

seleccione u. nombre , u. edad , c. nombre del usuario que se une a carrera c   on u. id_carrera = c. id donde u. edad > 20 #Consulta explícita para filtrar los resultados anteriores, seleccione los datos cuya edad es mayor que 20

Consulta de unión externa

Seleccione toda la información de una sola tabla (tabla principal), y luego agregue la información de la intersección de las dos tablas

izquierda combinación externa

SELECCIONE la lista de campos DESDE la tabla 1 IZQUIERDA [EXTERIOR] ÚNASE a la tabla 2 EN la lista de condiciones;

[EXTERIOR] se puede omitir

Consultar todos los datos en la tabla 1, incluidos los datos en la intersección de la tabla 1 y la tabla 2

seleccione u. nombre , u. edad , c. nombre del usuario que dejó unirse a la carrera c en u.carrera_id = c.id ; #La combinación externa izquierda muestra toda la información de los campos de nombre y edad correspondientes de la tabla de usuarios , y luego agrega usuario La intersección de y career.id

unión externa derecha

SELECCIONE la lista de campos DESDE la tabla 1 DERECHA [EXTERIOR] ÚNASE a la tabla 2 EN la lista de condiciones;

[EXTERIOR] se puede omitir

Consultar todos los datos en la tabla 2, incluidos los datos en la intersección de la tabla 1 y la tabla 2

seleccione u. nombre , u. edad , c. nombre del usuario u right join carrera c on u. carrera_id = c. id ; #La combinación externa derecha muestra toda la información de la sección de nombre correspondiente de la tabla de carreras y luego agrega user.career_id e Intersección de career.id

consulta de unión automática

Utilice esta tabla para hacer una demostración de la consulta de autounión (esta tabla registra la tabla de identificación de los empleados y sus supervisores correspondientes, es decir, el nombre de la identificación correspondiente a managerid es el nombre del supervisor)

Conéctese para consultar por sí mismo, que puede ser una conexión interna o una conexión externa

Formato

SELECCIONE la lista de campos DE la tabla A alias A ÚNASE a la tabla A alias B EN la lista de condiciones;

seleccione e1.name , e2.name ' supervisor de emp e1 únase a emp e2 en e1.managerid = e2.id ; #Display   query , consulta quién es el supervisor correspondiente a cada empleado; puede entenderse como copiar emp como tabla e1 y la tabla e2 tiene dos tablas, asocie el ID de administrador de la tabla e1 con el ID de e2 como clave externa y luego muestre el nombre de la tabla e1 y el nombre de la tabla e2 (aquí, habrá omisiones al usar el método de unión interna explícito )  
seleccione e1.name , e2.name ' Boss ' from emp e1 left join   emp e2 on e1.managerid = e2.id ; #Izquierda conexión externa, también se muestran los empleados sin líderes


reglas de subconsulta

Una subconsulta (Subconsulta) también se puede denominar consulta anidada, que es una consulta anidada en la cláusula Where de otras consultas SQL; una instrucción que contiene una subconsulta se denomina instrucción externa

  1. Las subconsultas deben estar encerradas entre ()
  2. Por lo general, la declaración SELECT de una subconsulta tiene solo un campo, a menos que haya varias columnas en la declaración externa que deban compararse con las columnas de la subconsulta.
  3. Las subconsultas no se pueden aplicar directamente a funciones agregadas y las subconsultas no pueden usar ORDER BY
  4. Los tipos de datos Ntext, texto e imagen no se pueden usar en la lista de selección de una subconsulta
  5. La palabra clave DISTINCT no se puede utilizar con subconsultas que contengan GROUP BY

Clasificación de Subconsultas

Según los diferentes resultados de la subconsulta, se puede dividir en 4 categorías

subconsulta escalar resultados de subconsulta como un solo valor

Subconsulta de columna El resultado de la subconsulta es una columna y múltiples filas

Subconsulta de fila El resultado de la subconsulta es una fila con múltiples columnas

Subconsulta de tabla El resultado de la subconsulta son varias filas y varias columnas.

De acuerdo con las diferentes posiciones de la subconsulta, se puede dividir aproximadamente en tres categorías

Hay tres casos principales en los que se aplican subconsultas:

Están después de DONDE, después DE y después de SELECCIONAR

De acuerdo con las diferentes declaraciones externas de la subconsulta, se puede dividir aproximadamente en cuatro categorías

Las declaraciones fuera de la subconsulta pueden ser

Cualquiera de INSERTAR / ACTUALIZAR / ELIMINAR / SELECCIONAR

Diferentes resultados para subconsultas

Consulta a través de las siguientes dos tablas

Subconsulta escalar: el resultado de la consulta solo debe devolver una fila y una columna de resultados, es decir, un valor determinado

Dado que el resultado de su subconsulta es un valor único, se puede utilizar para realizar operaciones aritméticas

Operadores comunes: = , <> , > , >= , < , <=

select * from emp where dept_id =( select id from dept where name = ' sales department ' ) ; #Consulte a todos los empleados correspondientes al departamento de ventas (primero consulte la identificación correspondiente al departamento de ventas y luego consulte a los empleados de acuerdo con la identificación ) seleccione * de emp donde fecha de entrada >= ( seleccione fecha de entrada de emp donde nombre = ' Zhang San ' ) ; #Consulte toda la información del empleado después de la entrada de Zhang San (primero consulte la información de entrada de Zhang San y luego consulte la información del empleado después de esta hora

Subconsulta de columna: el resultado devuelto es una columna con varias filas

Operadores de uso común:

IN Seleccione uno del rango establecido especificado por IN

NOT IN no está dentro del rango establecido especificado

Cualquiera de la lista de retorno de subconsulta ANY es suficiente

ALGUNOS es equivalente a CUALQUIER

Todos los valores de la lista devuelta por la subconsulta ALL deben cumplir

seleccione * de emp donde salario > todos ( seleccione salario de emp donde dept_id =( seleccione id de dept donde nombre = ' Departamento de I + D ' )) ; #Consulte la información del empleado cuyo salario es más alto que el de todos los empleados financieros (primero consulte la identificación correspondiente del departamento financiero , use esta identificación para consultar el salario de los empleados en el departamento financiero y luego busque la información de los empleados cuyo salario es mayor que este)

Subconsulta de fila: el resultado devuelto es una fila con varias columnas

Operadores comunes: =, <>, IN, NOT IN

select * from emp where ( salario , managerid ) = ( select Salary , managerid from emp where name = ' Li Si ' ) ; #Consulte la información de otros empleados con el mismo salario y liderazgo que Li Si

Subconsulta de tabla: el resultado devuelto es varias filas y varias columnas

Operadores de uso común: IN

a menudo aparece después de

seleccione * de emp donde ( dept_id , salario ) en ( seleccione dept_id , salario de emp donde nombre = ' Old Five ' o nombre = ' Li Si ' ) ;  # consulta para otros empleados con el mismo departamento y el mismo salario que Lao Wu o Li Si Información del empleado 

seleccione e.* , nombre del departamento de ( seleccione * de emp donde fecha de entrada > '2001-01-01' ) eleft join dept on e.dept_id = dept.id ; #Consulta la información del empleado y la información del departamento correspondiente cuyo tiempo de entrada es mayor que 2001-01-01

EXISTE 和 NO EXISTE

El formato es: EXISTE (subconsulta)

EXISTS se utiliza para comprobar si la subconsulta devuelve al menos una fila de datos; si la subconsulta devuelve al menos una fila de datos, es verdadero; si la subconsulta no devuelve datos, es falso

En algunos casos, también se pueden usar los campos IN o ANY en su lugar

NO EXISTE es lo contrario de EXISTE

select * from emp donde existe ( select * from emp where id = 10 ) ; #Mientras haya un valor de id=10 , consulta la tabla emp y el resultado no es ningún dato
 select * from emp where exist ( select * from emp donde id = 1 ) ; #Mientras haya un valor de id=1 , consulta la tabla emp y el resultado son los datos de la tabla emp

Diferentes lugares donde se aplican las subconsultas

Hay tres situaciones principales en las que se aplica la subconsulta: después de DONDE, después DE y después de SELECCIONAR

En la cláusula Where , las subconsultas generales se aplican después de where

Lo que hemos demostrado arriba son todas las subconsultas después de where

Generalmente formal: SELECT * FROM t1 WHERE column1= ( SELECT column1 FROM t2 );

En la cláusula From : el conjunto de resultados devuelto por la subconsulta en este momento se usará como una tabla temporal, que también se denomina tabla derivada.

La tabla derivada debe configurarse con un alias y los nombres de las columnas de la tabla derivada deben ser únicos.

select * from 
     ( select origo , count ( * ) as number from staff1 group by origo ) as emp 
     where emp.number > 2 ; #Grupo por lugar de residencia, y consulta el número de personas en el lugar de residencia mayor que 2 (el el alias de la tabla derivada es emp)

Después de Seleccionar : solo se admite la subconsulta escalar, la subconsulta devuelve un valor único

SELECT (subconsulta) FROM table1;

El valor único devuelto por la subconsulta es un campo en la Tabla 1; esta consulta rara vez se usa

Aplicación de subconsultas en diferentes declaraciones externas

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

Experimentos basados ​​en las siguientes dos tablas

Subconsulta en declaración SELECT

seleccionar * del usuario donde carrera_id = ( seleccionar id de carrera donde nombre = ' chef ' ) ; #consultar quién es un chef en el usuario (subconsulta consulta id del chef , y luego declaración externa para consultar a la persona correspondiente a esta identificación)

Subconsultas en sentencias INSERT

inserte en usuario1 ( nombre , edad , carrera_id ) 
     seleccione * del usuario 
     donde carrera_id en ( seleccione id de carrera) ; #Agregue datos a la tabla de usuario1 , los datos agregados son la persona con una posición en la tabla de usuarios

Subconsultas en sentencias UPDATE

actualice el conjunto de usuarios edad = edad * 1.5 donde carrera_id = ( seleccione id de carrera donde nombre = ' chef ' ) ; #multiplique la edad del chef por 1.5

Subconsulta en declaración DELETE

borrar del usuario donde carrera_id = ( seleccionar id de carrera donde nombre = ' chef ' ) ; #Explicar la información de que la ocupación en la tabla de usuario es un chef

Supongo que te gusta

Origin blog.csdn.net/m0_49864110/article/details/131944306
Recomendado
Clasificación