Mysql之 详解JOIN

文 / @WordPress主题

Mysql之详解JOIN

JOIN是SQL中的一种查询方式,它可以将两张表中的数据联结起来,从而更加方便地查询到需要的数据。在使用JOIN的过程中,我们需要掌握JOIN的执行顺序、不同JOIN的区别以及ON和WHERE的区别等知识点。

1. JOIN的执行顺序

一个完整的SQL语句会被拆分成多个子句,子句的执行过程中会产生虚拟表(vt),但是结果只返回最后一张虚拟表。从这个思路出发,我们可以理解JOIN查询的执行过程。

在执行JOIN查询时,SQL语句里第一个被执行的总是FROM子句。在FROM子句中会对左右两张表执行笛卡尔积,产生第一张表vt1,行数为n*m(n为左表的行数,m为右表的行数)。然后根据ON的条件逐行筛选vt1,将结果插入vt2中。接着根据JOIN的类型(INNER/LEFT/RIGHT/FULLJOIN)添加外部行,生成vt3。最后根据WHERE条件过滤vt3,结果存储在vt4中。最终SELECT取出vt4的指定字段到vt5中,作为最终结果返回给客户端。

2. 不同JOIN的区别

INNER/LEFT/RIGHT/FULLJOIN的区别如下:

INNERJOIN...ON...: 返回左右表互相匹配的所有行(因为只执行上文的第二步ON过滤,不执行第三步添加外部行)。

LEFTJOIN...ON...: 返回左表的所有行,若某些行在右表里没有相对应的匹配行,则将右表的列在新表中置为NULL。

RIGHTJOIN...ON...: 返回右表的所有行,若某些行在左表里没有相对应的匹配行,则将左表的列在新表中置为NULL。

FULLJOIN: 在mysql里不支持,但可以

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。