最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

第4讲 限定查询和排序 oracle

来源:动视网 责编:小OO 时间:2025-10-06 04:11:00
文档

第4讲 限定查询和排序 oracle

第4讲限定查询和排序一、使用Where子句限定查询1、where中限定所选择的数据行例:查询部门号为10的员工编号、姓名、工作SQL>selectempno,ename,jobfromempwheredeptno=10;EMPNOENAMEJOB------------------------7782CLARKMANAGER7839KINGPRESIDENT7934MILLERCLERK思考?查询管理者(mgr)编号为7566的雇员姓名、管理者编号和部门编号。2、where子句中使用比较运算符
推荐度:
导读第4讲限定查询和排序一、使用Where子句限定查询1、where中限定所选择的数据行例:查询部门号为10的员工编号、姓名、工作SQL>selectempno,ename,jobfromempwheredeptno=10;EMPNOENAMEJOB------------------------7782CLARKMANAGER7839KINGPRESIDENT7934MILLERCLERK思考?查询管理者(mgr)编号为7566的雇员姓名、管理者编号和部门编号。2、where子句中使用比较运算符
第4讲 限定查询和排序

一、使用Where子句限定查询

1、where中限定所选择的数据行

例:查询部门号为10的员工编号、姓名、工作

SQL> select empno,ename,job from emp where deptno=10;

 

EMPNO ENAME      JOB       

----- ---------- --------- 

 7782 CLARK      MANAGER       

 7839 KING       PRESIDENT     

 7934 MILLER     CLERK         

思考?查询管理者(mgr)编号为7566的雇员姓名、管理者编号和部门编号。

2、where子句中使用比较运算符

Oracle提供6种比较符:=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>或!=(不等于)

例1:查询工资大于1500的员工信息

SQL> select * from emp where sal>1500;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30

 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20

 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30

 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10

 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

 7839 KING       PRESIDENT       1981-11-17    5000.00               10

 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20

例2:查询工资小于等于1600的员工信息

SQL> select * from emp where sal<=1600;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH      CLERK      7902 1980-12-17     800.00               20

 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30

 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30

 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30

 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30

 7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20

 7900 JAMES      CLERK      7698 1981-12-3      950.00               30

 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10

思考?查询工资小于等于奖金的员工信息。

3、where子句中使用字符串

字符串必须用单引号引起来,数值型常数不需要。关键字不区分大小写,字符串区分大小写。

例:检索员工“JAMES”的信息

正确的条件

SQL> select ename,job,deptno from emp where ename='JAMES';

 

ENAME      JOB       DEPTNO

---------- --------- ------

JAMES      CLERK         30

 

错误的条件

SQL> select ename,job,deptno from emp where ename='james';

 

ENAME      JOB       DEPTNO

---------- --------- ------

4、Where子句中使用日期

Oracle以内部数值形式存储日期,默认日期形式是“DD-MON-YY”,如“81年1月1日”表示为 “01-1月-81”。日期必须用单引号引起来。

例1:查询1982年1月23日入职的员工姓名、工资等信息。(日期格式'23-1月-82')

SQL> select ename,sal,hiredate from emp where hiredate='23-1月-82';

 

ENAME            SAL HIREDATE

---------- --------- -----------

MILLER       1300.00 1982-1-23

如要改变where子句日期格式为“yyyy-mm-dd”,需使用如下的命令:

SQL> alter session set nls_date_format='yyyy-mm-dd';

例2:查询1982年1月23日入职的员工姓名、工资等信息。(日期格式'1982-1-23')

SQL> select ename,sal,hiredate from emp where hiredate='1982-1-23';

 

ENAME            SAL HIREDATE

---------- --------- -----------

MILLER       1300.00 1982-1-23

5、Where子句中使用Between…And…运算符

Between…and…运算符用来显示符合一定范围内的数据行,所指定的范围包含上限和下限。

例:显示工资在1100到3000之间的所有员工信息

SQL> select * from emp where sal between 1100 and 3000;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30

 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30

 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20

 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30

 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30

 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10

 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30

 7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20

 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20

 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10

思考?查询1981年入职的雇员信息

6、Where子句中使用in运算符

例:显示管理员编号是7902、7566或7788的雇员编号、姓名、工资和管理员编号。

SQL> select empno,ename,sal,mgr from emp where mgr in (7902,7566,7788);

 

EMPNO ENAME            SAL   MGR

----- ---------- --------- -----

 7369 SMITH         800.00  7902

 7788 SCOTT        3000.00  7566

 7876 ADAMS        1100.00  7788

 7902 FORD         3000.00  7566

思考?显示雇员FORD,ALLEN的编号、姓名、工资和管理员编号。

7、Where子句中使用like运算符

Like运算符实现SQL语句的模糊查询,查询条件的字形匹配操作可以使用通配符“%”和“_”。

