Oracle学习之路——限定查询与排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DamonDown/article/details/51276340

因为昨天突然有了写博客的想法,所以这两天乘着五一,把之前已经学了的知识点都写出来,往后就应该是一周一更。奋斗坚持!!!

1.限定查询

	限定查询顾名思义 就是在数据查询时设置一些的过滤条件,只有满足指定条件的才能保留下来
	select [distinct] {*| 列名| 表达式 , ...} from 表名
	[where 条件表达式]
	条件表达式:列名 比较操作符 要比较的值
	•WHERE子句紧跟在FROM子句之后

2.比较运算符(=,>,>=,<,<=,<>,!=)

在Oracle中<>为不等于使用。以上比较运算符可进行数值、字符串、日期之间进行比较。其中字符串数据和日期数据必须用单引号引起来,字符串数值区分大小写,日期数据一定要注意格式,默认格式为“DD-MON-RR”如“28-4月-2016”


例题:

1.查询职位为SALESMAN的员工编号、职位、入职日期
	select empno,job,hiredate from emp where job='SALESMAN';
2.查询1985年12月31日之前入职的员工姓名及入职日期
	select ename,hiredate from emp where hiredate>'31-12月-85';或者(转换函数后期解释)select ename,hiredate from emp where to_char(hiredate,'yyyy-mm-dd')>'1985-12-31';
3.查询部门编号不在10部门的员工姓名、部门编号
	select ename,deptno from emp where deptno<>10;
或者 (使用not)
	select ename,deptno from emp where not deptno=10;

3.特殊比较运算符

