LEFT JOIN ON AND 和LEFT JOIN ON WHERE区别

Posted ls11736

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LEFT JOIN ON AND 和LEFT JOIN ON WHERE区别相关的知识,希望对你有一定的参考价值。

SELECT E.ENAME,E.JOB,D.DNAME,D.DEPTNO FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO AND E.JOB=CLERK;
--LEFT JOIN ON AND含义:返回左表所有记录和右表与条件匹配的记录,即不管ON后面的判断是否为真,左表都会返回所有记录。

SELECT E.ENAME,E.JOB,D.DNAME,D.DEPTNO FROM EMP E LEFT JOIN DEPT D ON E.DEPTNO=D.DEPTNO WHERE E.JOB=CLERK;
--LEFT JOIN ON WHERE含义:关联出左表与右表记录后,过滤出只符合WHERE后面条件的记录,此时已经没有使用LEFT JOIN的含义了。

--总结,当需求是需要过滤记录时使用带WHERE的,而当需求是保留左表与复合条件的右表记录时使用AND.

--那么问题来了,我们知道左右连接中ON后面跟的条件是两个表的关系列,那么如果没有使用关系列连接是怎样的情况呢?
SELECT E.ENAME,E.JOB,D.DNAME,D.DEPTNO FROM EMP E LEFT JOIN DEPT D ON E.JOB=CLERK;
--似乎不好理解那么再做另一个查询
SELECT E.ENAME,E.JOB,D.DNAME,D.DEPTNO FROM EMP E RIGHT JOIN DEPT D ON E.JOB=CLERK;
--由上面两个结果集可以看出,左右连接返回的是符合条件的笛卡儿积记录和主表中还未在笛卡儿积中出现的主表记录。

 

以上是关于LEFT JOIN ON AND 和LEFT JOIN ON WHERE区别的主要内容,如果未能解决你的问题,请参考以下文章

深入Oracle的left join中on和where的区别详解

SQL中left join on 、right join on、inner join on之间的区别

left join on and 和left join on where 的区别

c# Linq left join 多个条件连接查询

浅谈!SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

MySql 之 left join 查询结果