FROM a LEFT JOIN b ON a.id=b.id
AND a.id=1 AND b.id=2
这里 ON 中有三个条件,其意义分别为:
a.id=b.id 两个表的连接条件,只有 a.id 与 b.id 相同的记录才进行匹配。可以看到 a.id=b.id 指定如何匹配;a.id=1 表示谁被匹配(不表示最终结果的筛选条件);b.id=2 表示用谁去匹配(不表示最终结果的筛选条件)。
实例
表 a:
id v----
1 a1
2 a2
3 a3
4 a4
5 a5
表 b:
id v----
1 b1
2 b2
3 b3
4 b4
5 b5
SQL 语句:
SELECT *FROM a LEFT JOIN b ON a.id=b.id
AND a.id=1 AND b.id=2
结果:
1 a1 NULL NULL2 a2 NULL NULL
3 a3 NULL NULL
4 a4 NULL NULL
5 a5 NULL NULL
为什么会有这样的结果呢,据条件可知:a 表只有第一条记录被匹配,后面的记录都不被匹配;b 表只拿第二条记录去匹配 a 表的第二条记录,可是 a 表的第二条记录不参加匹配,所以 b 表结果全部为 NULL。
SQL 语句:
SELECT *FROM a LEFT JOIN b ON a.id=b.id
AND a.id>1 AND b.id=2
结果:
1 a1 NULL NULL2 a2 2 b2
3 a3 NULL NULL
4 a4 NULL NULL
5 a5 NULL NULL
RIGHT JOIN
RIGHT JOIN 和 LEFT JOIN 类似,只是颠倒一下“主表”和“辅表”,如下 SQL 语句
SELECT *FROM a RIGHT JOIN b ON a.id=b.id
AND a.id=1 AND b.id=2
a.id=1 表示用谁去匹配(不表示最终结果的筛选条件);b.id=2 表示谁被匹配(不表示最终结果的筛选条件)。
原文地址:http://www.cftea.com/c/2007/12/UIEINMQSAOVJIRP5.asp
SQL中on条件与where条件的区别数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
假设有两张表:
表1:tab2 idsize110220330表2:tab2 sizename10AAA20BBB20CCC第一条SQL的过程:
1、中间表tab1.idtab1.sizetab2.sizetab2.name11010AAA22020BBB22020CCC330(null)(null)||2、再对中间表过滤
tab1.idtab1.sizetab2.sizetab2.name11010AAA第二条SQL的过程:
1、中间表(条件不为真也会返回左表中的记录)tab1.idtab1.sizetab2.sizetab2.name11010AAA220(null)(null)330(null)(null)其实以上结果的关键原因就是left join,right join,full join的特殊性,
原文地址:http://hi.baidu.com/benben1006/blog/item/187deb77bc0e5319b151b974.html
欢迎加入我的QQ交流群425783133