一. 概述
上一篇文章里,已经了解了基本的select查询语句。但是往往在生产环境中,一个表的数据量是巨大的,也就是说,如果使用[SELECT *]或者查找某一列的全部值[SELECT COLUMN_NAME FROM TABLE_NAME]不仅查询地慢影响性能,还不能立马找到自己想要的数据,这时候就需要过滤语句来实现准确定位目标信息。本篇文章主要介绍了[SELECT…WHERE…]过滤语句以及[ORDER BY]排序语句的用法。
二. WHERE子句
只使用 SELECT 和 FROM 子句查询表,会返回表中所保存数据的所有行。使用 DISTINCT 关键字,可以排除重复值,在某种程度上限制了结果行。但如果要从表中查询非常明确的信息,需要使用 where 子句对返回的结果行进行限制。所以WHERE子句的作用为:限制查询检索的行。
2.1 WHERE子句基本语法
SELECT…FROM…WHERE CONDITION(S)
–WHERE子句紧随FROM子句
–WHERE子句后跟条件表达式
- where子句中的条件有许多形式,只有表中符合这些条件的行才会返回
- where子句中不能使用列的别名
- 如果条件列是数字型的,可以直接写;
如果条件列是字符型的,需要使用单引号;
如果条件列是日期型的,要注意日期格式,单引号。 - 示例:查询10号部门的员工姓名
SCOTT@oradb> select ename,deptno from emp where deptno=10;
ENAME DEPTNO
---------- ----------
CLARK 10
KING 10
MILLER 10
2.2 WHERE子句中的字符和日期
字符和日期要包含在单引号中;
字符大小写敏感,日期格式敏感
默认的日期格式是:DD-MON-RR
- 查询工作是CLERK的员工信息
SCOTT@oradb> select * from emp where job='CLERK';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- -------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
SCOTT@oradb> select * from emp where job='clerk';
no rows selected
- 查询入职时间是1980-12-17的员工信息
SCOTT@oradb> select * from emp where hiredate='17-DEC-80';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- -------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
- 转换函数to_date
格式:to_date(’…’,‘yyyy-mm-dd’),…为想要转换的日期,yyyy-mm-dd指的是被转换日期的现有格式。该函数作用是将日期转换为默认日期格式的日期。
SCOTT@oradb> select * from emp where hiredate = to_date('1980-12-17','yyyy-mm-dd');
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- -------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
2.2.1 数据库默认日期格式
SCOTT@oradb> col property_name for a30
SCOTT@oradb> col property_value for a40
select property_name,property_value from database_properties
2 where property_name = 'NLS_DATE_FORMAT';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ----------------------------------------
NLS_DATE_FORMAT DD-MON-RR
2.2.2 当前会话默认日期格式
SCOTT@oradb> col parameter for a20
SCOTT@oradb> col value for a30
SCOTT@oradb> select * from v$nls_parameters where parameter='NLS_DATE_FORMAT';
PARAMETER VALUE CON_ID
-------------------- ------------------------------ ----------
NLS_DATE_FORMAT DD-MON-RR 0
2.2.3 修改当前会话日期格式
SCOTT@oradb> select sysdate from dual;
SYSDATE
---------
07-SEP-22
SCOTT@oradb> alter session set nls_date_format ='yyyy-mm-dd hh24:mi:ss';
Session altered.
SCOTT@oradb> select sysdate from dual;
SYSDATE
-------------------
2022-09-07 14:27:44
退出sqlplus后重新登录后恢复默认
2.3 比较操作符
| 操作符 | 含义 |
|---|---|
| = | Equal to 值相等 |
| > | 大于 |
| >= | 大于或等于 |
| < | 小于 |
| <= | 小于或等于 |
| <>/!= | 不等于 |
| BETWEEN…AND… | 在范围值内 |
| IN(SET) | 匹配值列表中的任意值 |
| LIKE | 匹配字符 |
| IS NULL | 非空 |
示例:
SCOTT@oradb> select * from emp where deptno!=10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- -------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 800 20
00:00:00
7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
00:00:00
7521 WARD SALESMAN 7698 1981-02-22 1250 500 30
00:00:00
7566 JONES MANAGER 7839 1981-04-02 2975 20
00:00:00
7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
00:00:00
7698 BLAKE MANAGER 7839 1981-05-01 2850 30
00:00:00
7788 SCOTT ANALYST 7566 1987-04-19 3000 20
00:00:00
7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
00:00:00
7876 ADAMS CLERK 7788 1987-05-23 1100 20
00:00:00
7900 JAMES CLERK 7698 1981-12-03 950 30
00:00:00
7902 FORD ANALYST 7566 1981-12-03 3000 20
00:00:00
2.3.1 含空值的不等于比较
包含空值的列进行比较(表达式),需要对空值进行处理。
例:查询工资大于奖金的员工
- 不对空值进行处理,含空值的那一行数据无法进行比较,结果不会显示。
SCOTT@oradb> select * from emp where sal>comm;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
- 将空值转换为0,能正常比较
SCOTT@oradb> select * from emp where sal>nvl(comm,0);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
2.3.2 WHERE子句中的rownum伪列
rownum伪列是对查询出来的结果集进行处理,加上一个伪列。所以rownum总是从1开始排列。
- 根据rownum的定义规则,条件中必须包含rownum=1这个值才会正常输出结果。
select rownum,deptno,dname from dept;
select rownum,deptno,dname from dept where rownum =2;
select rownum,deptno,dname from dept where rownum >2;
select rownum,deptno,dname from dept where rownum <=2;
以上四个语句只有第一条和第四条能够查询到数据
- rownum< 和 and 并用时,先执行and后的条件,返回满足的数据后,再进行rownum<
SCOTT@oradb> select rownum,ename,deptno from emp where rownum<2;
ROWNUM ENAME DEPTNO
---------- ---------- ----------
1 SMITH 20
2.3.3 BETWEEN…AND…
- 查询工资在800-1000范围内的员工信息
SCOTT@oradb> select * from emp where SAL between 800 and 1000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
BETWEEN…AND…包含上下边界,小的值必须写在前面
- 查询日期在’09-JUN-81’和’23-JAN-82’之间的员工信息
SCOTT@oradb> select * from emp where hiredate between '09-JUN-81' and '23-JAN-82';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
- 查询员工姓名首字母在A和C之间的员工信息
SCOTT@oradb> select * from emp where ename between 'A' and 'C';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
注意在查询between ‘A’ and ‘C’的时候包含’C’,但是不包括以’C’开头的字母,例如查询A与B之间的
SCOTT@oradb> select * from emp where ename between 'A' and 'B';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
2.3.4 列举 IN
- 查询经理编号是 7902 或者 7566 或者 7788 的员工信息
SCOTT@oradb> select empno,ename,sal,mgr from emp where mgr in (7902,7566,7788);
EMPNO ENAME SAL MGR
---------- ---------- ---------- ----------
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
7902 FORD 3000 7566
上面的sql语句等价
select empno,ename,sal,mgr from emp where mgr=7902 or mgr=7566 or mgr=7788;
- NOT IN()
与IN()作用相反,IN()的作用是找出满足()范围内值的信息,NOT IN()则是显示出不满足()范围内值的其他信息。
SCOTT@oradb> select * from emp where comm in (300,500);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
需要注意的是,使用in和not in 如果目标列含有空值,空值对应的行是不会显示的。
2.3.5 模糊查询 like
使用like运算选择类似的值,筛选条件可以包含字符或数字:
%:代表一个或多个字符
_:代表一个字符
- 查询姓名中包含MI的员工信息
SCOTT@oradb> SELECT * FROM EMP WHERE ENAME LIKE '%MI%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
2.3.5.1 转义 [ESCAPE]
该功能的目的是:查询实际字符中包含’%‘或者’_'的时候避免系统识别为通配符
- 创建一个测试表,并修改一个人名使其带有’_’。

