SQL语句where子句同时包含and和or/left join多个表的情况

当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逻辑运算。

文章排版比较乱,例子也有点复杂,见谅…
本文仅为个人记录总结所用,如有错误/侵犯,感谢指出/联系我删除。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值