在使用left join时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
可以理解为,左表记录保留,右表不满足条件的填写为null
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1 tab1:
id size
1 10
2 20
3 30
表2 tab2:
size name
10 AAA
20 BBB
20 CCC
两条SQL:
1、select * form tab1left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
2、select * form tab1left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
第一条SQL的过程:
1、中间表
on条件:
tab1.size = tab2.size
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)
2、再对中间表过滤
where 条件:
tab2.name=’AAA’
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
第二条SQL的过程:
1、中间表
on条件:
tab1.size = tab2.size and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)
其实以上结果的关键原因就是leftjoin,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
分享到:
相关推荐
SQL left join用法,初学者应用
MSSQL数据库编程规范 才整理出来的规范..
记录个人MSSQL学习笔记,包括行列转换、不同数据库链接、备份数据库等。
2012年10月,mssql个人学习笔记 。(以oracle scott为例,讲述创建表,查询, 分页 等功能)
MSSQL内外连接(INNER JOIN)语句详解
•AlwaysOn在辅助服务器(Secondary Server)上维护用户数据库组的副本,同步提交方式能够使Primary Server和Secondary Server上的数据保持完全同步; •在特定的配置情况下,客户端的只读请求可以被自动定向到辅助...
本笔记是sql2005的学习笔记,记载了mssql的常用内容和范例,初学都有用
mssql ,全国省市三级联动,sqlmssql ,全国省市三级联动,sqlmssql ,全国省市三级联动,sqlmssql ,全国省市三级联动,sqlmssql ,全国省市三级联动,sqlmssql ,全国省市三级联动,sql
MSSQL2000与MSSQL2005在JDBC URL上有些区别。
自己整理出来的, 初学者很适合, 数据库创建, 表的创建, 修改, 存储过程, 事务, 游标, 都有,
基于MSSQL的省市县三级联动
Mssql 存储过程 返回值Return 与output 区别与应用,示例说明
python数据库编程:Python连接Mssql基础教程之Python库pymssql 前⾔ pymssql模块是⽤于sql server数据库(⼀种数据库通⽤接⼝标准)的连接。另外pyodbc不仅限于SQL server,还包括 Oracle,MySQL,Access,Excel等。 本...
MSSQL中所有字段类型的区别。
高级注入笔记
将MSSQL的数据类型与编程语言对应起来,更好的使用编程语言中的数据类型
热备份笔记,两个虚拟机,win200832位,数据库sqlserver2008,已经实现联机热备份,欢迎交流! 优点:无磁盘整列,双备份,快速切换,全自动无人值守! readme.txt 包括4分文档,以及我做的双机热备的5个截图。 ...
一个MSSQLServer数据库编程案例需求说明,需要用到VS2008 MSSQLSERVER2005 作为开发工具
三层的物资管理软件Delphi+MSSQL三层物资管理系统源代码