这里。我们接着上一小节2.6留下的问题:假设要查询的字符串中含有“_”或“%”。又该如何处理呢? 開始今天的学习。

2.7  怎样使用转义(escape)操作符

能够是用个转义(escape)keyword来完毕此任务。

为了进行练习,我们必须先创建一个暂时的表,之后再往该表中插入1行记录,其包括通配符。

可能您如今还可能十分不理解例2-13和例2-14的SQL语句。没有问题,您仅仅要照着输入就能够了。

例 2-13

SQL> CREATE TABLE dept_temp
2 AS
3 SELECT *
4 FROM dept;

例 2-13 结果

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

例 2-14

SQL> INSERT INTO dept_temp
2 VALUES (88,'IT_RESEARCH','BEIJING');

例 2-14 结果

如今就能够输入例2-15的查询语句来显示其部门名(dname)意IT_開始的全部数据行。

例 2-15

SQL> SELECT *
2 FROM dept_temp
3 WHERE dname LIKE 'IT\_%' escape'\';

例 2-15 结果

在例2-15的查询中,您定义‘\'为转义(escape)符,即在'\'之后的'_'字符已经不是通配符了,而是他本来的含义,即下划线。因此。该查询语句的结果为:开头两个字符为IT,第三个字符为’_‘,后跟随意自负。

没有必要一定使用'\'字符作为转义(escape)符。全然能够使用不论什么您感兴趣的字符作为转义(escape)符。很多Oracle的专业人员之所以常常使用'\'字符作为转义(escape)符,是由于该字符在Unix操作系统和C语言中就是转义(escape)符

为了验证以上的论述,您能够输入列2-16的查询语句。

例 2-16

SQL> SELECT *
2 FROM dept_temp
3 WHERE dname LIKE 'IT@_%' escape'@';

例 2-16 结果

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

在例2-16的查询语句中。将’@‘定义为转义(escape)字符,可是例2-16的显示结果与例2-15全然同样。

建议:您最好不要将在SQL和SQL*PLUS中还有特殊含义的字符定义为转义(escape)符。这样会使您的SQL语句变得非常难理解。

2.8 ORDER BY 子句

宁还记得第二章開始时的样例吗?假设忘记了,请您翻回到本章開始的地方,又一次阅读一下。

如今您的老板要您又一次打印那份工资清单,可是要按工资数额由大到小排序。

您翻一翻SQL手冊,发现ORDER BY 子句是用来排序的。于是您试着发出了例2-17的查询语句。

例 2-17

SQL> SELECT empno,ename,sal
2 FROM emp
3 WHERE sal >=1500
4 ORDER BY sal;

例 2-17 结果

其显示结果尽管是排好了序的。可是排序是由小到大。

设想一下您所在的公司可能是一个大型的企业,可能有几十万名员工,在这汇总情况下这个清单可能为几百或者几千页。因此老板更希望先看到高薪员工。

于是您有一次的重写了例2-18的查询语句。

例 2-18

SQL> SELECT empno,ename,sal
2 FROM emp
3 WHERE sal >= 1500
4 ORDER BY sal DESC;

例 2-18 结果

例 2-18 的结果正式老板所须要的清单。在这个查询语句中,使用了DESCkeyword。

利用ORDER BY子句对查询的结果进行排。

ASC(ascending order)为升序排序(默认),因ASC在实际的SQL语句中非常少见到。您能够对数字型,日期型,字符型数据进行排序。默认时。数字型和日期型数据的顺序为从小到大。字符型数据的顺序是按ASCII码的次序,即从A到Z。

DESC(descending order)为降序排序。

假设在查询语句中不有用ORDER BY子句,查询结果的次序是不确定,即您发了两个全然同样的查询语句。其结果的次序可能是不一样的。

假设使用了ODER BY子句,该子句一定是SQL语句的最后一个子句。

2.9 在ORDER BY自剧中使用别名或表达式

