MySQL - Sección 8 - Consultas compuestas de MySQL

Tabla de contenido

1. Revisión de consulta básica

2. Consulta multitabla

3. Auto-apego

4. Subconsultas

4.1 Subconsulta de una sola fila

4.2 Subconsultas de varias filas

4.2.1.in palabra clave

4.2.2.todas las palabras clave

4.2.3.cualquier palabra clave

4.3 Subconsultas de varias columnas

4.4 Uso de subconsultas en la cláusula from

5. Combinar consultas


1. Revisión de consulta básica

Prepare el formulario de prueba:

• A continuación se proporcionan tres tablas, a saber, la tabla de empleados (emp), la tabla de departamentos (dept) y la tabla de calificaciones salariales (salgrade).

• Las operaciones de consulta subsiguientes utilizarán estas tres tablas como fuentes de datos, incluidas las consultas básicas y las consultas compuestas.

La tabla de empleados (emp) contiene los siguientes campos La tabla de departamentos (dept) contiene los siguientes campos La tabla de calificaciones salariales (salgrade) contiene los siguientes campos

• Número de empleado (empno)

• Nombre del empleado (ename)

• Puesto de empleado (trabajo)

• Número de líder de empleado (gerente)

• Fecha de contratación

• Sueldo salario mensual (sal)

• bonificación (comunicación)

• Número de departamento (deptno)

• Número de departamento (deptno)

• Nombre del departamento (dname)

• Ubicación del departamento (loc)

• calificación

• Salario mínimo para este grado (losal)

• Salario máximo para este grado (hisal)

El contenido de la tabla de empleados (emp) es el siguiente:

El contenido de la tabla de departamentos (dept) es el siguiente:

El contenido de la tabla de escala salarial (salgrade) es el siguiente:

Consultar empleados cuyo salario sea superior a 500 o cuyo puesto sea GERENTE, y exigir que la primera letra del nombre del empleado sea una J mayúscula:

En la cláusula where, indique que la condición del filtro es que el salario sea mayor a 500 o que el puesto sea GERENTE, y especifique que la primera letra del nombre del empleado sea una J mayúscula mediante coincidencia aproximada, y especifique que las columnas a consultar son nombre, salario y puesto en la lista de columnas de select . como sigue:

Consulte la información de los empleados, muestre en orden ascendente el número de departamento y en orden descendente el salario del empleado:

En la lista de columnas de selección, indique que las columnas a consultar son nombre, número de departamento y salario, y en la cláusula order by, indique en orden ascendente por número de departamento y en orden descendente por salario del empleado, es decir, empleados en diferentes los departamentos se ordenan en orden ascendente por número de departamento, los empleados del mismo departamento se ordenan en orden descendente por salario del empleado. como sigue:

Consultar información de empleados, mostrar en orden descendente de salario anual:

En la lista de columnas de selección, indique que la columna a consultar es nombre y salario anual, y en la cláusula order by, indique que la columna está ordenada por salario anual en orden descendente. como sigue:

Explicar:

• Dado que el resultado del cálculo es NULL y cualquier valor es NULL, no puede agregar directamente 12 veces el salario mensual a la bonificación de cada empleado al calcular el salario anual, lo que puede resultar en un valor NULL para el salario anual.
• Al calcular el salario anual de cada empleado, se debe usar la función ifnull para determinar si el bono del empleado es NULL.Si no es NULL, la función ifnull devolverá el bono del empleado.Si es NULL, la función ifnull devolverá 0 para evitar involucrar valores NULL en el cálculo.

Encuentre los nombres y cargos de los empleados mejor pagados:

Para solucionar este problema se requieren dos consultas, primero se realiza una consulta en la tabla de empleados para obtener el salario máximo, y luego se realiza una consulta en la tabla de empleados de acuerdo al salario máximo para obtener el nombre y puesto del empleado cuyo salario es igual al salario máximo. como sigue:

Además, las subconsultas también se pueden usar para este tipo de problema, y ​​la declaración SQL de la primera consulta se puede encerrar entre corchetes y se puede usar directamente en la declaración SQL de la segunda consulta como el salario más alto. como sigue:

Consultar información de empleados cuyo salario es superior al salario medio:

Para solucionar este problema también se requieren dos consultas, primero se realiza una consulta a la tabla de empleados para obtener el salario promedio, y luego se realiza una consulta a la tabla de empleados en base al salario promedio para filtrar la información de los empleados cuyos el salario es más alto que el salario promedio. Este problema también se puede resolver usando la sub Consulta. como sigue:

