关于 FROM a,b 和 a LEFT JOIN b on 的区别 ...

SQL连接类型详解
本文深入解析了SQL中INNER JOIN和LEFT JOIN的区别,通过具体实例展示了如何使用这两种连接方式来检索匹配和非匹配的数据记录,是数据库操作的重要参考资料。

SELECT * FROM a,b WHERE a.id=b.id

和 SELECT * FROM a LEFT JOIN b ON a.id=b.id

这两种写法有什么区别么 ...?

给个通俗的解释吧.
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a ,b where a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4

### SQL查询中LEFT JOIN语句在不同连接条件下的行为差异分析 在SQL查询中,`LEFT JOIN`是一种用于联结两个表的连接方式,返回左表中的所有记录以及右表中符合连接条件的记录。如果右表中没有匹配的记录,则返回NULL值[^2]。以下是对两种不同连接条件的行为差异分析: #### 1. 第一种连接条件:`a left join b on a.1=b.1 left join c on a.2=c.2` 在这种情况下,`c`表是基于`a`表的字段`a.2`与`c`表的字段`c.2`进行连接的。这意味着无论`b`表是否包含匹配的记录,`c`表的连接只依赖于`a`表的字段`a.2`。因此,即使`b`表中没有匹配的记录(即`b.1`为NULL),`c`表仍然会根据`a.2`字段尝试找到匹配的记录。 - 如果`a.2`字段在`c`表中有匹配的记录,则返回该记录。 - 如果`a.2`字段在`c`表中没有匹配的记录,则返回NULL。 这种连接方式确保了`c`表的连接完全独立于`b`表的结果,只依赖于`a`表的字段`a.2`。 #### 2. 第二种连接条件:`a left join b on a.1=b.1 left join c on b.1=c.1` 在这种情况下,`c`表是基于`b`表的字段`b.1`与`c`表的字段`c.1`进行连接的。这意味着`c`表的连接依赖于`b`表的结果。如果`b`表中没有匹配的记录(即`b.1`为NULL),则`c`表不会尝试找到匹配的记录,因为`b.1`为NULL时无法满足`b.1=c.1`的条件。 - 如果`b.1`字段在`c`表中有匹配的记录,则返回该记录。 - 如果`b.1`字段为NULL或在`c`表中没有匹配的记录,则返回NULL。 这种连接方式使得`c`表的连接依赖于`b`表的结果,因此`b`表中是否有匹配的记录直接影响到`c`表的连接结果。 #### 行为差异总结 - 在第一种连接条件下,`c`表的连接只依赖于`a`表的字段`a.2`,与`b`表的结果无关。 - 在第二种连接条件下,`c`表的连接依赖于`b`表的字段`b.1`,只有当`b`表中有匹配的记录时,`c`表才会尝试找到匹配的记录。 ```sql -- 示例代码 SELECT * FROM a LEFT JOIN b ON a.1 = b.1 LEFT JOIN c ON a.2 = c.2; -- c表的连接只依赖于a表的a.2字段 SELECT * FROM a LEFT JOIN b ON a.1 = b.1 LEFT JOIN c ON b.1 = c.1; -- c表的连接依赖于b表的b.1字段 ``` ### 结论 通过上述分析可以看出,`LEFT JOIN`语句在不同连接条件下的行为差异主要取决于连接条件中使用的字段。如果连接条件中使用的是左表的字段,则右表的连接独立于其他表的结果;如果连接条件中使用的是中间表的字段,则右表的连接依赖于中间表的结果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值