Mysql之 详解JOIN
文 / @UTHEME
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里不支持,但可以

相关文章
-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02