Consulta el salario medio y el salario máximo de cada departamento:

Especifique la agrupación por número de departamento en la cláusula group by y use la función avg y la función max en la instrucción select para consultar el salario promedio y el salario máximo de cada departamento respectivamente. como sigue:

Consulta el número de departamento cuyo salario promedio es inferior a 2000 y su salario promedio:

En la cláusula group by, especifique la agrupación por número de departamento, use la función avg en la instrucción select para consultar el salario promedio de cada departamento y especifique en la cláusula que tiene que la condición de filtro es que el salario promedio sea inferior a 2000. como sigue:

Consulta el número total de empleados y el salario medio de cada puesto:

Especifique la agrupación por puesto en la cláusula group by y use la función de conteo y la función avg en la declaración de selección para consultar el número total de empleados y el salario promedio de cada puesto. como sigue:


2. Consulta multitabla

Consulta de varias tablas:

• Las consultas básicas anteriores se basan en una tabla, pero en el desarrollo real, a menudo es necesario asociar varias tablas para la consulta, lo que se denomina consulta de varias tablas.
• Al realizar una consulta de tablas múltiples, solo necesita colocar los nombres de las tablas múltiples después de la cláusula from y separarlos con comas. En este momento, MySQL tomará el producto cartesiano de las tablas múltiples dadas, como fuente de datos inicial para consultas de varias tablas.
• La esencia de la consulta de tablas múltiples es tomar el producto cartesiano de varias tablas dadas y luego consultar el producto cartesiano.
El llamado producto cartesiano de tablas múltiples es obtener el conjunto de todos los posibles pares ordenados de registros en estas tablas múltiples. Por ejemplo, la siguiente consulta de tablas múltiples se realiza en la tabla de empleados y la tabla de departamentos. Dado que la declaración de consulta no no especifica las condiciones del filtro, por lo que el resultado final es el producto cartesiano de la tabla de empleados y la tabla de departamentos.

Explicar:

• El producto cartesiano de la tabla de empleados y la tabla de departamentos consta de dos partes, la primera mitad es la información de las columnas de la tabla de empleados y la segunda mitad es la información de las columnas de la tabla de departamentos.
• Al tomar el producto cartesiano de la tabla de empleados y la tabla de departamentos, se seleccionará un registro de la tabla de empleados y se combinará con todos los registros de la tabla de departamentos, y luego se seleccionará un registro de la tabla de empleados y todos los registros de la tabla. tabla de departamentos Combinando, y así sucesivamente, el resultado final es el producto cartesiano de estas dos tablas.

Filtrado preliminar del producto cartesiano:

Cabe señalar que los datos obtenidos después de tomar el producto cartesiano de varias tablas no son todos significativos. Por ejemplo, al tomar el producto cartesiano de la tabla de empleados y la tabla de departamentos, la información de cada empleado en la tabla de empleados estará relacionada con la tabla de departamento Combinando la información de cada departamento en , pero solo tiene sentido para un empleado combinar con su propia información de departamento, por lo que es necesario filtrar el número de departamento del empleado y los registros iguales del número de departamento del producto cartesiano. como sigue:

Nota: Puede haber el mismo nombre de columna en varias tablas para el producto cartesiano. En este momento, al seleccionar el nombre de la columna, debe especificarse mediante nombre de tabla.nombre de columna. 

Ideas para resolver consultas de varias tablas:

1. De acuerdo con los requisitos, determine qué tablas están relacionadas.

2. A través del producto cartesiano y filtrado preliminar, "sin cerebro" se combina en una tabla (varias tablas se convierten en una tabla).

3. Piense en las consultas de varias tablas como consultas de una tabla.

Muestre el nombre del departamento, el nombre del empleado y el salario del empleado del departamento número 10:

Dado que el nombre del departamento solo está disponible en la tabla de departamentos, y el nombre del empleado y el salario del empleado solo están disponibles en la tabla de empleados, es necesario usar tanto la tabla de empleados como la tabla de departamentos para la consulta de varias tablas y especificar el filtro. condición en la cláusula where como el número de departamento del empleado es igual al número de departamento, y el registro con el número de departamento 10. como sigue:

Nota: La primera condición de filtro ya filtró los registros donde el número de departamento del empleado es igual al número de departamento, por lo que al filtrar el departamento cuyo número de departamento es igual a 10, puede usar el número de departamento en la tabla de empleados o el departamento número en la tabla de departamentos.

Muestra el nombre, el salario y el grado salarial de cada empleado:

