概念
左连接(Left Join):以左表为主表,左表中每条数据都会跟右表所有数据进行对比一次,当所有条件不满足时,对应的右表数据以 null 显示
|
|
右连接(Right Join):跟左连接相反, 以右表为主表,右表中每条数据都会跟左表所有数据进行对比一次,当所有条件不满足时,对应的左表数据以 null 显示
2 |
|
内连接(inner join): 本质其实就是 左连接 + 右连接 查询出来的结果 取交集
3 |
|
概念看不懂?没关系,来看一下案例:
(1)首先准备两张表,数据如下:
客户表(Customers):
订单表(Orders):
左连接:
SELECT * FROM Customers LEFT JOIN Orders ON Customers.id = Orders.CustomerId;
执行流程:
左表 张三 会跟Orders表所有数据进行条件判断,可以知道,当CustomerId=1时,条件满足,所以打印该条数据,然后继续判断,满足条件就打印,直到跟右边所有数据比较完毕。接下来看李四,李四跟张三一样,首先会将他的id 跟Orders表所有数据进行对比,但此时所有条件都不满足,所以Orders表(右表)的数据以null显示,因为是左连接,所以左表无论条件是否满足,都会显示输出!
ps:上述只有当李四 所有条件都不满足时,所有条件都不满足时,所有条件都不满足时!重要的事情进三遍,李四对应的右表数据才会以null的形式打印
右连接:
SELECT * FROM Customers RIGHT JOIN Orders ON Customers.id = Orders.CustomerId;
执行流程:
右表为主表,打印右表的所有记录和左表中连接字段相等的记录
内连接:
SELECT * FROM Customers INNER JOIN Orders ON Customers.id = Orders.CustomerId;
执行流程:
左连接和右连接查询出来的结果取交集
总结
无论是左连接还是右连接或者内连接,它们都会生成一个中间表来返回数据,区别在于on,如果是左连接,无论 on 后面的条件是否成立,左边表的数据都会返回,右连接同理!
补充:如果语句后面还有 where 语句,则相当于对生成的中间临时表进行过滤,此时就不管 outher join了,只有满足 where 条件的才会返回。