La diferencia entre on y where of left join en MySQL

Tabla de contenido

1 Construye una mesa

2 Insertar datos

3 prueba

3.1 Unión izquierda: una combinación izquierda B en A.id = B.id, el número de registros devueltos es el mismo que el número de registros en la tabla A, independientemente de si la tabla A / B puede coincidir

3.2 En la conexión de la izquierda, la diferencia entre el filtrado de condiciones y dónde

3.3 Unión a la izquierda usando donde ... es cláusula nula


[Asunto: la diferencia entre on y where in left join en MySQL]

1 Construye una mesa

drop table ASM_Product if exists;
create table ASM_Product(
ID int(11) unsigned not null auto_increment comment '主键ID',
Amount int(11) unsigned default null comment '数量',
PRIMARY KEY(ID)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='产品表'

drop table ASM_ProductDetails if exists;
create table ASM_ProductDetails(
ID int(11) unsigned not null auto_increment comment '主键ID',
Weight int(11) unsigned default null comment '重量',
Exist int(11) unsigned default null comment '是否有库存',
PRIMARY KEY(ID)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='产品详细信息表'

2 Insertar datos

insert into ASM_Product(Amount) values (100),(200),(300),(400);
insert into ASM_ProductDetails(ID, Weight,Exist) values (2,22,0),(4,44,1),(5,55,0),(6,66,1);

 seleccione * de ASM_Product; seleccione * de ASM_ProductDetails;

    

3 prueba

3.1 Unión izquierda: una combinación izquierda B en A.id = B.id, el número de registros devueltos es el mismo que el número de registros en la tabla A, independientemente de si la tabla A / B puede coincidir

seleccione * de ASM_Product p izquierda unirse a ASM_ProductDetails pd en p.ID = pd.ID;

3.2 En la conexión de la izquierda, la diferencia entre el filtrado de condiciones y dónde

"A left join B on conditional expression"  : "La condición en la expresión condicional on" se usa para determinar cómo recuperar filas de datos de la tabla B. Este proceso es la etapa de coincidencia de la tabla A y la tabla B. Si no hay una fila en la tabla B que coincida con la "condición en la expresión condicional", se generará una fila adicional de datos con todas las columnas nulas. En la fase de coincidencia, las "condiciones en la cláusula where" no funcionarán hasta el final de la fase de coincidencia, y las "condiciones en la cláusula where" no funcionarán. Recuperará y filtrará los datos generados en la fase de coincidencia.

(1) El uso de la condición ON determina que todas las filas de datos que cumplen la condición ON se recuperan de la tabla ASM_ProductDetails de la combinación izquierda.

seleccione * de ASM_Product p izquierda únase a ASM_ProductDetails pd en p.ID = pd.ID y pd.ID = 2;

(2) Después de la combinación izquierda, use la cláusula where para filtrar las filas de datos que no cumplen las condiciones where de los datos de combinación izquierda.

seleccionar * de ASM_Product p izquierda unirse a ASM_ProductDetails pd en p.ID = pd.ID donde pd.ID = 2;

(3) Se han recuperado todas las filas de datos de la tabla ASM_Product, pero no hay registros coincidentes en la tabla ASM_ProductDetails.

seleccione * de ASM_Product p izquierda únase a ASM_ProductDetails pd en p.ID = pd.ID y p.Amount = 100;

(4) Se han recuperado todas las filas de datos de la tabla ASM_Product y los registros también se comparan en la tabla ASM_ProductDetails.

seleccione * de ASM_Product p izquierda únase a ASM_ProductDetails pd en p.ID = pd.ID y p.Amount = 200;

3.3 Unión a la izquierda usando donde ... es cláusula nula

seleccione * de ASM_Product p izquierda únase a ASM_ProductDetails pd en p.ID = pd.ID y pd.Weight! = 44 y pd.Exist = 0 donde pd.ID es nulo;

Análisis: primero filtre la condición on para obtener el conjunto de resultados de la tabla B, combínelo en la tabla A y luego use la condición where para filtrar el conjunto de resultados.

seleccione * de ASM_Product p left join ASM_ProductDetails pd en p.ID = pd.ID y pd.Weight! = 44 y pd.Exist = 1 donde pd.ID es nulo;

Análisis: primero filtre la condición on para obtener el conjunto de resultados de la tabla B, combínelo en la tabla A y luego use la condición where para filtrar el conjunto de resultados.

 

Referencia : https://www.oschina.net/question/89964_65912

 

Supongo que te gusta

Origin blog.csdn.net/cmm0401/article/details/109855618
Recomendado
Clasificación