[Notas de MYSQL] Cálculo de agrupación y consulta de tablas múltiples

pantalla de grupo

 

select 列名 from 表名 group by 用于分组的列名

El objeto de procesamiento después de la agrupación es "todos los registros en el mismo grupo"

Ejemplo: id, ventas, mes

Agrupe por ID de empleado y muestre las ventas totales por empleado

select id,sum(sales) as 合计
from tb 
group by id

 Agrupe por identificación de empleado y calcule el promedio de ventas para cada grupo

select id,avg(sales) from tb
group by id;

 Establecer visualización de grupo de condiciones

select 统计列 from 表名 by 分组列 having 条件

teniendo para la extracción de registros se realiza después de la agrupación 

Ejemplo: Calcule las ventas totales por grupo de identificación de empleado y solo muestre registros con ventas totales de grupo mayores o iguales a 2 millones de yuanes

select id,sum(sales) from tb
group by id
having sum(sales)>=200;

Si agrupa después de extraer registros:

Ejemplo: solo extraiga registros con ventas mayores o iguales a 500,000 yuanes y use los registros como objetos para calcular las ventas promedio de cada empleado

select id,avg(sales)
from tb where sales>=50
group by id;

Si ordena después de agrupar:

Ejemplo: Mostrar las ventas promedio de cada empleado en orden descendente

select id,avg(sales)
from tb
group by id
order by avg(sales) desc;//先分组后排序

Recuerda el orden: donde->agrupar por->ordenar por (desc)

Usar varias tablas:

Tabla de ejemplo:

 Obtener registros de varias tablas y mostrarlos juntos

select 列表1 from 表名1 union select 列名2 from 表名2;

Si fusiona dos tablas con la misma estructura de columnas

select *from tb1 
union 
select *
from tb2;

 Combine múltiples resultados de extracción según las condiciones para mostrar:

Agregue la condición where al final de cada comando

Ejemplo: combine el número de empleados con ventas superiores o iguales a 2 millones de yuanes en tb, y el número de empleados de empleados antiguos con una edad de 35 años o más en la tabla tb1 (cualquiera puede estar satisfecho)

(select id from tb where sales>=200)
union
(select id from tb1 where age>=35);

Cuando se ejecuta la instrucción, la operación de "eliminar registros duplicados" se realiza automáticamente. Hay una cierta cantidad de tiempo de espera si realiza una operación de "eliminación de duplicados" en una gran cantidad de registros.

Eliminar duplicados:

(select id from tb where sales>=200)
union all
(select id from tb1 where age>=35);
//在union后加上all允许重复

Unir varias tablas y mostrar (unión interna):

El proceso de unir varias tablas mediante alguna tecla de unión se denomina "unión". Une dos tablas usando join

select 列名 from 表1
join 要连接的表2
on 表1的列=表2的列

Seleccione una columna para mostrar: escriba el nombre de la columna como "nombre de la tabla.nombre de la columna".

Solo mostrar id, nombre, ventas

select tb.id,tb1.name,tb.sales from tb
join tb1
on tb.id=tb1.id;

Agregue un alias a la tabla:

select *from tb as x;

 El nombre de la columna de visualización se puede escribir como "alias.column name", que se puede simplificar y escribir

Ejemplo: el alias de la tabla tb es x, el alias de la tabla tb1 es y, se muestra el id y las ventas en tb y el nombre en tb1

Idea: conecte los registros que coincidan con el ID de columna de tb con el ID de columna de tb1 y luego muestre el ID de columna de la tabla tb, el nombre de columna de la tabla tb1 y las ventas de columna de la tabla tb. Estos procesos se realizan bajo la premisa de que se agrega el alias "x" a la tabla tb y el alias "y" a la tabla tb1.

select x.id,y.name,x.sales
from tb as x
join tb1 as y
on x.id=y.id;

 Use usando para hacer que la sección de encendido sea más fácil de leer

Cuando los dos nombres de columna utilizados como clave de unión son los mismos, se puede simplificar usando

select x.id,y.name,x.sales
from tb as x
join tb1 as y
using(id);

Obtener registros de la tabla de unión mediante la condición de configuración

Agrega la condición where al final. El nombre de la columna debe escribirse de acuerdo con "nombre de la tabla.nombre de la columna" (o alias.nombre de la columna).

Ejemplo: tome los logros sobresalientes con ventas de más o igual a 1 millón de yuanes en tb como la identificación del objeto, ventas, y muéstrelo junto con el nombre en tb1.

Idea: Conecte la tabla tb y la tabla tb1 según el id, y muestre los registros con un valor mayor o igual a 100 en la columna de ventas de la tabla tb. Muestre la identificación de la columna, el nombre de la columna, las ventas de la columna y agregue los alias "número de empleado", "nombre", "ventas" respectivamente

select tb.id as 员工号,tb1.name as 姓名,tb.sales as 销售额
from tb join tb1
using(id)
where tb.sales>=100

Extraer registros de varias tablas

select ~ from tb
join tb1 连接条件(on或者using)
join tb2 连接条件
join tb3 连接条件
...;