还记得在第一章中的例1-11到1-14吗?

如今我们将第一章的例1-14重写,如例2-19.

例 2-19

SQL> SELECT empno AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
2 FROM emp;

这一SQL语句显示的结果没有什么规律,而老板更喜欢把高薪者排在前面。

因为年薪一列是表达式。应该用别名来排序。您能够使用例2-20的SQL语句来满足老板的要求。

例 2-20

SQL> SELECT empno AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
2 FROM emp
3 ORDER BY "Annual Salary" DESC;

例 2-20 结果

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

除了像例2-20那样在ORDER BY子句后面使用别名外,还能够在ORDER BY子句后面跟表达式。你能够输入例2-21的SQL语句。

例 2-21

SQL> SELECT empno AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
2 FROM emp
3 ORDER BY (500+sal)*12 DESC;

例 2-21 结果

您得到了与例2-20全然同样的结果。仅仅是例2-21查询语句中的ORDER BY子句看起来不如上一个样例easy理解。

2.10 在ORDER BY 自剧中使用列号

此外我们也能够使用例2-22的查询语句来完毕同样的工作,仅仅是看上去更加令人费解。这里”3“表示第三列。所以ORDER BY 3就是按第3列排序。

例 2-22

SQL> SELECT empno AS "Employee Number",ename name,(500+sal)*12 "Annual Salary"
2 FROM emp
3 ORDER BY 3 DESC;

例 2-22 结果

应该在SQL语句中尽可能的不有用ORDER BY 子句这样的使用方法,由于这样的使用方法的易读性实在太差了。在不收啊有关Oracle SQL的书中根本就没有介绍ORDER BY这一使用方法。虽然如此。由于该使用方法能够降低输入,特别当放在ORDER BY子句之后的列名或者表达式非常长的时候。所以还是有人使用这样的使用方法。本篇文章介绍这一使用方法的目的是:当看到SQL语句中包括了这一使用方法时,您能够理解它,可是并非鼓舞使用这样的方法。

2.11 在ORDER BY 自剧中使用多列

您也能够对多列进行排序,这些列的排序既能够按升序也能够按降序。如果以这种方式来显示员工的名字、职位和工资:首先按职位由A到Z排序。之后再按工资由高到低排序。

于是能够用例2-23的查询语句来达到这一目的。

例 2-23

SQL> SELECT ename,job,sal
2 FROM emp
3 ORDER BY job,sal DESC;

例 2-23 结果



2.12 在ORDER  BY 子句中使用在SELECT列表中没有的列

您还能够用在不在SELECT列表中没有的列来排序。如能够输入例2-24的查询语句。

例 2-24

SQL> SELECT ename,job,sal
2 FROM emp
3 ORDER BY empno;

例 2-24 结果

可是,您应该尽可能避免使用这样的排序的方法。

由于用这样的排序的方法得到的结果。其它人非常难看得懂。我想信随着时间的流逝,您自己也会看不懂的。

2.13 扩充后的查询语句的格式

这一章我们对主要的查询语句进行了扩充,增加了WHERE子句和ORDER BY子句。它的格式例如以下:

SELECT *|{[DISCTINCT]列表。...}

FROM  
表名

[WHERE 条件]

[ORDER BY {列名|别名|表达式。...}[ASC|DESC]];

当中条件由下面部分组成

■ 列名

■ 文字串

■ 算术表达式

■  
常量

■ 比較运算符

ORDER BY 子句一定放在SQL语句的最后。

2.14 应该掌握的内容

在学习下一章之前,请检查一下是否已经掌握了一下的内容:

1、什么是关系数据库重点选择(selection)操作。

2、怎样利用WHERE子句来限定所选的数据行。

3、6个经常使用的比較运算符(Operators)。

4、如何构造WHERE子句中的条件。

5、BETWEEN AND 和IN 比較运算符(Operators)。

6、NOt运算符的使用

7、字符串和日起数据在SQL语句中的表示。