%:表示零或更多任意的字符

_:代表一个字符

例1:显示姓名由大写字母S开头的雇员信息

SQL> select empno,ename,sal from emp where ename like 'S%';

 

EMPNO ENAME            SAL      

----- ---------- --------- 

 7369 SMITH         800.00 

 7788 SCOTT        3000.00

思考?显示所有受雇于1981年1月之12月之间的雇员姓名和入职日期(使用通配符%)。

SQL> select ename,hiredate from emp where hiredate like '%81%'

ENAME      HIREDATE

---------- -----------

ALLEN      1981-2-20

WARD       1981-2-22

JONES      1981-4-2

MARTIN     1981-9-28

BLAKE      1981-5-1

CLARK      1981-6-9

KING       1981-11-17

TURNER     1981-9-8

JAMES      1981-12-3

FORD       1981-12-3

例2:显示所有姓名第二个字母为A的雇员姓名。

SQL> select ename from emp where ename like '_A%';

 

ENAME

----------

WARD

MARTIN

JAMES

思考?显示所有姓名的第三个字母为A的雇员姓名和入职日期。

8、Where子句中使用空值运算

Is null运算符判定值是否为空。

例:查询没有上级管理员的雇员信息

SQL> select * from emp where mgr is null;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7839 KING       PRESIDENT       1981-11-17    5000.00               10

 

思考?是否可以使用如下的SQL语句显示上述要求的雇员信息

SQL> select * from emp where mgr = '';

思考?显示没有资格获得奖金的雇员信息。

SQL> select * from emp where comm is null;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH      CLERK      7902 1980-12-17     800.00               20

 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20

 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30

 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10

 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

 7839 KING       PRESIDENT       1981-11-17    5000.00               10

 7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20

 7900 JAMES      CLERK      7698 1981-12-3      950.00               30

 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20

 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10

9、Where子句中使用逻辑运算符

SQL中有三个逻辑运算符:

AND:所有条件都为真,则返回真值;

OR:任何一个条件为真,则返回真值;

NOT:如果条件为假,则返回真值。

例1:查询工资大于1100(包含1100),并且工作为CLERK的雇员编号、姓名、工作和工资。

SQL> select empno,ename,job,sal from emp where sal>=1100 and job='CLERK';

 

EMPNO ENAME      JOB             SAL

----- ---------- --------- ---------

 7876 ADAMS      CLERK       1100.00

 7934 MILLER     CLERK       1300.00

例2:查询工资大于1100(包含1100),或工作为CLERK的雇员编号、姓名、工作和工资。

SQL> select empno,ename,job,sal from emp where sal>=1100 or job='CLERK';

 

EMPNO ENAME      JOB             SAL

----- ---------- --------- ---------

 7369 SMITH      CLERK        800.00

 7499 ALLEN      SALESMAN    1600.00

 7521 WARD       SALESMAN    1250.00

 7566 JONES      MANAGER     2975.00

 7654 MARTIN     SALESMAN    1250.00

 7698 BLAKE      MANAGER     2850.00

 7782 CLARK      MANAGER     2450.00

 7788 SCOTT      ANALYST     3000.00

 7839 KING       PRESIDENT   5000.00

 7844 TURNER     SALESMAN    1500.00

 7876 ADAMS      CLERK       1100.00

 7900 JAMES      CLERK        950.00

 7902 FORD       ANALYST     3000.00

 7934 MILLER     CLERK       1300.00

例3:查询雇员工作不是CLERK,MANAGER和ANALYST的雇员姓名和工作。

SQL> select ename,job from emp where job not in ('CLERK','MANAGER','ANALYST');

 

ENAME      JOB

---------- ---------

ALLEN      SALESMAN

WARD       SALESMAN

MARTIN     SALESMAN

KING       PRESIDENT

TURNER     SALESMAN

Not运算符还可以和between、like、null配合使用。

思考?

(1)查询工资不在1100之3000之内的员工姓名、工作和工资。(not between … and…)

(2)查询员工姓名第二字母不为A的员工编号和姓名。(not like)

(3)显示有资格获得奖金的雇员信息。(is not nul)

10、运算符的优先规则

优先级:所有比较运算符 > NOT > AND > OR

可以用圆括号强制改变优先级。

例1:如果一个雇员工作是CLERK并且他的工资大于1000,或这个雇员的工作是SALESMAN,则显示这个雇员的姓名、工作和工资。

SQL> select ename,job,sal from emp where job='CLERK' and sal>1000 or job='SALESMAN';

 

ENAME      JOB             SAL

---------- --------- ---------

ALLEN      SALESMAN    1600.00

WARD       SALESMAN    1250.00

MARTIN     SALESMAN    1250.00

TURNER     SALESMAN    1500.00

ADAMS      CLERK       1100.00

MILLER     CLERK       1300.00

