有时对where的要筛选的列不止一个时,那么就用到了and操作符和or操作符,and操作符顾名思义的意思是”并且“,而or操作符的意思是"或者"。

比如以部门员工表为例

MySQL的and操作符和or操作符_MySQL

查询部门编号为d001并且入职日期为 1985-02-02的员工编号,那么就要用到and操作符

select emp_no from dept_emp where dept_no='d001' and  from_date='1985-02-02';


MySQL的and操作符和or操作符_MySQL_02

那如果是查询部门编号为d001或者入职日期为 1985-02-02的员工编号,这时就要用到or操作符

select emp_no from dept_emp where dept_no='d001' or  from_date='1985-02-02';


MySQL的and操作符和or操作符_操作符_03

where可以包含任意数目的and和or操作符,允许两者结合进行复杂和高级的过滤。但如果两者都存在时,and操作符的计算次序会更高

比如查询部门d001或者或部门d002入职时间为1985-02-02的信息

可能错误地写成 

select * from dept_emp where dept_no='d001' or dept_no='d002' and from_date='1985-02-02';


此时的查询结果就变成这样,这就是由于and操作符的计算次序更高造成的

MySQL的and操作符和or操作符_操作符_04

更改为  or操作符的前后加上()就好了

select * from dept_emp where (dept_no='d001' or dept_no='d002' ) and from_date='1985-02-02';