1、中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院第1章 安装1 1.1 ORACLE.1 ORACLE数据库安装数据库安装1.2 P1.2 PL/SQLL/SQL工具安装工具安装,默认下一步即可默认下一步即可.1 1.3.3 配置本机配置本机tnsname.oratnsname.ora文件文件1 1.4.4 测试测试tnsname.oratnsname.ora配置是否正确配置是否正确1.5 PL/SQL1.5 PL/SQL登录登录中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院第2章 SQL基础2.1 数据库查询语言数据库
2、查询语言SQL2.2 基本查询和排序基本查询和排序2.3 条件查询条件查询 2.4 函数函数 2.5 高级查询高级查询2.6 阶段训练阶段训练2.7 练习练习中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2.1 数据库查询语言SQL2.1.1 SQL语言的特点和分类语言的特点和分类SQL语言有以下的主要特点:语言有以下的主要特点:*SQL语语言言可可以以在在Oracle数数据据库库中中创创建建、存存储储、更更新新、检检索索和和维维护护数数据据,其其中中主主要要的的功功能能是是实实现现数数据据的的查查询询和和数数据据的的插插入入、删除、修改等操作。删除、修改
3、等操作。*SQL语语言言在在书书写写上上类类似似于于英英文文,简简洁洁清清晰晰,易易于于理理解解。它它由关键字、表名、字段名,表达式等部分构成。由关键字、表名、字段名,表达式等部分构成。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院*SQL语言属于非过程化的语言属于非过程化的4GL(第四代语言第四代语言)。*SQL语语言言按按功功能能可可分分为为DDL语语言言、DML语语言言、DCL语语言言和数据库事务处理语言四个类别。和数据库事务处理语言四个类别。*SQL语语言言的的主主要要关关键键字字有有:ALTER、DROP、REVOKE、AUDIT、GRANT、R
4、OLLBACK、COMMIT、INSERT、SELECT、COMMENT、LOCK、UPDATE、CREATE、NOAUDIT、VALIDATE、DELETE、RENAME等。等。按按照照SQL语语言言的的不不同同功功用用,可可以以进进一一步步对对SQL语语言言进进行行划分。下表给出了划分。下表给出了SQL语言的分类和功能简介。语言的分类和功能简介。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院表2-1 SQL语言的分类中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2.1.2 SQL的基本语法的基本语法SQL语语言言的
5、的语语法法比比较较简简单单,类类似似于于书书写写英英文文的的语语句句。其其语语句句一一般般由由主主句句和和若若干干个个从从句句组组成成,主主句句和和从从句句都都由由关关键键字字引引导导。主主句句表表示示该该语语句句的的主主要要功功能能,从从句句表表示示一一些些条条件件或或限限定定,有有些些从从句句是是可可以以省省略略的的。在在语语句句中中会会引引用用到到列列名名、表表名名或或表表达达式式。另另外外还还有如下一些说明:有如下一些说明:*关关键键字字、字字段段名名、表表名名等等之之间间都都要要用用空空格格或或逗逗号号等等进进行行必必要的分隔。要的分隔。*语句的大小写不敏感语句的大小写不敏感(查询的
6、内容除外查询的内容除外)。*语句可以写在一行或多行。语句可以写在一行或多行。*语句中的关键字不能略写和分开写在两行。语句中的关键字不能略写和分开写在两行。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院*要在每条要在每条SQL语句的结束处添加语句的结束处添加“;”号。号。*为了提高可读性,可以使用缩进。为了提高可读性,可以使用缩进。*从句一般写在另一行的开始处。从句一般写在另一行的开始处。查查询询语语句句是是最最常常见见的的SQL语语句句,它它从从给给定定的的表表中中,把把满满足条件的内容检索出来。以下是最基本的足条件的内容检索出来。以下是最基本的SELEC
7、T语句语法。语句语法。SELECT 字段名列表字段名列表 FROM 表名表名 WHERE 条件条件;SELECT为为查查询询语语句句的的关关键键字字,后后跟跟要要查查询询的的字字段段名名列列表表,字段名列表用来指定检索特定的字段,该关键字不能省略。字段名列表用来指定检索特定的字段,该关键字不能省略。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院字段名列表代表要查询的字段。字段名列表代表要查询的字段。FROM 也也是是查查询询语语句句关关键键字字,后后面面跟跟要要查查询询的的表表名名,该该关键字不能省略。关键字不能省略。WHERE条条件件限限定定检检索索特特
8、定定的的记记录录,满满足足“条条件件”的的记记录被显示出来,不满足条件的被过滤掉。录被显示出来,不满足条件的被过滤掉。语语句句查查询询的的结结果果往往往往是是表表的的一一部部分分行行和和列列。如如果果字字段段名名列列表表使使用用*,将将检检索索全全部部的的字字段段。如如果果省省略略WHERE条条件件,将检索全部的记录。将检索全部的记录。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练1】查询部门查询部门10的雇员。的雇员。输入并执行查询:输入并执行查询:SELECT*FROM emp WHERE deptno=10;结果略。结果略。说说明明:该该查
9、查询询语语句句从从emp表表中中检检索索出出部部门门10 的的雇雇员员,条件由条件由WHERE deptno=10 子句指定。子句指定。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2.2 基本查询和排序2.2.1 查询的基本用法查询的基本用法在在Oracle数数据据库库中中,对对象象是是属属于于模模式式的的,每每个个账账户户对对应应一一个个模模式式,模模式式的的名名称称就就是是账账户户名名称称。在在表表名名前前面面要要添添加加模模式式的的名名字字,在在表表的的模模式式名名和和表表名名之之间间用用“.”分分隔隔。我我们们以以不不同同的的账账户户登登录录数数
10、据据库库时时,就就进进入入了了不不同同的的模模式式,比比如如登登录录到到STUDENT 账账户户,就就进进入入了了STUDENT模模式式。而而在在STUDENT模模式式要要查查询询属属于于SCOTT模式的表,就需要写成:模式的表,就需要写成:SELECT*FROM SCOTT.EMP;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院但但如如果果登登录录用用户户访访问问属属于于用用户户模模式式本本身身的的表表,那那么么可可以省略表名前面的模式名称。以省略表名前面的模式名称。SELECT*FROM emp;1指定检索字段指定检索字段下面的练习,只显示表的指定字段
11、。下面的练习,只显示表的指定字段。【训练训练1】显示显示DEPT表的指定字段的查询。表的指定字段的查询。输入并执行查询:输入并执行查询:SELECT deptno,dname FROM dept;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院显示结果如下:显示结果如下:DEPTNO DNAME-10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS说说明明:结结果果只只包包含含2列列deptno和和dname。在在语语句句中中给给出出要要显显示示的的列列名名,列列名名之之间间用用“,”分分隔隔。表表头头的的显显示示
12、默默认认为为全全部部大大写写。对对于于日日期期和和数数值值型型数数据据,右右对对齐齐显显示示,如如deptno列列。对对于于字字符符型型数据,左对齐显示,如数据,左对齐显示,如dname列。列。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练习练习1】显示显示emp表的雇员名称和工资。表的雇员名称和工资。2显示行号显示行号每每个个表表都都有有一一个个虚虚列列ROWNUM,它它用用来来显显示示结结果果中中记记录的行号。我们在查询中也可以显示这个列。录的行号。我们在查询中也可以显示这个列。【训练训练2】显示显示EMP表的行号。表的行号。输入并执行查询:输入并
13、执行查询:SELECT rownum,ename FROM emp;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院结果如下:结果如下:ROWNUM ENAME-1 SMITH 2 ALLEN 3 WARD 4 JONES 注注意意:显显示示的的行行号号是是查查询询结结果果的的行行号号,数数据据在在数数据据库库中是没有行号的。中是没有行号的。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院3显示计算列显示计算列在在查查询询语语句句中中可可以以有有算算术术表表达达式式,它它将将形形成成一一个个新新列列,用用于于显显示示计计算
14、算的的结结果果,通通常常称称为为计计算算列列。表表达达式式中中可可以以包包含含列列名名、算算术术运运算算符符和和括括号号。括括号号用用来来改改变变运运算算的的优优先先次次序。常用的算术运算符包括:序。常用的算术运算符包括:*+:加法运算符。:加法运算符。*-:减法运算符。:减法运算符。*:乘法运算符。:乘法运算符。*/:除法运算符。:除法运算符。以下训练在查询中使用了计算列。以下训练在查询中使用了计算列。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练3】显示雇员工资上浮显示雇员工资上浮20%的结果。的结果。输入并执行查询输入并执行查询:SELEC
15、T ename,sal,sal*(1+20/100)FROM emp;显示结果为:显示结果为:ENAME SAL SAL*(1+20/100)-SMITH 800 960ALLEN 1600 1920说说明明:结结果果中中共共显显示示了了3列列,第第3列列显显示示工工资资上上浮浮20%的的结结果果,它不是表中存在的列,而是计算产生的结果,称为计算列。它不是表中存在的列,而是计算产生的结果,称为计算列。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练习练习2】显示显示EMP表的雇员名称以及工资和津贴的和。表的雇员名称以及工资和津贴的和。4使用别名使用别名我
16、我们们可可以以为为表表的的列列起起一一个个别别名名,它它的的好好处处是是,可可以以改改变变表表头头的的显显示示。特特别别是是对对于于计计算算列列,可可以以为为它它起起一一个个简简单单的的列列别别名名以以代代替替计计算表达式在表头的显示。算表达式在表头的显示。【训练训练4】在查询中使用列别名。在查询中使用列别名。输入并执行:输入并执行:SELECT ename AS 名称名称,sal 工资工资 FROM emp;显示结果为:显示结果为:名称名称 工资工资-SMITH 800ALLEN 1600中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:表表头头显
17、显示示的的是是列列别别名名,转转换换为为汉汉字字显显示示。在在列列名名和和别别名名之之间间要要用用AS分分隔隔,如如ename和和它它的的别别名名“名名称称”之之间间用用AS隔隔开开。AS也也可可以以省省略略,如如sal和和它它的的别别名名“工工资资”之之间用空格分割。间用空格分割。注注意意:如如果果用用空空格格分分割割,要要区区别别好好列列名名和和别别名名,前前面面为列名,后面是别名。为列名,后面是别名。别名如果含有空格或特殊字符或大小写敏感,需要使别名如果含有空格或特殊字符或大小写敏感,需要使用双引号将它引起来。用双引号将它引起来。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划
18、设计院广东省电信规划设计院【训练训练5】在列别名上使用双引号。在列别名上使用双引号。输入并执行查询:输入并执行查询:SELECT ename AS Name,sal*12+5000 AS 年年度度工工资资(加加年终奖年终奖)FROM emp;显示结果为:显示结果为:Name 年度工资年度工资(加年终奖加年终奖)-SMITH 14600ALLEN 24200 中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:其其中中别别名名“Name”有有大大小小写写的的区区别别,别别名名“年年度度工工资资(加加年年终终奖奖)”中中出出现现括括号号,属属于于特特殊殊符
19、符号号,所所以以都都需需要使用双引号将别名引起。要使用双引号将别名引起。【练练习习3】显显示示DEPT表表的的内内容容,使使用用别别名名将将表表头头转转换换成成中文显示。中文显示。5连接运算符连接运算符在在前前面面,我我们们使使用用到到了了包包含含数数值值运运算算的的计计算算列列,显显示示结结果果也也是是数数值值型型的的。我我们们也也可可以以使使用用字字符符型型的的计计算算列列,方方法法是是在在查查询询中中使使用用连连接接运运算算。连连接接运运算算符符是是双双竖竖线线“|”。通过连接运算可以将两个字符串连接在一起。通过连接运算可以将两个字符串连接在一起。中国电信广东公司中国电信广东公司综合部综
20、合部广东省电信规划设计院广东省电信规划设计院【训练训练6】在查询中使用连接运算。在查询中使用连接运算。输入并执行查询:输入并执行查询:SELECT ename|job AS 雇员和职务表雇员和职务表 FROM emp;输出结果为:输出结果为:雇员和职务表雇员和职务表-SMITHCLERKALLENSALESMAN中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:在在本本例例中中,雇雇员员名名称称和和职职务务列列被被连连接接成成为为一一个个列显示。列显示。在在查查询询中中可可以以使使用用字字符符和和日日期期的的常常量量,表表示示固固定定的的字字符符串串
21、或或固固定定日日期期。字字符符和和日日期期的的常常量量需需要要用用单单引引号号引引起起。下一个训练是作为上一个训练的改进。下一个训练是作为上一个训练的改进。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练7】在查询中使用字符串常量。在查询中使用字符串常量。输入并执行查询:输入并执行查询:SELECTename|IS|job AS 雇雇员员和和职职务务表表 FROM emp;输出结果为:输出结果为:雇员和职务表雇员和职务表-SMITH IS CLERKALLEN IS SALESMAN说明:本练习中将雇员名称、字符串常量说明:本练习中将雇员名称、字符
22、串常量“IS”和雇员和雇员职务职务3个部分连接在一起。个部分连接在一起。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练习练习4】显示显示DEPT表的内容,按以下的形式表的内容,按以下的形式:部门部门ACCOUNTING所在的城市为所在的城市为NEW YORK 6消除重复行消除重复行如如果果在在显显示示结结果果中中存存在在重重复复行行,可可以以使使用用的的关关键键字字DISTINCT消除重复显示。消除重复显示。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练8】使用使用DISTINCT消除重复行显示。消除重复
23、行显示。输入并执行查询:输入并执行查询:SELECT DISTINCT job FROM emp;结果为:结果为:JOB-ANALYSTCLERKMANAGERPRESIDENTSALESMAN中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:在在本本例例中中,如如果果不不使使用用DISTINCT关关键键字字,将将重重复复显显示示雇雇员员职职务务,DISTINCT关关键键字字要要紧紧跟跟在在SELECT之之后后。请请去去掉掉DISTINCT关键字,重新执行,并观察显示结果的不同。关键字,重新执行,并观察显示结果的不同。【练习练习5】显示显示EMP表中
24、不同的部门编号。表中不同的部门编号。2.2.2 查询结果的排序查询结果的排序如果要在查询的同时排序显示结果,可以使用如下的语句:如果要在查询的同时排序显示结果,可以使用如下的语句:SELECT 字段列表字段列表 FROM 表名表名 WHERE 条件条件ORDER BY 字段名字段名1 ASC|DESC,字段名字段名2 ASC|DESC.;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院ORDER BY从从句句后后跟跟要要排排序序的的列列。ORDER BY 从从句句出出现现在在SELECT语句的最后。语句的最后。排排序序有有升升序序和和降降序序之之分分,ASC
25、表表示示升升序序排排序序,DESC表表示示降降序序排排序序。如如果果不不指指明明排排序序顺顺序序,默默认认的的排排序序顺顺序序为为升升序序。如果要降序,必须书写如果要降序,必须书写DESC关键字。关键字。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院1升序排序升序排序【训练训练1】查询雇员姓名和工资,并按工资从小到大排序。查询雇员姓名和工资,并按工资从小到大排序。输入并执行查询:输入并执行查询:SELECT ename,sal FROM emp ORDER BY sal;执行结果为:执行结果为:ENAME SAL-SMITH 800JAMES 950注意:
26、若省略注意:若省略ASC和和DESC,则默认为,则默认为ASC,即升序排序。,即升序排序。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2降序排序降序排序【训训练练2】查查询询雇雇员员姓姓名名和和雇雇佣佣日日期期,并并按按雇雇佣佣日日期期排序,后雇佣的先显示。排序,后雇佣的先显示。输入并执行查询:输入并执行查询:SELECT ename,hiredate FROM emp ORDER BY hiredate DESC;结果如下:结果如下:ENAME HIREDATE-ADAMS 23-5月月-87SCOTT 19-4月月-87中国电信广东公司中国电信广东公
27、司综合部综合部广东省电信规划设计院广东省电信规划设计院MILLER 23-1月月-82JAMES 03-12月月-81FORD 03-12月月-81注意:注意:DESC表示降序排序,不能省略。表示降序排序,不能省略。3多列排序多列排序可可以以按按多多列列进进行行排排序序,先先按按第第一一列列,然然后后按按第第二二列列、第第三三列列.。【训训练练3】查查询询雇雇员员信信息息,先先按按部部门门从从小小到到大大排排序序,再再按按雇佣时间的先后排序。雇佣时间的先后排序。输入并执行查询:输入并执行查询:SELECT ename,deptno,hiredate FROM emp ORDER BY dept
28、no,hiredate;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院结果如下:结果如下:ENAME DEPTNO HIREDATE-CLARK 10 09-6月月-81KING 10 17-11月月-81MILLER 10 23-1月月-82SMITH 20 17-12月月-80JONES 20 02-4月月-81FORD 20 03-12月月-81SCOTT 20 19-4月月-87说说明明:该该排排序序是是先先按按部部门门升升序序排排序序,部部门门相相同同的的情情况况下,再按雇佣时间升序排序。下,再按雇佣时间升序排序。中国电信广东公司中国电信广东公司
29、综合部综合部广东省电信规划设计院广东省电信规划设计院4在排序中使用别名在排序中使用别名如如果果要要对对计计算算列列排排序序,可可以以为为计计算算列列指指定定别别名名,然然后后按别名排序。按别名排序。【训练训练4】按工资和工作月份的乘积排序。按工资和工作月份的乘积排序。输入并执行查询:输入并执行查询:SELECT empno,ename,sal*Months_between(sysdate,hiredate)AS total FROM emp ORDER BY total;中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院执行结果为:执行结果为:EMPNO EN
30、AME TOTAL-7876ADAMS 221526.006 7369 SMITH 222864.661 7900 JAMES 253680.817 7654 MARTIN 336532.484说明:求得雇员工作月份的函数说明:求得雇员工作月份的函数Months_between将在将在后面介绍。后面介绍。sysdate表示当前日期。表示当前日期。【练习练习1】将部门表中的部门名称按字母顺序显示。将部门表中的部门名称按字母顺序显示。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2.3 条件查询 2.3.1 简单条件查询简单条件查询要要对对显显示示的的行行进进
31、行行限限定定,可可在在FROM从从句句后后使使用用WHERE从从句句,在在WHERE从从句句中中给给出出限限定定的的条条件件,因因为为限限定定条条件件是是一一个个表表达达式式,所所以以称称为为条条件件表表达达式式。条条件件表表达达式式中中可可以以包包含含比比较较运运算算,表表达达式式的的值值为为真真的的记记录录将将被被显显示示。常常用用的的比比较较运运算算符符列列于于表表2-2中。中。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院表2-2 比 较 运 算 符中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训训练练1】显
32、显示示职职务务为为“SALESMAN”的的雇雇员员的的姓姓名名、职务和工资。职务和工资。输入并执行查询:输入并执行查询:SELECT ename,job,sal FROM emp WHERE job=SALESMAN;执行结果为:执行结果为:ENAME JOB SAL-ALLEN SALESMAN 1600WARD SALESMAN 1250MARTIN SALESMAN 1250TURNER SALESMAN 1500中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:结结果果只只显显示示职职务务为为“SALESMAN”的的雇雇员员。字字符符串串和和
33、日日期期型型数数据据的的值值是是包包含含在在单单引引号号中中的的,如如SALESMAN,需需要要用用单单引引号号引引起起。字字符符的的值值对对大大小小写写敏敏感感,在在emp表表中中存存放的职务字符串全部是大写。放的职务字符串全部是大写。注注意意:在在本本练练习习中中,如如果果SALESMAN写写成成小小写写或或大大小小写写混合,将不会有查询结果输出。混合,将不会有查询结果输出。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练2】显示工资大于等于显示工资大于等于3000的雇员姓名、职务和工资。的雇员姓名、职务和工资。输入并执行查询:输入并执行查询:
34、SELECT ename,job,sal FROM emp WHERE sal=3000;执行结果为:执行结果为:ENAME JOB SAL-SCOTT ANALYST 3000KING PRESIDENT 5000FORD ANALYST 3000中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说明:结果只显示工资大于等于说明:结果只显示工资大于等于3000的雇员。的雇员。缺缺省省中中文文日日期期格格式式为为DD-MM月月-YY,如如2003年年1月月10日日应应该该表表示为示为“10-1月月-03”。【训练训练3】显示显示1982年以后雇佣的雇员姓名和雇
35、佣时间。年以后雇佣的雇员姓名和雇佣时间。输入并执行查询:输入并执行查询:SELECT ename,hiredate FROM emp WHERE hiredate=1-1月月-82;执行结果为:执行结果为:ENAME HIREDATE-中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院SCOTT 19-4月月-87ADAMS 23-5月月-87MILLER 23-1月月-82说明:检查说明:检查hiredate字段的内容,都在字段的内容,都在82年以后。年以后。【练习练习1】显示部门编号为显示部门编号为10的雇员姓名和雇佣时间。的雇员姓名和雇佣时间。中国电信广
36、东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院2.3.2 复合条件查询复合条件查询可可以以用用逻逻辑辑运运算算符符构构成成复复合合的的条条件件查查询询,即即把把两两个个或或多多个个条条件件,用用逻逻辑辑运运算算符符连连接接成成一一个个条条件件。有有3个个逻逻辑辑运运算算符,如表符,如表2-3所示。所示。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院表2-3 逻辑运算符中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院运运算算的的优优先先顺顺序序是是NOT,AND,OR。如如果果要要改改变变优优先
37、先顺序,可以使用括号。顺序,可以使用括号。下面是使用逻辑与运算的练习。下面是使用逻辑与运算的练习。1使用逻辑与使用逻辑与【训训练练1】显显示示工工资资在在10002000之之间间(不不包包括括1000和和2000)的雇员信息。的雇员信息。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院输入并执行查询:输入并执行查询:SELECT ename,job,sal FROM emp WHERE sal1000 AND sal1000 AND sal1000 AND 2000。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练习练
38、习1】显示部门显示部门10中工资大于中工资大于1500的雇员。的雇员。2使用逻辑或使用逻辑或下面是使用逻辑或运算的练习。下面是使用逻辑或运算的练习。【训练训练2】显示职务为显示职务为CLERK或或MANAGER的雇员信息。的雇员信息。输入并执行查询:输入并执行查询:SELECT*FROM emp WHERE job=CLERK OR job=MANAGER;执行结果从略。执行结果从略。说说明明:检检索索职职务务为为CLERK或或MANAGER的的雇雇员员,需需要要使使用用OR运算,请自行察看结果。运算,请自行察看结果。注注 意意:条条 件件 job=CLERK OR job=MANAGER不不
39、 能能 写写 成成job=CLERK OR MANAGER。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院3使用逻辑非使用逻辑非下面是使用逻辑非运算的练习。下面是使用逻辑非运算的练习。【训练训练3】显示部门显示部门10以外的其他部门的雇员。以外的其他部门的雇员。输入并执行查询:输入并执行查询:SELECT*FROM emp WHERE NOT deptno=10;执行结果从略。执行结果从略。说说明明:执执行行结结果果包包含含部部门门编编号号不不等等于于10的的其其他他部部门门的的雇员,请自行察看结果。雇员,请自行察看结果。中国电信广东公司中国电信广东公司综
40、合部综合部广东省电信规划设计院广东省电信规划设计院4使用逻辑或和逻辑与使用逻辑或和逻辑与下面是同时使用逻辑或和逻辑与的复合练习。下面是同时使用逻辑或和逻辑与的复合练习。【训训练练4】显显示示部部门门10和和部部门门20中中工工资资小小于于1500的的雇雇员。员。输入并执行查询输入并执行查询SELECT*FROM emp WHERE(deptno=10 OR deptno=20)AND sal0;执行结果为:执行结果为:EMPNO ENAME LENGTH(ENAME)-7369 SMITH 5 7566 JONES 5中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规
41、划设计院【训训练练4】显显示示雇雇员员名名称称中中包包含含“S”的的雇雇员员名名称称及及名名称称长度。长度。输入并执行查询:输入并执行查询:SELECT empno,ename,length(ename)FROM empWHERE instr(ename,S,1,1)0;执行结果为:执行结果为:EMPNO ENAME LENGTH(ENAME)-7369 SMITH 5 7566 JONES 5中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院说说明明:本本例例在在字字段段列列表表和和查查询询条条件件中中分分别别应应用用了了函函数数length和和 instr
42、。Length函函 数数 返返 回回 ename的的 长长 度度。instr(ename,S1,1)函函数数返返回回ename中中从从第第一一个个字字符符位位置置开开始始,字字符符串串“S”第第一一次次出出现现的的位位置置。如如果果函函数数返返回回0,则则说说明明ename中中不不包包含含字字符符串串“S”;如如果果函函数数返返回回值值大大于于0,则则说说明明ename中包含字符串中包含字符串“S”。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练练习习1】显显示示部部门门表表中中部部门门和和所所在在城城市市列列表表,中中间间以以下划线下划线“_”连接,
43、城市名转换成以大写字母开头。连接,城市名转换成以大写字母开头。2.4.3 日期型函数日期型函数Oracle使使用用内内部部数数字字格格式式来来保保存存时时间间和和日日期期,包包括括世世纪纪、年年、月月、日日、小小时时、分分、秒秒。缺缺省省日日期期格格式式为为 DD-MON-YY,如,如“08-05月月-03”代表代表2003年年5月月8日。日。SYSDATE是返回系统日期和时间的虚列函数。是返回系统日期和时间的虚列函数。使用日期的加减运算,可以实现如下功能:使用日期的加减运算,可以实现如下功能:*对日期的值加减一个天数,得到新的日期。对日期的值加减一个天数,得到新的日期。中国电信广东公司中国电
44、信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院*对两个日期相减,得到相隔天数。对两个日期相减,得到相隔天数。*通通过过加加小小时时来来增增加加天天数数,24小小时时为为一一天天,如如12小小时时可可以写成以写成12/24(或或0.5)。还有如表还有如表2-7所示的日期函数可以使用。所示的日期函数可以使用。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院表2-7 日期函数中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练1】返回系统的当前日期。返回系统的当前日期。输入并执行查询:输入并执行查询:SEL
45、ECT sysdate FROM dual;返回结果为:返回结果为:SYSDATE-06-2月月-03说说明明:该该查查询询返返回回执执行行该该查查询询时时的的数数据据库库服服务务器器的的系系统统当当前前时时间间,日日期期显显示示格格式式为为默默认认格格式式,如如“06-2月月-03”表表示示03年年2月月6日。日。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练2】返回返回2003年年2月的最后一天。月的最后一天。输入并执行查询:输入并执行查询:SELECT last_day(08-2月月-03)FROM dual;返回结果为:返回结果为:LAS
46、T_DAY(-28-2月月-03说说明明:该该函函数数给给定定参参数数为为某某月月份份的的任任意意一一天天,返返回回时时间间为为该该月月份份的的最最后后一一天天。本本例例中中,参参数数为为03年年2月月8号号,返返回日期为回日期为03年年2月月28日,是该月的最后一天。日,是该月的最后一天。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训训练练3】假假定定当当前前的的系系统统日日期期是是2003年年2月月6日日,求求再过再过1000天的日期。天的日期。输入并执行查询:输入并执行查询:SELECT sysdate+1000 AS NEW DATE FROM
47、 dual;返回结果为:返回结果为:NEW DATE-04-11月月-05说说明明:该该查查询询使使用用到到了了日日期期的的加加法法运运算算,求求经经过过一一定定天数后的新日期。天数后的新日期。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训训练练4】假假定定当当前前的的系系统统日日期期是是2003年年2月月6日日,显显示示部部门门10雇员的雇佣天数。雇员的雇佣天数。输入并执行查询:输入并执行查询:SELECT ename,round(sysdate-hiredate)DAYSFROM empWHERE deptno=10;返回结果为:返回结果为:ENA
48、ME DAYS-CLARK 7913KING 7752MILLER 7685说说明明:该该查查询询使使用用日日期期的的减减法法运运算算求求两两个个日日期期的的相相差差天天数数。用用round函数对天数进行四舍五入。函数对天数进行四舍五入。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【练习练习1】显示雇员名称和雇佣的星期数。显示雇员名称和雇佣的星期数。【练练习习2】显显示示从从本本年年1月月1日日开开始始到到现现在在经经过过的的天天数数(当当前时间取前时间取SYSDATE的值的值)。2.4.4 转换函数转换函数Oracle的的类类型型转转换换分分为为自自动
49、动类类型型转转换换和和强强制制类类型型转转换换。常常用用的的类类型型转转换换函函数数有有TO_CHAR、TO_DATE或或TO_NUMBER,如表,如表2-8所示。所示。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院表2-8 类型转换函数中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院1自动类型转换自动类型转换Oracle可以自动根据具体情况进行如下的转换:可以自动根据具体情况进行如下的转换:*字符串到数值。字符串到数值。*字符串到日期。字符串到日期。*数值到字符串。数值到字符串。*日期到字符串。日期到字符串。以下是自动
50、转换的训练。以下是自动转换的训练。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划设计院【训练训练1】自动转换字符型数据到数值型。自动转换字符型数据到数值型。输入并执行查询:输入并执行查询:SELECT 12.5+11 FROM dual;执行结果为:执行结果为:12.5+11-23.5说说明明:在在本本训训练练中中,因因为为出出现现+运运算算符符,说说明明进进行行的的是是算算术术运运算算,所所以以字字符符串串12.5被被自自动动转转换换成成数数值值12.5,然然后后参加运算。参加运算。中国电信广东公司中国电信广东公司综合部综合部广东省电信规划设计院广东省电信规划