- 查询名字中带有’_'的的员工信息
按照like使用方法语句应该如下:
select * from emp1 where ename like '%_%';
但是这样’_'会被数据库认定为通配符,代表一个字符;而这个查询语句的含义就变成了查询这张表的所有ename不为空的员工信息。所以此时需要转义符使其后面的通配符失去通配功能。
- 正确示例:
SCOTT@oradb> select * from emp1 where ename like '%\_%' escape '\';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788 OCM_DBA ANALYST 7566 19-APR-87 3000 20
其中’\'转移符可以自定义字符,只要按照以上格式正确编写,都能够正确查询。
2.3.6 空值比较 [IS NULL / IS NOT NULL]
对于空值的查询不能使用=和<>,空值无法直接进行比较,应该使用is/is not来代替
select * from emp where comm is null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
10 rows selected.
SCOTT@oradb> select * from emp where comm is not null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
2.4 逻辑运算符
| 操作符 | 含义 |
|---|---|
| AND | 逻辑与,两个条件都为真则返回true |
| OR | 逻辑或,其中一个条件为真就返回true |
| NOT | 逻辑否,如果条件为假则返回true |
在本章前几小节就已经含有逻辑运算符的应用,这一节就不详细说明了。
2.4.1 AND
- 查询工资大于等于 1100 并且工作是 CLERK 的员工信息
SCOTT@oradb> select empno,ename,job,sal from emp where sal>=1100 and job='CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7876 ADAMS CLERK 1100
7934 MILLER CLERK 1300
2.4.2 OR
- 查询经理编号是 7902 或者 7566 或者 7788 的员工。
SCOTT@oradb> select empno,ename,sal,mgr from emp where mgr=7902 or mgr=7566 or mgr=7788;
EMPNO ENAME SAL MGR
---------- ---------- ---------- ----------
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
7902 FORD 3000 7566
2.4.3 NOT
- 查询工作不是 CLERK、MANAGER、ANALYST 的员工姓名,职位。
SCOTT@oradb> select ename,job from emp where job not in ('CLERK','MANAGER','ANALYST');
ENAME JOB
---------- ---------
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
KING PRESIDENT
TURNER SALESMAN
2.5 优先级
对于复杂的查询语句,在where子句的条件当中一定包含了许多操作符,这个时候就有一个优先级规则让数据库判断优先执行哪个条件
| 优先级 | 操作符 |
|---|---|
| 1 | 算数运算符 |
| 2 | 连接符 |
| 3 | 比较符 |
| 4 | IS [NOT] NULL,LIKE,[NOT] IN |
| 5 | [NOT] BETWEEN |
| 6 | 不等于 |
| 7 | NOT |
| 8 | AND |
| 9 | OR |
三. ORDER BY子句
3.1 order by基本语法
SELECT … ORDER BY CONDITIONS [DESC]
ASC:升序排列,默认
DESC:降序排列
- CONDITIONS可以是列名/别名/列序号/表达式
- order by子句是select语句中最后一个子句,放在末尾
3.2 升序,降序排列
- 升序是默认的,指定ASC与不指定是等效的
输出按工资从低到高的顺序排列的员工表
SCOTT@oradb> SELECT * FROM EMP ORDER BY SAL;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
- 降序,需要指定DESC
输出按工资从高到低的顺序排列的员工表
SCOTT@oradb> select * from emp order by sal desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 5000 10
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7369 SMITH CLERK 7902 17-DEC-80 800 20
3.3 按照列的别名排序
SCOTT@oradb> select ename,sal salary from emp order by salary;
ENAME SALARY
---------- ----------
SMITH 800
JAMES 950
ADAMS 1100
WARD 1250
MARTIN 1250
MILLER 1300
TURNER 1500
ALLEN 1600
CLARK 2450
BLAKE 2850
JONES 2975
SCOTT 3000
FORD 3000
KING 5000
- 注意如果列的别名需要区分大小写而使用了双引号,在orderby后面也需要使用双引号。
3.4 按照列序号排序
在 ORDER BY 子句中,也可以根据列的位置序号指定对哪一列进行排序:1 表示按第1列排序, 2 表示按第 2 列排序,依此类推。列序号:列在 select 子句中出现的位置。
SCOTT@oradb> select empno,ename,deptno from emp order by 3;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
7566 JONES 20
7902 FORD 20
7876 ADAMS 20
7369 SMITH 20
7788 SCOTT 20
7521 WARD 30
7844 TURNER 30
7499 ALLEN 30
7900 JAMES 30
7698 BLAKE 30
7654 MARTIN 30
上面的sql语句表示按照deptno对查询出的结果进行升序排列
3.5 多个列的排序
多列排序,先按第一列,然后按第二列、第三列…依次排序
SCOTT@oradb> select * from emp order by deptno,sal desc;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7839 KING PRESIDENT 17-NOV-81 5000 10
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7900 JAMES CLERK 7698 03-DEC-81 950 30
只有在deptno值相同的时候,才对第二个字段sal的数据进行排序
3.6 排序中的null值
包含 null 值的列排序时,默认把 null 值看做无限大:
在升序排序时,nulls 排在最后面
在降序排序时,nulls 排在最前面
3.7 order by的限制
- order by 后面不能跟 LOB、LONG、LONG ROW 类型的列。
- select 语句中有 distinct 关键字,order by 后面的列 必须出现在select 子句中。
- order by 根据字符排序时,区分大小写
四. 练习
4.1 查询员工的姓名和工资,要求工资大于$2850.
SCOTT@oradb> SELECT ENAME,SAL FROM EMP WHERE SAL>2850;
ENAME SAL
---------- ----------
JONES 2975
SCOTT 3000
KING 5000
FORD 3000
4.2 查询员工的姓名和工资,要求工资在$1500 和$2850 之间.
SCOTT@oradb> SELECT ENAME,SAL FROM EMP WHERE SAL BETWEEN 1500 AND 2850;
ENAME SAL
---------- ----------
ALLEN 1600
BLAKE 2850
CLARK 2450
TURNER 1500
4.3 查询员工的姓名和工资,要求工资不在$1500 和$2850 之间,按工资升序排序.
SCOTT@oradb> SELECT ENAME,SAL FROM EMP WHERE SAL NOT BETWEEN 1500 AND 2850 ORDER BY SAL;
ENAME SAL
---------- ----------
SMITH 800
JAMES 950
ADAMS 1100
WARD 1250
MARTIN 1250
MILLER 1300
JONES 2975
SCOTT 3000
FORD 3000
KING 5000
4.4 查询出部门号为 10 和 30 的所有员工的姓名、工作、入职时间,按照入职时间的降序排序。
SCOTT@oradb> SELECT ENAME,JOB,HIREDATE FROM EMP ORDER BY HIREDATE DESC;
ENAME JOB HIREDATE
---------- --------- ---------
ADAMS CLERK 23-MAY-87
SCOTT ANALYST 19-APR-87
MILLER CLERK 23-JAN-82
FORD ANALYST 03-DEC-81
JAMES CLERK 03-DEC-81
KING PRESIDENT 17-NOV-81
MARTIN SALESMAN 28-SEP-81
TURNER SALESMAN 08-SEP-81
CLARK MANAGER 09-JUN-81
BLAKE MANAGER 01-MAY-81
JONES MANAGER 02-APR-81
WARD SALESMAN 22-FEB-81
ALLEN SALESMAN 20-FEB-81
SMITH CLERK 17-DEC-80
4.5 查询出姓名中第二个字母为:'A’的所有员工姓名。
SCOTT@oradb> SELECT ENAME FROM EMP WHERE ENAME LIKE '_A%';
ENAME
----------
WARD
MARTIN
JAMES
4.6 查询员工的姓名、工作、工资,要求工作是 Clerk 或 Analyst,并且工资不等于$1000、$3000、$5000。
SCOTT@oradb> SELECT ENAME,JOB,SAL FROM EMP WHERE JOB IN('CLERK','ANALYST') AND SAL NOT IN (1000,3000,5000);
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ADAMS CLERK 1100
JAMES CLERK 950
MILLER CLERK 1300