Dado que el nombre del empleado y el salario solo están disponibles en la tabla de empleados, y el nivel de salario solo está disponible en la tabla de nivel de salario, es necesario usar la tabla de empleados y la tabla de nivel de salario para realizar consultas de tablas múltiples al mismo tiempo. En la cláusula where, especifique la condición de filtro como el salario del empleado en Registros entre losal y hisal. como sigue:

Nota:

1. En el producto cartesiano de la tabla de empleados y la tabla de grados salariales, se combinan la información de cada empleado y la información de cada grado salarial, de hecho, un empleado solo puede combinar la información de grado salarial correspondiente a su propio salario. .

2. Por lo tanto, es necesario juzgar si un empleado pertenece al nivel de salario según el salario mínimo y el salario máximo de cada nivel de salario, y luego filtrar los registros significativos.


3. Auto-apego

Auto unirse:

• Self-join se refiere a la consulta de join en la misma tabla, es decir, no solo podemos tomar el producto cartesiano de diferentes tablas, sino también tomar el producto cartesiano de la misma tabla.

• Si un campo en una tabla puede asociar varios registros en la tabla, entonces los registros asociados con el campo en la tabla se pueden combinar a través de la unión automática.

• Las tablas también pueden tener alias.Cuando se vinculan automáticamente, al menos una de las tablas debe tener alias, de lo contrario, las columnas de las dos tablas no se pueden distinguir.

Muestre el número y el nombre del supervisor del empleado FORD:

Para resolver este problema, puede usar una subconsulta, primero consulte la tabla de empleados para obtener el número del líder de FORD y luego consulte la tabla de empleados según el número del líder para obtener el nombre del líder de FORD. como sigue:

Además, la unión automática también se puede utilizar para resolver este problema, ya que el campo mgr en la tabla de empleados puede asociar la información del empleado en la tabla con la información del líder del empleado. como sigue:

Después de unirse automáticamente a la tabla de empleados, especifique en la cláusula where que la condición del filtro es que el número de liderazgo del empleado sea igual al número del líder. En este momento, los registros formados por la combinación de la información de cada empleado y su información de liderazgo pueden ser filtrado, y la condición del filtro se especifica más como empleado El nombre del empleado es FORD, luego puede filtrar los registros que consisten en la información del empleado FORD y la información de su líder. como sigue:

Nota: dado que la autounión es para tomar el producto cartesiano de la misma tabla, al menos una tabla debe tener un alias durante la autounión; de lo contrario, las columnas de las dos tablas no se pueden distinguir.


4. Subconsultas

subconsulta:

• Una subconsulta es una instrucción de consulta incrustada en otras instrucciones SQL, también denominada consulta anidada.

• Las subconsultas se pueden dividir en subconsultas de una sola fila, subconsultas de varias filas, subconsultas de varias columnas y subconsultas utilizadas en la cláusula from.

4.1 Subconsulta de una sola fila

• Una subconsulta de una sola fila se refiere a una subconsulta que devuelve datos en una sola fila y una sola columna.

Mostrar empleados en el mismo departamento que SMITH:

Consulte el número de departamento de SMITH en la subconsulta, especifique la condición de filtro en la cláusula where de que el número de departamento del empleado sea igual al número de departamento devuelto por la subconsulta y el nombre del empleado no sea SMITH. como sigue:

Además, la autounión también se puede utilizar para resolver este problema, porque la información de los empleados en el mismo departamento que SMITH también se encuentra en la tabla de empleados, por lo que después de la autounión en la tabla de empleados, especifique el nombre del empleado en la tabla. 1 como SMITH en la cláusula where, y Los números de departamento en la Tabla 1 y la Tabla 2 deben ser iguales, y el nombre del empleado en la Tabla 2 no es SMITH, para que la información del empleado en el mismo departamento que SMITH también se pueda filtrar. como sigue:

4.2 Subconsultas de varias filas

• La subconsulta de varias filas se refiere a una subconsulta que devuelve varias filas de datos de una sola columna

4.2.1.in palabra clave

Muestre los nombres, puestos, salarios y números de departamento de los empleados con los mismos trabajos que los del departamento 10, pero excluyendo a los empleados del departamento 10:

Primero verifique qué trabajos están disponibles en el departamento No. 10. Es mejor deduplicar los resultados al realizar la consulta, porque algunos empleados en el departamento No. 10 pueden tener los mismos trabajos. como sigue:

