Oracle-第3章 限制数据和对数据进行排序

第3章 限制数据和对数据进行排序知识点

3.1 使用where子句
  3.1.1 比较字符型和数值型数据
  3.1.2 比较日期型数据
3.2 特殊比较运算符
  3.2.1 between…and…
  3.2.2 in
  3.2.3 like和escape
  3.2.4 is null
3.3 逻辑运算符
  3.3.1 and,or,not
  3.3.2 逻辑运算符的优先级
3.4 order by 子句
3.5 练习

3.1 使用where子句

  限定数据行的原因是要根据某些条件,提高查询效率和缩短查询时间。使用where子句可以返回限定的数据行,其中,where子句紧跟from子句之后。
  select 查询需要 from 数据表名
     where condition(s); |

  condition(s)表示条件表达式,通常格式为:列名 比较操作符 要比较的值
3.1.1 比较字符型和数值型数据
  字符型数据作为要比较的值时,必须使用单引号引起来,并且字符型比较数据大小写敏感,即要区分大小写。
  例:查询工作不是’SALESMAN’得员工信息。
Ans:select ename,job from emp where job <>'SALESMAN';

3.1.2 比较日期型数据
  日期型数值作为被比较的值时,必须用单引号引起来,并且日期有固定日期表达式,默认格式:‘dd-mon-yy’,‘1-5月-1981’,并且用单引号。
  例1:查找入职日期大于1981年5月1日的数据。
Ans:select ename,hiredate from emp where hiredate>'1-5月-1981';

3.2 特殊比较运算符

3.2.1 between…and…
  使用between…and…运算符判断要比较的值是否在某个范围内。在涉及端点问题时,要注意是否覆盖端点。
  例1: 查询入职日期在1981年1月1号至1981年6月30号的 员工信息。
Ans:select ename,hiredate from emp where hiredate>='1-1月-1981' and hiredate<'30-6月-1982';

3.2.2 in
  使用in运算符判断要比较的值是否和集合列表中的任何一个值相等。
  例:查询经理编号为7902, 7566, 7788的员工姓名,经理编号。
Ans:select ename,mgr from emp where mgr in (7902,7566,7788);

3.2.3 like和escape
  使用like运算符判断要比较的值是否满足部分匹配,也叫模糊查询。模糊查询中两个通配符:% 代表零或任意更多的字符; _ 代表一个字符。
  例:查询所有员工姓名中倒数第二字字母为E的员工信息
Ans:select ename,sal from emp where ename like '%E_';
当%与_组合使用,可以使用escape标识符实现对“%”和 “”的查找,即此时的“%”和 “”含义是字符本身的字符。当查询的信息含有特殊符号时,需要进行转移。转移时先使用escape声明转义符号(任意符号),再到使用转义符号对特殊符号进行转义。
常见需要转义的字符有:下划线_,百分号%
  例:询名称中包含’_'事务员工姓名,职位,上司编号。
Ans:select ename,job,mgr from emp where ename like '%@_%' escape '@';

  在like查询时,如果没有声明下划线或百分号进行匹配,则相当于等值查询。
3.2.4 is null
   使用 is null运算符来判断要比较的值是否为空值null。
  例:查询奖金为空的员工姓名,工资,奖金。
Ans:select ename,sal,comm from emp where comm is null;

3.3 逻辑运算符

3.3.1 and,or,not
  a).and要求两个条件都为真,结果才为真.
  例:查询工资大于1000并且职位为CLERK的员工姓名,职位,工资。
Ans:select ename,job,sal from emp where sal>1000 and job='CLERK';
   b). or是只需要两个条件中的一个为真,结果就返回真。
  例:查询工资大于1000或职位为CLERK的员工姓名,职位,工资。
Ans: select ename,job,sal from emp where sal>1000 or job='CLERK';
  c).not是逻辑非,not运算符有几种运算场景,**①集合运算:not in,②范围运算:not between and,③非空运算:is not null,④模糊匹配:not like。*其中not null只能定义在列级定义上,称为列级约束。
3.3.2 逻辑运算符的优先级
  多条件查询时需要注意运算符号的优先级别,可以使用小括号修改运算条件的优先级别,括号()优于其他操作符。
优先级  运算分类     运算符举例
1   算术运算符     + ,- ,
,/,
2   连接运算符     ||
3   比较运算符     =,<>,<,>,<=,>=
4   特殊比较运算符   Between…and…,in,like,is null
5   逻辑非     not
6   逻辑与     and
7   逻辑或     or
例1:查询职位是SALESMAN并且工资大于2000,或者职位是MANAGER的员工姓名,职位,工资。
Ans: select ename,job,sal from emp where job='SALESMAN' or job='MANAGER' and sal>2000;
释:and的优先级大于or,所以先计算job='SALESMAN’和sal>1000的与内容