8、LIkE比較运算符(operators)和通配符(wildcard)。

9、转意字符(escape)的应用。

10、ORDER BY 子句的简单使用。

11、使用别名或表达式进行排序。

12、使用列号进行排序。

13、使用多列来排序。

14、使用不再SELECT列表中的列来排序。

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

第二章的学习结束。感觉自己又忘得几乎相同了。

感谢csdn编辑器几乎相同实时保存的功能。让我保留住了我的文章,不然按错了一个删除建,网页自己主动返回上一页,我哭的心都有了。

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

上一篇:  oracle学习 第二章 限制性查询和数据的排序 ——02

下一篇:oracle学习 第三章 经常使用的SQL*PLUS命令 ——01

oracle学习 第二章 限制性查询和数据的排序 ——03的更多相关文章

  1. oracle学习 第一章 简单的查询语句 ——03

    1.1最简单的查询语句 例 1-1 SQL> select * from emp; 例 1-1 结果 这里的 * 号表示全部的列.它与在select 之后列出全部的列名是一样的.查询语句以分号( ...

  2. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  3. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  4. oracle学习----去除表中的重复数据

    重复的数据可能有这样两种情况,第一种:表中只有某些字段一样,第二种:两行记录完全一样.第一.对于部分字段重复数据的删除        先来谈谈如何查询重复的数据吧.        下面语句可以查询出那 ...

  5. Oracle记录(四) 简单查询、限定查询、数据的排序

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...

  6. Oracle笔记(四) 简单查询、限定查询、数据的排序

    一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...

  7. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  8. mysql学习 第二章 数据库的基本操作

    3.1   创建数据库 MySQL安装好之后,首先需要创建数据库,这是使用MySQL各种功能的前提.本章将详细介绍数据的基本操作,主要内容包括:创建数据库.删除数据库.不同类型的数据存储引擎和存储引擎 ...

  9. Oracle学习——第一章

    Oracle数据库特点:安全性高,数据类型丰富 Oracle是由美国甲骨文公司开发的一款数据库产品 -------------------------------------------------- ...

随机推荐

  1. ccf_201712-2

    题目 问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1 ...

  2. layer的iframe层的传参和回参

    从父窗口传参给iframe,参考://https://yq.aliyun.com/ziliao/133150 从iframe回参给父窗口,参考:https://www.cnblogs.com/jiqi ...

  3. GIMP用Path作画了解一下

    先准备好Path的底稿,只是实验学到的东西,粗糙了点.Paint through the Path,顾名思义,就是沿着Path作画: 1/如果选择的是Stroke line,可以根据自己的喜好,调节S ...

  4. Ubuntu 下的aegisub安装

    大家用开源的软件用习惯了.推荐大家使用一下字幕编辑软件 分享的是Ubuntu下的安装教程: $ sudo add-apt-repository ppa:djcj/aegisub $ sudo apt- ...

  5. perl学习 之:my local our

    范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为 ...

  6. Lex与Yacc学习(五)之正则表达式篇

    正则表达式语法 lex模式是由编辑程序和实用程序使用的正则表达式的扩展版本.正则表达式由常规字符(代表它们本身)和元字符(在一种模式中具有特殊含义)组成. 元字符 . . 匹配除了换行符 \n 之外的 ...

  7. tabel使用总结

    对日常使用到的tabel做下记录: <table cellspacing="0"><!--单元格间距为零 默认为2 border默认为 0--> <t ...

  8. 100个直接可以拿来用的JavaScript实用功能代码片段(转)

    把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 目录如下: 1.原生JavaScript实现字符串长度截取2.原生JavaS ...

  9. 【Luogu】P3865ST表模板(ST表)

    题目链接 本来准备自己yy一个倍增来着,然而一看要求O1查询就怂了. ST表模板.放上代码. #include<cstdio> #include<cstdlib> #inclu ...

  10. 【Luogu】P1586四方定理(DP)

    题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...