between…and…判断要比较的值在某个范围
in(集合列表)判断要比较的值是否和集合中某一直相等
like(模糊查询)判断要比较的值是否满足部分匹配,通配符“_”表示一个字符串长度,“%”表示任意长度
is、like、=区别
is“是”什么、“=与什么一样”、like像什么
例题(between…and…和in
1.查询入职日期在82年至85年的员工姓名,入职日期
	select ename,hiredate from empwhere hiredate between '01-1月-1982' and '31-12月-1985'
2.查询月薪在3000到5000的员工姓名,月薪
	select ename,sal from emp where sal between 3000 and 5000;
3.查询部门编号为10或者20的员工姓名,部门编号
	select ename,deptno from emp where deptno in(10,20);
还可以使用 "or"
4.查询经理编号为7902, 7566,7788的员工姓名 ,经理编号
	select ename,mgr from emp where mgr in(7902,7566,7788);

例题(like)

5.查询员工姓名以W开头的员工姓名
	select ename from emp where ename like 'W%';
这道题在学习了字符函数之后还有where instr(ename,'W')=1;或者where substr(ename,1,1)='W';
但是还是喜欢like,就因为代码能少敲
2.查询员工姓名倒数第2个字符为T的员工姓名。 
	select ename from emp where ename like '%T_';
3.查询奖金为空的员工姓名,奖金
	select ename,comm from emp where comm is null;(is null能查询空值)

4.逻辑运算符(and,or ,not)

当需要和多个条件表达式进行比较时,需要使用逻辑运算符 把多个表达式连接起来,逻辑运算符包括AND、OR、NOT,逻 辑表达式的结果为TRUE,FALSE,NULL

时刻记住null为空值,表示不确定的值,不能认为0。
这个地方使用两个通俗易懂的例子讲解and和or

1.and:例如登录qq成功为true。只有账号和密码都为true的时候才能成功登录true;当其中一个为true其中一个为false时显示谁的错误这时不能登录为false;当其中一个为true其中一个不填写为null时,提示谁为null;当都错误时提示错误false;当其中一个false一个不填写时为false(这个不恰当)

2.or:例如去餐厅吃上饭为true。钱包有钱或银行卡有钱或都有钱必然能吃上饭true;钱包有钱true 但不知道银行卡有没有钱null能吃上饭true;钱包没钱但也不知道银行卡有没有钱,就得查银行卡才能确定能不能吃饭null;钱包银行卡都没钱肯定不能吃饭false(只考虑钱包和银行卡)

No. 条件x 条件y and or
1 true true true true
2 true null null true
3 true false false true
4 false false false false
5 false null false null
6 null null null null

not 条件:取反,not null仍然为null。not可使用在in,between…and…,like之前,还有is not null等用法。

5.运算符优先级

优先级
优先级 运算分类 举例
1 乘除 *,\
2 加减,连接 +,-,||
3 比较运算符 =,<>,<,>,<=,>=
4 特殊比较运算符 between…and…,in,like,is null
5 逻辑非 not
6 逻辑与 and
7 逻辑或 not

传说中的()优先级高于一切
例题:
1..查询工资超过2000并且职位是MANAGER,或者职位是SALESMAN的员工姓名、职位、工资 
select ename,job,sal from emp
where sal>2000 and job='MANAGER' or job= 'SALESMAN';
2.查询工资超过2000并且职位是MANAGER或SALESMAN的员工姓名 、职位、工资
select ename,job,sal from emp
where sal>2000 and (job='MANAGER' or job= 'SALESMAN');
3.查询部门在10或者20,并且工资在3000到5000之间的员工姓名 、部门、工资
select ename,job,sal from emp
where (sal between 3000 and 5000) and deptno in (10,20);
4.查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位
select ename,hiredate,job from emp where substr(hiredate,-2,2)='81' and job not like 'SALES%';

5.查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名 包含A的员工姓名职位部门编号
select ename,job,deptno from emp where job in('SALESMAN','MANAGER') and deptno in(10,20) 
and instr(ename,'A')>0;

6.Order by(默认升序 asc)

数字排列小值在前,大值在后;日期排列相对较早在前;字符按’A-Z‘;空值在升序中排最后,降序中排最前(降序为desc)
order by可有多列排序,按从前往后,且可随意指定排序方式。例如order by empno,sal
order by子句后列名可用数字代替,这个数字是select后列的顺序号;还可以写没在select列表后的列名

例题:
1.查询部门在20或30的员工姓名,部门编号,并按照工资升序排序
select ename,deptno from emp where deptno in(20,30)  order by sal asc;

2.查询工资在2000-3000之间,部门不在10号的 员工姓名、部门编号、工资,并按照部门升序,工资降序排序
select ename,deptno,sal from emp where sal between 2000 and 3000 and deptno <>10
order by deptno asc,sal desc;

3.查询入职日期在82年至83年之间,职位以 SALES或者MAN开头的员工姓名、入职日期、职位,并按照入职日期降序排序
select ename,hiredate,job from emp 
where substr(hiredate,-2,2)>='82' and substr(hiredate,-2,2)<='83' and job like 'SALES%' or job like 'MAN' order by hiredate desc;

1.查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的 员工姓名、入职时间、职位
select ename,hiredate,job from emp 
where hiredate>'9-7月-1982' and job <>'SALESMAN';

2.查询员工姓名的第三个字母是a的员工姓名
select ename from emp where ename like '__A%';

3.查询除了10、20号部门以外的员工姓名、部门编号。
select ename,deptno from emp where deptno not in(10,20);

4.查询部门号为30号员工的信息,先按工资降序排序,再按姓名升序排序
select ename,deptno,sal from emp where deptno=30
order by sal desc,ename asc;

5.查询没有上级的员工(经理号为空)的员工姓名
select ename from emp where mgr is null;

6.查询工资大于等于4500并且部门为10或者20的员工的姓名、工 资、部门编号
select ename,sal,deptno from emp where sal>=4500 and deptno in(10,20);






阅读更多

ORACLE限定查询排序

12-07

1、使用Where子句限定查询rn1、where中限定所选择的数据行rn2、where子句中使用比较运算符rn3、where子句中使用字符串rn4、Where子句中使用日期rn5、Where子句中使用Between…And…运算符rn6、Where子句中使用in运算符rn7、Where子句中使用like运算符rn8、Where子句中使用空值运算rn9、Where子句中使用逻辑运算符rn10、运算符的优先规则rnrnrn2、使用Order by子句排序rnrnrnrnrnrn1、使用Where子句限定查询rn1、where中限定所选择的数据行rn 例:查询部门号为10的员工编号、姓名、工作rn SQL> select empno,ename,job from emp where deptno=10;rnrnrn2、where子句中使用比较运算符rn Oracle提供6种比较符:=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>或!=(不等于)rn 例1:查询工资大于1500的员工信息rn SQL> select * from emp where sal>1500;rnrn 例2:查询工资小于等于1600的员工信息rn SQL> select * from emp where sal<=1600;rnrnrn3、where子句中使用字符串rn 字符串必须用单引号引起来,数值型常数不需要。关键字不区分大小写,字符串区分大小写。rnrn 例:检索员工“JAMES”的信息rn SQL> select ename,job,deptno from emp where ename='JAMES';rnrnrn4、Where子句中使用日期rn Oracle以内部数值形式存储日期,默认日期形式是“DD-MON-YY”,如“81年1月1日”表示为 “01-1月-81”。日期必须用单引号引起来。www.yiyanys.comrnrn 例:查询1982年1月23日入职的员工姓名、工资等信息。rn SQL> select ename,sal,hiredate from emp where hiredate='23-1月-82';rnrnrnrn如要改变where子句日期格式为“yyyy-mm-dd”,需使用如下的命令:rnSQL> alter session set nls_date_format='yyyy-mm-dd';rnrnrn5、Where子句中使用Between…And…运算符rnBetween…and…运算符用来显示符合一定范围内的数据行,所指定的范围包含上限和下限。rnrn例:显示工资在1100到3000之间的所有员工信息rnSQL> select * from emp where sal between 1100 and 3000;rnrnrn6、Where子句中使用in运算符rn例:显示管理员编号是7902、7566或7788的雇员编号、姓名、工资和管理员编号。rnSQL> select empno,ename,sal,mgr from emp where mgr in (7902,7566,7788);rnrnrn7、Where子句中使用like运算符rnLike运算符实现SQL语句的模糊查询,查询条件的字形匹配操作可以使用通配符。rn%:表示零或更多任意的字符rn_:代表一个字符rnrn例1:显示姓名由大写字母S开头的雇员信息rnSQL> select empno,ename,sal from emp where ename like 'S%';rnrn例2:显示所有姓名第二个字母为A的雇员姓名rnSQL> select ename from emp where ename like '_A%';rnrnrnrnrn8、Where子句中使用空值运算rnIs null运算符判定值是否为空。rnrn例:查询没有上级管理员的雇员信息rnSQL> select * from emp where mgr is null;rnrnrn9、Where子句中使用逻辑运算符rnSQL中有三个逻辑运算符:rnAND:所有条件都为真,则返回真值;rnOR:任何一个条件为真,则返回真值;rnNOT:如果条件为假,则返回真值。rnrn例1:查询工资大于1100(包含1100),并且工作为CLERK的雇员编号、姓名、工作和工资。rnSQL> select empno,ename,job,sal from emp where sal>=1100 and job='CLERK';rnrn例2:查询工资大于1100(包含1100),或工作为CLERK的雇员编号、姓名、工作和工资。rnSQL> select empno,ename,job,sal from emp where sal>=1100 or job='CLERK';rnrn例3:查询雇员工作不是CLERK,MANAGER和ANALYST的雇员姓名和工作。rnSQL> select ename,job from emp where job not in ('CLERK','MANAGER','ANALYST');rnrnrnrnNot运算符还可以和between、like、null配合使用。rnrnrn10、运算符的优先规则rnrn优先级:所有比较运算符 > NOT > AND > ORrn可以用圆括号强制改变优先级。rnrn例1:如果一个雇员工作是CLERK并且他的工资大于1000,或这个雇员的工作是SALESMAN,则显示这个雇员的姓名、工作和工资。rnSQL> select ename,job,sal from emp where job='CLERK' and sal>1000 or job='SALESMAN';rnrn例2:如果一个雇员工作是CLERK或是SALESMAN,并且他的工资大于1000,则显示这个雇员的姓名、工作和工资。rnSQL> select ename,job,sal from emp where (job='CLERK' or job='SALESMAN') and sal>1000;rnrnrn2、使用Order by子句排序rnrnOrder by子句可以使用关键字ASC(升序)和DESC(降序)将查询的结果按指定的顺序进行排序,默认排序方式是升序。rn rn对于不同类型数据的升序排列原则是:rn数值型:按从小到大顺序排序,如1,2,…,999,…rn日期型:按时间从早到晚顺序排序,如1-1月-81排在1-1月-82之前rn字符型:按字母顺序排列,如A最前,Z最后rn空值:升序时排在最后,降序时排在最前rnrnOrder by子句可以使用关键字ASC(升序)和DESC(降序)将查询的结果按指定的顺序进行排序,默认排序方式是升序。rn rn对于不同类型数据的升序排列原则是:rn数值型:按从小到大顺序排序,如1,2,…,999,…rn日期型:按时间从早到晚顺序排序,如1-1月-81排在1-1月-82之前rn字符型:按字母顺序排列,如A最前,Z最后rn空值:升序时排在最后,降序时排在最前rnrnrnrn例1:按进入异眼影视公司的先后顺序显示雇员信息rnSQL> select * from emp order by hiredate;rnrn例2:显示雇员的姓名和入职日期,要求先入公司的员工排在后入公司的员工后面。rnSQL> select ename,hiredate from emp order by hiredate desc;rnrn例3:显示工资大于1500的雇员编号、姓名、工作、工资和部门编号,先按部门编号,在按工资水平排序。rnSQL> select empno,ename,job,sal,deptno from emp where sal>1500 order by deptno,sal;rnrn例4:显示雇员的编号、姓名、月工资和一年的工资总和,按工资总和降序排序rnSQL> select empno,ename,sal,12*sal annsal from emp order by annsal desc;rnrn

没有更多推荐了,返回首页