ORACLE的限定查询和排序

1、使用Where子句限定查询
1、where中限定所选择的数据行2、where子句中使用比较运算符3、where子句中使用字符串4、Where子句中使用日期5、Where子句中使用Between…And…运算符6、Where子句中使用in运算符7、Where子句中使用like运算符8、Where子句中使用空值运算9、Where子句中使用逻辑运算符10、运算符的优先规则
2、使用Order by子句排序




1、使用Where子句限定查询
1、where中限定所选择的数据行
例:查询部门号为10的员工编号、姓名、工作
SQL> select empno,ename,job from emp where deptno=10;


2、where子句中使用比较运算符 Oracle提供6种比较符:=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>或!=(不等于)
例1:查询工资大于1500的员工信息
SQL> select * from emp where sal>1500;
例2:查询工资小于等于1600的员工信息
SQL> select * from emp where sal<=1600;
3、where子句中使用字符串
字符串必须用单引号引起来,数值型常数不需要。关键字不区分大小写,字符串区分大小写。
例:检索员工“JAMES”的信息
SQL> select ename,job,deptno from emp where ename='JAMES';
4、Where子句中使用日期
Oracle以内部数值形式存储日期,默认日期形式是“DD-MON-YY”,如“81年1月1日”表示为 “01-1月-81”。日期必须用单引号引起来。
例:查询1982年1月23日入职的员工姓名、工资等信息。
SQL> select ename,sal,hiredate from emp where hiredate='23-1月-82';
如要改变where子句日期格式为“yyyy-mm-dd”,需使用如下的命令:
SQL> alter session set nls_date_format='yyyy-mm-dd';

5、Where子句中使用Between…And…运算符
Between…and…运算符用来显示符合一定范围内的数据行,所指定的范围包含上限和下限。
例:显示工资在1100到3000之间的所有员工信息
SQL> select * from emp where sal between 1100 and 3000;
6、Where子句中使用in运算符
例:显示管理员编号是7902、7566或7788的雇员编号、姓名、工资和管理员编号。
SQL> select empno,ename,sal,mgr from emp where mgr in (7902,7566,7788);
7、Where子句中使用like运算符
Like运算符实现SQL语句的模糊查询,查询条件的字形匹配操作可以使用通配符。
%:表示零或更多任意的字符
_:代表一个字符

例1:显示姓名由大写字母S开头的雇员信息
SQL> select empno,ename,sal from emp where ename like 'S%';
例2:显示所有姓名第二个字母为A的雇员姓名
SQL> select ename from emp where ename like '_A%';


8、Where子句中使用空值运算
Is null运算符判定值是否为空。

例:查询没有上级管理员的雇员信息
SQL> select * from emp where mgr is null;
9、Where子句中使用逻辑运算符
SQL中有三个逻辑运算符:
AND:所有条件都为真,则返回真值;
OR:任何一个条件为真,则返回真值;
NOT:如果条件为假,则返回真值。

例1:查询工资大于1100(包含1100),并且工作为CLERK的雇员编号、姓名、工作和工资。
SQL> select empno,ename,job,sal from emp where sal>=1100 and job='CLERK';
例2:查询工资大于1100(包含1100),或工作为CLERK的雇员编号、姓名、工作和工资。
SQL> select empno,ename,job,sal from emp where sal>=1100 or job='CLERK';
例3:查询雇员工作不是CLERK,MANAGER和ANALYST的雇员姓名和工作。
SQL> select ename,job from emp where job not in ('CLERK','MANAGER','ANALYST');
Not运算符还可以和between、like、null配合使用。
10、运算符的优先规则
优先级:所有比较运算符 > NOT > AND > OR
可以用圆括号强制改变优先级。

例1:如果一个雇员工作是CLERK并且他的工资大于1000,或这个雇员的工作是SALESMAN,则显示这个雇员的姓名、工作和工资。
SQL> select ename,job,sal from emp where job='CLERK' and sal>1000 or job='SALESMAN';
例2:如果一个雇员工作是CLERK或是SALESMAN,并且他的工资大于1000,则显示这个雇员的姓名、工作和工资。
SQL> select ename,job,sal from emp where (job='CLERK' or job='SALESMAN') and sal>1000;
2、使用Order by子句排序
Order by子句可以使用关键字ASC(升序)和DESC(降序)将查询的结果按指定的顺序进行排序,默认排序方式是升序。
对于不同类型数据的升序排列原则是:
数值型:按从小到大顺序排序,如1,2,…,999,…
日期型:按时间从早到晚顺序排序,如1-1月-81排在1-1月-82之前
字符型:按字母顺序排列,如A最前,Z最后
空值:升序时排在最后,降序时排在最前

Order by子句可以使用关键字ASC(升序)和DESC(降序)将查询的结果按指定的顺序进行排序,默认排序方式是升序。
对于不同类型数据的升序排列原则是:
数值型:按从小到大顺序排序,如1,2,…,999,…
日期型:按时间从早到晚顺序排序,如1-1月-81排在1-1月-82之前
字符型:按字母顺序排列,如A最前,Z最后
空值:升序时排在最后,降序时排在最前
例1:按进入公司的先后顺序显示雇员信息
SQL> select * from emp order by hiredate;
例2:显示雇员的姓名和入职日期,要求先入公司的员工排在后入公司的员工后面。
SQL> select ename,hiredate from emp order by hiredate desc;
例3:显示工资大于1500的雇员编号、姓名、工作、工资和部门编号,先按部门编号,在按工资水平排序。
SQL> select empno,ename,job,sal,deptno from emp where sal>1500 order by deptno,sal;
例4:显示雇员的编号、姓名、月工资和一年的工资总和,按工资总和降序排序
SQL> select empno,ename,sal,12*sal annsal from emp order by annsal desc;
Tags: 

延伸阅读

最新评论

发表评论