oracle学习笔记(七):where 子句(条件查询)


接上一篇 oracle学习笔记(四):select 语句(查询语句)


1、查询 emp 表中 20 号部门的员工信息:

SQL> select * from emp where deptno = 20;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

2、查询姓名是 SMITH 的员工,字符串使用单引号(' '),内容大小写敏感(select * from emp where ename = 'smith';查询失败):

SQL> select * from emp where ename = 'SMITH';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20

3、查询 1980 年 12 月 17 日入职的员工,注意 oracle 默认日期格式(DD-MON-RR 表示2位的年份):

SQL> select * from emp where hiredate = '17-12月-80';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20

4、查询工资大于 2500 的员工:

SQL> select * from emp where sal > 2500;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

5、查询工资不等于 1500 的员工【 != 或 <> 】:

SQL> select * from emp where sal <> 1500;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

已选择13行。

6、查询薪水在 1300 到 1600 之间的员工,包括 1300 和 1600 :

SQL> select * from emp where (sal>=1300) and (sal<=1600);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

或者

SQL> select * from emp where sal between 1300 and 1600;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

7、查询薪水不在 1300 到 1600 之间的员工(即小于 1300,且大于 1600),不包括 1300 和 1600:

SQL> select * from emp where sal NOT between 1300 and 1600;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

已选择11行。

8、查询入职时间在 "1981-2月-20" 到 "1982-1月-23" 之间的员工(between and 不光能用于数字,也能用于日期):

SQL> select * from emp where hiredate between '20-2月-81' and '23-1月-82';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

已选择11行。

9、查询 20 号或 30 号部门的员工:

SQL> select * from emp where (deptno=20) or (deptno=30);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

已选择11行。

或者使用关键字 in:括号里面的数据可以无序,也可以写多个,比如 where deptno in (30,20,80,50,200);

SQL> select * from emp where deptno in (30,20);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

已选择11行。

10、查询不是 20 号或 30 号部门的员工:

SQL> select * from emp where deptno NOT in (30,20);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

11、查询姓名以大写字母 S 开头的员工,使用 like 模糊查询(% 表示 0 个,1个或多个字符):

SQL> select * from emp where ename like 'S%';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20

12、查询姓名以大写字母 N 结束的员工:

SQL> select * from emp where ename like '%N';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30

13、查询姓名第一个字母是 T,最后一个字母是 R 的员工:

SQL> select * from emp where ename like 'T%R';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30

14、查询姓名是 4 个字符的员工,且第二个字符是 I,使用 _ 只能表示 1 个字符,不能表示 0 个或多个字符:

SQL> select * from emp where ename like '_I__';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7839 KING       PRESIDENT        17-11月-81    5000           10

15、查询员工姓名中含有 '_' 的员工,使用转义字符,让其后的字符回归本来意思【like '%\_%' escape '\'】:

首先在 emp 表中插入一条 姓名为 T_TOM 的员工:

SQL> insert into emp(empno,ename) values(8888,'T_TOM');

已创建 1 行。

然后使用转义字符查询: escape 关键字用于指定 转义字符(即被 escape 指定的转义字符后面的 字符回归其本来意思);

SQL> select * from emp where ename like '%\_%' escape '\';

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM

注意:escape 指定的转义字符可以是 \,也可以是其他字符、字母、或 数字等; 

SQL> select * from emp where ename like '%*_%' escape '*' -- 指定转义字符为 *;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM

SQL> select * from emp where ename like '%@_%' escape '@' -- 指定转义字符为 @;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM

SQL> select * from emp where ename like '%E_%' escape 'E' -- 指定转义字符为 E;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM

SQL> select * from emp where ename like '%5_%' escape '5' -- 指定转义字符为 5;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM

注意:上面 sql 语句中的 (-- 指定转义字符为 *) 是注释。

16、查询佣金为 null 的员工:(null 不能用 = ,可以用关键字 is)

SQL> select * from emp where comm is null;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 8888 T_TOM
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

已选择11行。

17、查询佣金不是 null 的员工:

SQL> select * from emp where comm is not null;

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30

18、查询无佣金 且 工资大于 1500 的员工:

SQL> select * from emp where (comm is null) and (sal>1500);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

已选择6行。

19、查询工资是 1500 或 3000 或 5000 的员工:

SQL> select * from emp where sal in (1500,3000,5000);

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7788 SCOTT      ANALYST     7566 19-4月 -87    3000           20
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7902 FORD       ANALYST     7566 03-12月-81    3000           20

20、查询职位是 "MANAGER" 或 职位不是 "ANALYST" 的员工(方式一,使用 != 或 <>):

SQL> select * from emp where (job='MANAGER') or (job<>'ANALYST');

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

已选择12行。

方式二:使用 not

SQL> select * from emp where (job='MANAGER') or (not(job='ANALYST'));

EMPNO ENAME      JOB          MGR HIREDATE       SAL  COMM DEPTNO
----- ---------- ---------- ----- ------------ ----- ----- ------
 7369 SMITH      CLERK       7902 17-12月-80     800           20
 7499 ALLEN      SALESMAN    7698 20-2月 -81    1600   300     30
 7521 WARD       SALESMAN    7698 22-2月 -81    1250   500     30
 7566 JONES      MANAGER     7839 02-4月 -81    2975           20
 7654 MARTIN     SALESMAN    7698 28-9月 -81    1250  1400     30
 7698 BLAKE      MANAGER     7839 01-5月 -81    2850           30
 7782 CLARK      MANAGER     7839 09-6月 -81    2450           10
 7839 KING       PRESIDENT        17-11月-81    5000           10
 7844 TURNER     SALESMAN    7698 08-9月 -81    1500     0     30
 7876 ADAMS      CLERK       7788 23-5月 -87    1100           20
 7900 JAMES      CLERK       7698 03-12月-81     950           30
 7934 MILLER     CLERK       7782 23-1月 -82    1300           10

已选择12行。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值