MySQL-sql多条件查询

逻辑运算符

在C/C++、java语言的 if语句 中,当有 多个条件 时,要用到 逻辑运算

在sql中的多条件查询也与之类似,要用到 逻辑运算符,如下:

  • 与:and,查询结果同时满足多个条件,优先级 高
  • 或:or,查询结果至少满足一个条件,优先级 低

语法:

select * from 表名 where 列名 [比较运算符] 值 [逻辑运算符] 列名 [比较运算符] 值

and

查询工资大于1500,并且job是MANAGER的记录

select * from emp where sal>1500 and job='MANAGER'

查询范围

例子:查询工资在800至3000的员工

select * from emp where 800<=sal and sal<=3000

or

  1. 查询工资大于2000,或者奖金大于等于300的

    SELECT * FROM emp WHERE sal>2000  OR comm>=300
    
  2. 查询 没有奖金 的员工信息

    select * from emp where comm is null or comm=0
    
  3. 查询 有奖金 的员工信息

    select * from emp where comm is not null and  comm<>0
    
  4. 查询 job是salesman,或者 工资大于3000的 记录

    SELECT  * FROM emp WHERE job='salesman' OR sal >3000
    

查询job是SALESMAN或者MANAGER,并且薪资大于1500的员工信息
错误写法:

select * from emp where job='SALESMAN' OR JOB='MANAGER' AND 1500<SAL

正确写法:

-- and相当于 乘除,优先级高;or相当于 加减,优先级低
select * from emp where (job='salesman' or job='manager') and sal>1500

相当于:

 1 + 4 的结果,乘以 5

0+1  *  5  -- 结果正确,但过程错误

(0+1) * 5

练习

  1. 找出部门10 中的经理(MANAGER)和部门20 中的普通员工(CLERK)

  2. 找出部门10 中既不是MANAGER也不是CLERK,而且工资大于等于2000 的员工

  3. 找出有奖金的员工的不同工作

  4. 找出没有奖金或者奖金低于500 的员工,老员工在前面

  5. 显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

  6. 查询出工资大于等于1600,小于等于3000的员工,工资多的在前面


原文出处:/show_1IXXRCp3v8m.html