oracle-sql条件查询

概述

本文讲解条件查询,包括 单条件查询 和 多条件查询

单条件查询

语法

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

比较运算符

运算符 含义
= 等于
<> 或者 != 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于

例子

  1. 查询工资大于1500的雇员信息
    select * from emp where sal>1500
    
  2. 查询deptno是20的员工信息,仅列出编号、名字、工资
    select empno,ename,sal from emp where deptno=20
    

字符串的比较

  1. 查询job是manager的员工

    select * from emp where job='MANAGER'
    

    注意: 当值是字符串时,区分大小写,所以MANAGER必须大写

  2. 查询job不是manager的员工

    select * from emp where job<>'MANAGER'
    

判断是否为NULL

emp表中很多员工的comm字段值为空,其实是 NULL

  1. 查询comm 为空 的信息
    select * from emp where comm is null
    
  2. 查询comm 不为空 的信息
    select * from emp where comm is not null
    

多条件查询

逻辑运算符

在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
使用between...and关键字
select * from 表名 where 列名 between 小值 and 大值

注意: 包含最大值和最小值

sql如下:

select * from emp where sal between 800 and 3000

or

  1. 查询工资大于1500,或者奖金500以上的

    select * from emp where sal>1500 or comm>500
    
  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或者MANAGER,并且薪资大于1500的员工信息
    错误写法:

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

    正确写法:

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

in和not in

  1. 查询编号是7369、7499、7521的员工,按照之前学习的方法,sql语句如下:
    Select * from emp where empno=7369 or empno=7499 or empno=7521
    
    in 关键字相当于 or,使用 in 可以简化,如下:
    Select * from emp where empno in (7369,7499,7521)
    
  2. 查询编号 不是 7369、7499、7521的员工信息
    Select * from emp where empno not in (7369,7499,7521)
    

模糊查询 like

在百度、淘宝、微博搜索时,输入关键字,可以查询出 包含该关键字 的信息,在sql语句中称其为 模糊查询,用 like 关键字

语法

使用like 关键字,模糊查询部分使用下面两个符号

  • % 匹配 零个 或 多个 任意字符
  • _ 匹配一个任意字符
例子
  1. 查询名字的 首字母 是A的员工

    select * from emp where ename like 'A%'
    
  2. 查询名字中带 有A 的员工

    select * from emp where ename like '%A%'
    
  3. 查询名字 第二个字母 是A的员工

    select * from emp where ename like '_A%'
    

转义符

在模糊查询时,查询的结果中有%或_字符时,需要用到转义符

C/C++、java等开发语言中,也有转义符的概念

例子

查询名字中带有_的员工

select * from emp where ename like '%\_%' escape '\'
解释:

末尾处的escape '\',说明\是 转义字符,其作用就是将sql语句like '%\_%'中的_变为 普通符号,这样就能查询出名字中带有_的员工

练习

  1. 查询部门编号是30的员工所有信息

  2. 列出职位为(MANAGER )的员工的编号,姓名

  3. 找出奖金高于工资的员工

  4. 查询每个员工的姓名、工资、奖金、工资与奖金的和

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

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

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

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

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

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

  11. 找出姓名中不带R 这个字母的员工


原文出处:/show_1EF33NB4I94i.html