当sql语句中where子句同时包含and和or
例子所用表如下:
dep表:
emp表:
salary表:
今天笔试的时候被一个两次left join的sql语句难倒了我,所以通过例子来验证一下,然后又发现where子句中同时and和or的情况,所以来此宝地记录总结一下。
测试用sql语句:
SELECT * from
(SELECT e.ename,d.dname,s.salary from emp2 e LEFT JOIN dep d on e.did = d.did
LEFT JOIN salary s on e.eid = s.eid) t4
WHERE t4.ename='李三' OR t4.dname='第三部' and t4.salary>8000 ;
首先看一下两个left join的查询结果:
此时WHERE t4.ename=‘李三’ OR t4.dname=‘第三部’ and t4.salary>8000 ; 运行整个sql语句的查询结果:
结果即为查询dname='第三部’且salary>8000的记录 或者姓名为’李三’的记录;
当把where子句改成
SELECT * from
(SELECT e.ename,d.dname,s.salary from emp2 e LEFT JOIN dep d on e.did = d.did
LEFT JOIN salary s on e.eid = s.eid) t4
WHERE (t4.ename='李三' OR t4.dname='第三部') and t4.salary>8000 ;
即为(ename='李三’且salary>8000) 或者 (dname='第三部且salary>8000)
可见,当 where t4.ename=‘李三’ or t4.dname=‘第三部’ and t4.salary>8000 时 and比or优先,先进行and逻辑运算。
文章排版比较乱,例子也有点复杂,见谅…
本文仅为个人记录总结所用,如有错误/侵犯,感谢指出/联系我删除。