外连接 ON 条件的三个作用 SQL中on条件与where条件的区别

来源:互联网 发布:淘宝电商运营必备表格 编辑:程序博客网 时间:2024/04/29 09:24

 

SELECT *
  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 NULL
2 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 NULL
2 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

0 0
原创粉丝点击