MySql 学习笔记 -- 连接表(JOIN)

INNER JOIN内连接:

MySql 学习笔记 -- 连接表(JOIN)_第1张图片

将一个表中的行与其他表中的行进行匹配

SELECT

column_list

FROM

t1

INNER JOIN t2 ON join_condition1

INNER JOIN t3 ON join_condition2

...

WHERE where_conditions;

由于连接使用的是同一个列,所以可以使用这种格式:

SELECT

productCode, productName, textDescription

FROM

products

INNER JOIN productlines USING (productline);
 


LEFT JOIN

当使用LEFT JOIN子句将t1表加入t2表时,如果来自左表t1的行与基于连接条件(t1.c1 = t2.c1)的右表t2匹配,则该行将被包含在结果集中。

如果左表中的行与右表中的行不匹配,则还将选择左表中的行并与右表中的“”行组合。“”行对于SELECT子句中的所有相应列都包含NULL值。

换句话说,LEFT JOIN子句允许您从匹配的左右表中查询选择行记录,连接左表(t1)中的所有行,即使在右表(t2)中找不到匹配的行也显示出来,但使用NULL值代替。

下图可帮助您可视化LEFT JOIN子句的工作原理。 两个圆圈之间的交点是两个表中匹配的行,左圆的剩余部分(白色部分)是t1表中不存在t2表中任何匹配行的行。 因此,左表中的所有行都包含在结果集中。

MySql 学习笔记 -- 连接表(JOIN)_第2张图片

同上,查询相同列的时候使用USING(列名)更加方便

左连接可以用于查询两个表中不匹配的行

 

CROSS JOIN:

从连接的表返回行的笛卡儿积

假设使用CROSS JOIN连接两个表。 结果集将包括两个表中的所有行,其中结果集中的每一行都是第一个表中的行与第二个表中的行的组合。 当连接的表之间没有关系时,会使用这种情况。

要特别注意的是,如果每个表有1000行,那么结果集中就有1000 x 1000 = 1,000,000行,那么数据量是非常巨大的。

selct * from t1 cross join t2 where t1.id = t2.id

 

也可以用INNER JOIN,LEFT JOIN进行自连接

你可能感兴趣的:(MySql)