例2:查询职位是SALESMAN或MANAGER,并且职位超过2000的员工姓名,职位,工资。
Ans:select ename,job,sal from emp where (job='SALESMAN' or job='MANAGER') and sal>2000;
释:括号()的优先级大于and,所以先计算括号内(job=‘SALESMAN’ or job=‘MANAGER’)的内容,再计算and sal>1000的结果。结果为:

3.4 order by 子句

  使用ORDER BY子句能对查询结果集进行排序,语法如下:

  select 查询需要 from 数据表名
    order by 列名|表达式|列别名|列序号 [asc|desc]

  Order by 子句必须跟在select语句的最后,其中,可以按照列名,表达式,列别名,列序号进行排序,排序有降序和升序两种,asc代表升序,一般默认排序为升序;desc为降序。
   数字升序排列小值在前,大值在后。即按照数字大小顺序由小到大排列。
   日期升序排列相对较早的日期在前,较晚的日期在后。例如:’01-SEP-06’在’01-SEP-07’前。
   字符升序排列按照字母由小到大的顺序排列。即由A-Z排列;中文升序按照字典顺序排列。
   空值在升序排列中排在最后,在降序排列中排在最开始,空值在牌组中可认为是’最大值’。
   参与排序的多列都可以指定升序或者降序,且ORDER BY子句中可以写没在SELECT列表中出现的列。
   多列排序时,多列排序时,先按照第一列排序,当第一列数据有重复时,重复的数据按照第二列进行重新排序,由此类推。  与此同时,可以针对每一个拍序列指定拍序列指定排序规则。
例:查询工资在2000-3000之间,部门不在10号的员工姓名,部门编号,工资,并按照部门升序,工资降序排序。
Ans: select ename,deptno,sal from emp where sal between 2000 and 3000 and deptno <>10 order by deptno,sal desc;

3.5 练习

  1. 查询职位为SALESMAN的员工编号、职位、入职日期。
    Ans: select empno,job,hiredate from emp where job='SALESMAN';
  2. 查询1985年12月31日之前入职的员工姓名及入职日期。
    Ans: select ename,hiredate from emp where hiredate<'31-12月-1985';
  3. 查询部门编号不在10部门的员工姓名、部门编号。
    Ans: select ename,deptno from emp where deptno<>10;
  4. 查询入职日期在82年至85年的员工姓名,入职日期。
    Ans: select ename,hiredate from emp where hiredate>='1-1月-1982' and hiredate<='31-12月-1985';
  5. 查询月薪在3000到5000的员工姓名,月薪。
    Ans: select ename,sal from emp where sal between 3000 and 5000;
  6. 查询部门编号为10或者20的员工姓名,部门编号。
    Ans: select ename,deptno from emp where deptno in (10,20);
  7. 查询员工姓名以W开头的员工姓名。
    Ans: select ename from emp where ename like 'W%';
  8. 查询员工姓名倒数第2个字符为T的员工姓名。
    Ans: select ename from emp where ename like '%T_';
  9. 查询部门在10或者20,并且工资在3000到5000之间的员工姓名、部门、工资。
    Ans: select ename,deptno,sal from emp where deptno in(10,20) and sal between 3000 and 5000;
  10. 查询入职日期在81年,并且职位不是SALES开头的员工姓名、入职日期、职位。
    M1: select ename,hiredate,job from emp where job not like 'SALES%' and hiredate>='1-1月-1981' and hiredate<='31-12月-1982';
    M2: select ename,hiredate,job from emp where job not like 'SALES%' and to_char(hiredate,'yy')='81';
    M3:
  11. 查询职位为SALESMAN或MANAGER,部门编号为10或者20,姓名包含A的员工姓名、职位、部门编号。
    Ans: select ename,job,deptno from emp where job in('SALESMAN','MANAGER') and deptno in (10,20) and ename like '%A%';
  12. 查询入职日期在82年至83年之间,职位以SALES或者MAN开头的员工姓名,入职日期,职位,并按照入职日期降序排序。
    Ans: select ename,hiredate,job from emp where hiredate>='1-1月-1981' and hiredate<='31-12月-1983' and job like 'SALES%' or job like 'MAN%' order by hiredate desc;
  13. 查询入职时间在1982-7-9之后,并且不从事SALESMAN工作的员工姓名,入职时间,职位。
    Ans: select ename,hiredate,job from emp where hiredate>='9-7月-1982';
  14. 查询没有上级的员工(经理号为空)的员工姓名。
    Ans: select ename from emp where mgr is null;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值