Ejemplo: conecte la tabla de información de ventas tb, la tabla de información de empleados tb1 y la tabla de lugar de nacimiento del empleado tb3, mostrando el número de empleado (tb.id), las ventas (tb.sales), el nombre (tb1.name) y el lugar de nacimiento (tb3). .religión).

select tb.id,tb.sales,tb1.name,tb3.region
from tb
join tb1 using(id)
join tb3 using(id);

Mostrar todos los registros de varias tablas (unión externa )

Una combinación interna que use la combinación solo extraerá registros que coincidan con la clave de combinación, es decir, registros que son comunes. Si desea mostrar registros que no son comunes, debe usar una combinación externa.

La combinación externa obtendrá todos los registros en otra tabla incluso si no coincide con la clave de combinación.

Tipos de juntas exteriores:

seleccionar de la tabla 1 unirse a la tabla 2

Combinación externa izquierda: muestra los registros coincidentes y todos los registros en la tabla 1

Combinación externa derecha: muestra los registros coincidentes y todos los registros en la tabla 2

Use una combinación externa izquierda:

select 列名
from 表1
left join 要连接的表2
on 表1的列=表2的列

 Ejemplo: si utiliza id como clave de combinación, utilice la combinación externa izquierda para mostrar los registros coincidentes de la tabla tb y la tabla tb1, así como todos los registros de la tabla tb. Pero solo se muestran la identificación de la columna de la tabla tb y el nombre de la columna de tb1

select tb.id,tb1.name
from tb
left join tb1
using(id);

Si la identificación en tb no se registra en tb1, entonces el nombre se muestra como nulo

Use una combinación externa derecha:

select 列名 from 表1
right join 要连接的表2
on 表1的列=表2的列;

Ejemplo: Usando id como clave, use una combinación externa derecha para mostrar los registros que coinciden con la tabla tb y la tabla tb1, así como todos los registros de la tabla tb1. Mostrar solo la identificación de la columna de la tabla tb y el nombre de la columna de la tabla tb1

select tb.id,tb1.name
from tb
right join
tb1
using(id);

 La combinación de combinaciones externas izquierda y derecha puede generar errores en el futuro.

Nota: la combinación izquierda se puede escribir como combinación externa izquierda. Del mismo modo, la combinación derecha se puede escribir como combinación externa derecha 

Autoconexión:

Une la tabla consigo misma, es decir, con la tabla del mismo nombre. Para distinguir diferentes columnas, se deben usar alias al unir

select 列名 from 表名 as 别名1 
join 表名 as 别名2;

Ejemplo: Autoconectarse a la información del empleado tb1 y mostrar todas las columnas

select * from tb1
as a
join tb1
as b;

 Dado que la tabla tb1 está conectada a sí misma con un nombre diferente, todos los registros de su propiedad se conectarán con todos los registros de su propiedad (n*n)

El papel de la autoconexión:

La autoconexión incluirá todas las combinaciones. ¿Puedes seleccionar lo que quieres filtrando y poniendo condiciones?

Subconsulta:

Ejecute la consulta (subconsulta) y luego use los registros recuperados para seguir ejecutando la consulta.

Por ejemplo, en la primera etapa, extraiga "números de empleados con ventas superiores o iguales a 2 millones de yuanes" y luego "extraiga los nombres correspondientes de los números de empleados extraídos" en la segunda etapa. La primera etapa de la consulta se denomina subconsulta.

Las subconsultas en la primera etapa pueden devolver valores, columnas y registros, etc.

Ejemplo: Registros tb de tabla explícitos con el mayor valor de ventas (subconsulta que devuelve valores)

Idea: Extraiga el valor de max(sales) en la consulta de la primera etapa y luego seleccione el registro que contiene la columna de valor máximo de ventas en la segunda etapa

select * from tb 
where sales in (select max(sales) from tb); 

Ejemplo: Calcule la edad promedio de los empleados en tb1 y extraiga registros de empleados mayores o iguales a la edad promedio (subconsulta para el valor de retorno)

select * from tb1 
where age>=(select avg(age) from tb1);

Ejemplo: nombres explícitos de empleados con ventas superiores o iguales a 2 millones de RMB (subconsulta para columnas de devolución): uso en

Idea: Extraiga el id cuyas ventas (ventas) en la tabla de información de ventas tb sea mayor o igual a 200, y luego muestre el nombre en tb1

select * from tb1
where id in
(select id from tb where sales>=200);

Está bien usar = cuando solo hay un registro

Diferencias entre subconsultas y uniones internas que obtienen resultados:

Subconsulta:

select id,name
from tb1
where id in(select id from tb);

Aquí, se mostrarán los registros que coincidan con la identificación de tb en tb1

Unir internamente:

select tb1.id,tb1.name
from tb1
join tb
on tb1.id=tb.id;

Aquí, se mostrarán todos los registros en tb

Supongo que te gusta

Origin blog.csdn.net/m0_52043808/article/details/124119662
Recomendado
Clasificación