例2:如果一个雇员工作是CLERK或是SALESMAN,并且他的工资大于1000,则显示这个雇员的姓名、工作和工资。

SQL> select ename,job,sal from emp where (job='CLERK' or job='SALESMAN') and sal>1000;

 

ENAME      JOB             SAL

---------- --------- ---------

ALLEN      SALESMAN    1600.00

WARD       SALESMAN    1250.00

MARTIN     SALESMAN    1250.00

TURNER     SALESMAN    1500.00

ADAMS      CLERK       1100.00

MILLER     CLERK       1300.00

思考?

(1)显示姓名中两次出现字母L,并且在编号为30的部门工作,或者其管理员编号是7788的雇员姓名、部门编号、管理员编号。

(2)显示工作为CLERK或ANALYST,并且工资不等于1000、3000、5000的雇员姓名、工作及工资。

二、使用Order by子句排序

Order by子句可以使用关键字ASC(升序)和DESC(降序)将查询的结果按指定的顺序进行排序,默认排序方式是升序。

对于不同类型数据的升序排列原则是:

数值型:按从小到大顺序排序,如1,2,…,999,…

日期型:按时间从早到晚顺序排序,如1-1月-81排在1-1月-82之前

字符型:按字母顺序排列,如A最前,Z最后

空值:升序时排在最后,降序时排在最前

例1:按进入公司的先后顺序显示雇员信息

SQL> select * from emp order by hiredate;

 

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

 7369 SMITH      CLERK      7902 1980-12-17     800.00               20

 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30

 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30

 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20

 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30

 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10

 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30

 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30

 7839 KING       PRESIDENT       1981-11-17    5000.00               10

 7900 JAMES      CLERK      7698 1981-12-3      950.00               30

 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20

 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10

 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

 7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20

例2:显示雇员的姓名和入职日期,要求先入公司的员工排在后入公司的员工后面。

SQL> select ename,hiredate from emp order by hiredate desc;

 

ENAME      HIREDATE

---------- -----------

ADAMS      1987-5-23

SCOTT      1987-4-19

MILLER     1982-1-23

FORD       1981-12-3

JAMES      1981-12-3

KING       1981-11-17

MARTIN     1981-9-28

TURNER     1981-9-8

CLARK      1981-6-9

BLAKE      1981-5-1

JONES      1981-4-2

WARD       1981-2-22

ALLEN      1981-2-20

SMITH      1980-12-17

例3:显示工资大于1500的雇员编号、姓名、工作、工资和部门编号,先按部门编号,在按工资水平排序。

SQL> select empno,ename,job,sal,deptno from emp where sal>1500 order by deptno,sal;

 

EMPNO ENAME      JOB             SAL DEPTNO

----- ---------- --------- --------- ------

 7782 CLARK      MANAGER     2450.00     10

 7839 KING       PRESIDENT   5000.00     10

 7566 JONES      MANAGER     2975.00     20

 7902 FORD       ANALYST     3000.00     20

 7788 SCOTT      ANALYST     3000.00     20

 7499 ALLEN      SALESMAN    1600.00     30

 7698 BLAKE      MANAGER     2850.00     30

例4:显示雇员的编号、姓名、月工资和一年的工资总和,按工资总和降序排序

SQL> select empno,ename,sal,12*sal annsal from emp order by annsal desc;

 

EMPNO ENAME            SAL     ANNSAL

----- ---------- --------- ----------

 7839 KING         5000.00      60000

 7902 FORD         3000.00      36000

 7788 SCOTT        3000.00      36000

 7566 JONES        2975.00      35700

 7698 BLAKE        2850.00      34200

 7782 CLARK        2450.00      29400

 7499 ALLEN        1600.00      19200

 7844 TURNER       1500.00      18000

 7934 MILLER       1300.00      15600

 7521 WARD         1250.00      15000

 7654 MARTIN       1250.00      15000

 7876 ADAMS        1100.00      13200

 7900 JAMES         950.00      11400

 7369 SMITH         800.00       9600

思考?

(1)显示受雇时间在1981年2月20日之1981年5月1日之间的雇员姓名、工作及受雇时间,并以受雇时间升序排列。

(2)显示在10号和30号部门工作的雇员姓名及其部门编号,并安排雇员姓名字母顺序排列。

(3)显示能挣的奖金的雇员姓名、工资、奖金,并以工资和奖金降序排列。

文档

第4讲 限定查询和排序 oracle

第4讲限定查询和排序一、使用Where子句限定查询1、where中限定所选择的数据行例:查询部门号为10的员工编号、姓名、工作SQL>selectempno,ename,jobfromempwheredeptno=10;EMPNOENAMEJOB------------------------7782CLARKMANAGER7839KINGPRESIDENT7934MILLERCLERK思考?查询管理者(mgr)编号为7566的雇员姓名、管理者编号和部门编号。2、where子句中使用比较运算符
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top