Luego use la consulta anterior como una subconsulta, use la palabra clave in en la cláusula where al consultar la tabla de empleados y juzgue que el puesto de trabajo del empleado es uno de los puestos obtenidos por la subconsulta. El empleado no incluye el departamento número 10, por lo que también es necesario especificar la condición de filtro en la cláusula where de que el número de departamento no sea igual a 10. como sigue:

4.2.2.todas las palabras clave

Muestre los nombres, salarios y números de departamento de los empleados cuyos salarios son más altos que todos los empleados del departamento 30:

Primero consulte los salarios de los empleados del departamento 30. Es mejor deduplicar los resultados al realizar la consulta, porque algunos empleados del departamento 30 pueden tener el mismo salario. como sigue:

Luego use la consulta anterior como una subconsulta y use la palabra clave all en la cláusula where al consultar la tabla de empleados para determinar si el salario del empleado es más alto que todos los salarios obtenidos por la subconsulta y, de ser así, cumple con el filtro. condiciones. como sigue:

Pero, de hecho, esta pregunta también es equivalente a encontrar empleados cuyo salario sea mayor que el salario más alto del departamento No. 30, por lo que también puede usar una subconsulta de una sola línea para obtener el salario más alto del departamento No. 30 y luego determinar si el salario del empleado es superior al salario más alto obtenido por la subconsulta Salario es suficiente. como sigue:

4.2.3.cualquier palabra clave

Muestra el nombre, salario y número de departamento de los empleados cuyo salario es superior al de cualquier empleado del departamento 30, incluidos los empleados del departamento 30:

Para resolver este problema, primero debe consultar el salario de los empleados en el departamento 30 y luego usar la palabra clave any en la cláusula where al consultar la tabla de empleados para determinar si el salario del empleado es mayor que uno de los salarios obtenidos. en la subconsulta. En caso afirmativo, cumpla con los criterios del filtro. como sigue:

Pero, de hecho, esta pregunta también es equivalente a encontrar empleados cuyo salario sea superior al salario mínimo del departamento No. 30, por lo que también puede usar una subconsulta de una sola línea para obtener el salario mínimo del departamento No. 30 y luego determinar si el salario del empleado es mayor que el salario mínimo obtenido por la subconsulta Salario es suficiente Dado que los empleados filtrados deben incluir el departamento 30, no hay necesidad de filtrar el número de departamento. como sigue:

4.3 Subconsultas de varias columnas

• Una subconsulta de varias columnas hace referencia a una subconsulta que devuelve datos en una sola fila y varias columnas.

Muestre a los empleados con el mismo departamento y puesto que SMITH, excluyendo al propio SMITH:

Primero consulte el número de departamento del departamento de SMITH y su posición. como sigue:

Luego use la consulta anterior como una subconsulta. Al consultar la tabla de empleados, en la cláusula where, especifique que la condición de filtro es que el número de departamento y la posición sean iguales al número de departamento y la posición obtenidos por la subconsulta, y que el nombre del empleado no es SMITH. como sigue:

Nota:

1. El resultado obtenido por una subconsulta de varias columnas son datos de varias columnas. Al comparar datos de varias columnas, las columnas múltiples que se compararán deben estar entre paréntesis.

2. Si la subconsulta de varias columnas devuelve varias filas de datos, también puede usar las palabras clave in, all y any al filtrar datos.

4.4 Uso de subconsultas en la cláusula from

La idea unificada de la tabla mysql:

• Desde nuestro punto de vista, mysql siempre tendrá una tabla.

• Si solo hay una tabla, se deben realizar varias consultas de selección y los resultados de todas las consultas de selección son una tabla.

• Si hay varias tablas, puede realizar una integración seleccionada antes de consultar y el resultado de la integración también es una tabla.

• Las subconsultas pueden aparecer no solo en la cláusula where, sino también en la cláusula from.

• Cuando aparece una instrucción de subconsulta en la cláusula from, el resultado de la consulta se utilizará como una tabla temporal.

• La subconsulta de varias filas resuelve la subconsulta de datos de una sola columna de varias filas, y la subconsulta de varias columnas resuelve la subconsulta de datos de varias columnas de una sola fila. utilícelo en la solución de subconsulta de la cláusula from.

Muestre el nombre, el departamento, el salario y el salario promedio del departamento para cada empleado cuyo salario sea superior al salario promedio de su departamento:

Primero consulta el salario promedio de cada departamento. como sigue:

Dado que la información que se muestra contiene el salario promedio del departamento, es necesario usar la tabla de empleados y los resultados de la consulta anterior para realizar una consulta de varias tablas al mismo tiempo. En este momento, la consulta anterior se puede colocar en la cláusula from como una subconsulta, y luego se recuperan la tabla de empleados y la tabla temporal Cálculo, especifique en la cláusula where que la condición de filtro es que el número de departamento del empleado es igual al número de departamento en la tabla temporal, y el salario del empleado es mayor que el salario medio del cuadro temporal. como sigue:

Nota: Cuando utilice una subconsulta en la cláusula from, debe dar un alias a la tabla temporal obtenida por la subconsulta, de lo contrario, la consulta fallará.

Muestra el nombre, el salario, el departamento y el salario más alto del departamento del empleado con el salario más alto en cada departamento:

Primero consulta el salario máximo para cada departamento. como sigue:

Coloque la consulta anterior como una subconsulta en la cláusula from, luego tome el producto cartesiano de la tabla de empleados y la tabla temporal, y especifique en la cláusula where que la condición de filtro es que el número de departamento del empleado sea igual al número de departamento en el mesa temporal, y el salario del empleado Igual al salario más alto de la mesa temporal. como sigue:

Muestre el nombre del departamento, el número de departamento, la ubicación y el número de empleados de cada departamento:

En la cláusula group by, especifique la agrupación por número de departamento y consulte la cantidad de personal en cada departamento por separado. como sigue:

Coloque la consulta anterior como una subconsulta en la cláusula from, luego tome el producto cartesiano de la tabla de empleados y la tabla temporal, y especifique en la cláusula where que la condición de filtro es que el número de departamento del empleado sea igual al número de departamento en la tabla temporal. como sigue:

Además, además del método anterior de subconsulta + consulta de varias tablas, también puede usar solo la consulta de varias tablas para resolver este problema.

• Tome primero el producto cartesiano de la tabla de empleados y la tabla de departamentos.

• En la cláusula where, indique que la condición de filtro es que el número de departamento del empleado sea igual al número de departamento y filtre los registros significativos.

• Especifique la agrupación por número de departamento en la cláusula order by y cuente el número de personas en cada departamento por separado.

como sigue:

Sin embargo, dado que el título también requiere que se muestre el nombre del departamento y la dirección de cada departamento, es necesario agregar la agrupación por nombre y dirección del departamento en la cláusula group by. como sigue:

Explicar:

• Debido a que el nombre y la dirección del departamento se agregaron recientemente en la declaración de selección, estos dos campos deben agregarse en la cláusula group by, lo que indica que cuando los números de departamento son iguales, se agrupan por nombre de departamento y cuando los nombres de departamento también son lo mismo, continuar Agrupar por dirección.
• Sin embargo, en el escenario anterior, los registros con el mismo número de departamento deben tener el mismo nombre y dirección de departamento, por lo que nos parece sin sentido continuar agregando estos dos campos en el grupo por, pero la declaración de MySQL nos obliga a agregarlos. .


5. Combinar consultas

La consulta combinada hace referencia a la combinación de varios resultados de consulta, y los operadores que se pueden utilizar son union y union all.

• La unión se utiliza para obtener la unión de dos resultados de consulta y la unión eliminará automáticamente las filas duplicadas en el conjunto de resultados.

• union all también se utiliza para obtener la unión de dos resultados de consulta, pero union all no eliminará las filas duplicadas en el conjunto de resultados.

Mostrar empleados cuyo salario sea mayor a 2500 o cuyo puesto sea GERENTE:

El SQL para consultar empleados cuyo salario es mayor a 2500 es el siguiente:

El SQL para consultar a los empleados cuyo puesto es GERENTE es el siguiente:

Para consultar empleados cuyo salario es superior a 2500 o cuyo puesto es GERENTE, puede utilizar el operador o para conectar las dos condiciones en la cláusula where. como sigue:

En la consulta combinada, puede usar el operador de unión para conectar los dos SQL de consulta anteriores. En este momento, se obtendrá la unión de los dos resultados de la consulta y se eliminarán los duplicados de los resultados combinados. como sigue:

Además, también puede usar el operador union all para conectar los dos SQL de consulta anteriores. En este momento, también obtendrá la unión de los dos resultados de la consulta, pero los resultados combinados no se deduplicarán. como sigue:

Explicar:

• El número de columnas de los dos resultados de la consulta que se fusionarán debe ser el mismo, de lo contrario no se pueden fusionar.

• Los atributos de columna correspondientes a los dos resultados de consulta que se van a combinar pueden ser diferentes, pero esto no se recomienda.

Supongo que te gusta

Origin blog.csdn.net/qq_45113223/article/details/131363357
Recomendado
Clasificación