中国电信广东公司综合部广东省电信规划设计院第1章安装1.1ORACLE数据库安装1.2PL/SQL工具安装,默认下一步即可.1.3配置本机tnsname.ora文件1.4测试tnsname.ora配置是否正确1.5PL/SQL登录中国电信广东公司综合部广东省电信规划设计院第2章SQL基础2.1数据库查询语言SQL2.2基本查询和排序2.3条件查询2.4函数2.5高级查询2.6阶段训练2.7练习中国电信广东公司综合部广东省电信规划设计院2.1数据库查询语言SQL2.1.1SQL语言的特点和分类SQL语言有以下的主要特点:*SQL语言可以在Oracle数据库中创建、存储、更新、检索和维护数据,其中主要的功能是实现数据的查询和数据的插入、删除、修改等操作。*SQL语言在书写上类似于英文,简洁清晰,易于理解。它由关键字、表名、字段名,表达式等部分构成。中国电信广东公司综合部广东省电信规划设计院*SQL语言属于非过程化的4GL(第四代语言)。*SQL语言按功能可分为DDL语言、DML语言、DCL语言和数据库事务处理语言四个类别。*SQL语言的主要关键字有:ALTER、DROP、REVOKE、AUDIT、GRANT、ROLLBACK、COMMIT、INSERT、SELECT、COMMENT、LOCK、UPDATE、CREATE、NOAUDIT、VALIDATE、DELETE、RENAME等。按照SQL语言的不同功用,可以进一步对SQL语言进行划分。下表给出了SQL语言的分类和功能简介。中国电信广东公司综合部广东省电信规划设计院表2-1SQL语言的分类类别功能举例数据库控制语言(DCL)控制对数据库的访问,启动和关闭等对系统权限进行授权和回收的GRANT、REVOKE等语句数据库定义语言(DDL)用来创建、删除及修改数据库对象创建表和索引的CREATETABLE、ALTERINDEX等语句数据库操纵语言(DML)用来操纵数据库的内容,包括查询查询、插入、删除、修改和锁定操作的SELECT、INSERT、UPDATE、DELETE、LOCKTABLE等语句数据库事务处理实现对数据的交易过程的完整控制与数据库事物处理相关的COMMIT、ROLLBACK、SAVEPOINT、SETTRANSACTION等语句中国电信广东公司综合部广东省电信规划设计院2.1.2SQL的基本语法SQL语言的语法比较简单,类似于书写英文的语句。其语句一般由主句和若干个从句组成,主句和从句都由关键字引导。主句表示该语句的主要功能,从句表示一些条件或限定,有些从句是可以省略的。在语句中会引用到列名、表名或表达式。另外还有如下一些说明:*关键字、字段名、表名等之间都要用空格或逗号等进行必要的分隔。*语句的大小写不敏感(查询的内容除外)。*语句可以写在一行或多行。*语句中的关键字不能略写和分开写在两行。中国电信广东公司综合部广东省电信规划设计院*要在每条SQL语句的结束处添加“;”号。*为了提高可读性,可以使用缩进。*从句一般写在另一行的开始处。查询语句是最常见的SQL语句,它从给定的表中,把满足条件的内容检索出来。以下是最基本的SELECT语句语法。SELECT字段名列表FROM表名WHERE条件;SELECT为查询语句的关键字,后跟要查询的字段名列表,字段名列表用来指定检索特定的字段,该关键字不能省略。中国电信广东公司综合部广东省电信规划设计院字段名列表代表要查询的字段。FROM也是查询语句关键字,后面跟要查询的表名,该关键字不能省略。WHERE条件限定检索特定的记录,满足“条件”的记录被显示出来,不满足条件的被过滤掉。语句查询的结果往往是表的一部分行和列。如果字段名列表使用*,将检索全部的字段。如果省略WHERE条件,将检索全部的记录。中国电信广东公司综合部广东省电信规划设计院【训练1】查询部门10的雇员。输入并执行查询:SELECT*FROMempWHEREdeptno=10;结果略。说明:该查询语句从emp表中检索出部门10的雇员,条件由WHEREdeptno=10子句指定。中国电信广东公司综合部广东省电信规划设计院2.2基本查询和排序2.2.1查询的基本用法在Oracle数据库中,对象是属于模式的,每个账户对应一个模式,模式的名称就是账户名称。在表名前面要添加模式的名字,在表的模式名和表名之间用“.”分隔。我们以不同的账户登录数据库时,就进入了不同的模式,比如登录到STUDENT账户,就进入了STUDENT模式。而在STUDENT模式要查询属于SCOTT模式的表,就需要写成:SELECT*FROMSCOTT.EMP;中国电信广东公司综合部广东省电信规划设计院但如果登录用户访问属于用户模式本身的表,那么可以省略表名前面的模式名称。SELECT*FROMemp;1.指定检索字段下面的练习,只显示表的指定字段。【训练1】显示DEPT表的指定字段的查询。输入并执行查询:SELECTdeptno,dnameFROMdept;中国电信广东公司综合部广东省电信规划设计院显示结果如下:DEPTNODNAME--------------------------------10ACCOUNTING20RESEARCH30SALES40OPERATIONS说明:结果只包含2列deptno和dname。在语句中给出要显示的列名,列名之间用“,”分隔。表头的显示默认为全部大写。对于日期和数值型数据,右对齐显示,如deptno列。对于字符型数据,左对齐显示,如dname列。中国电信广东公司综合部广东省电信规划设计院【练习1】显示emp表的雇员名称和工资。2.显示行号每个表都有一个虚列ROWNUM,它用来显示结果中记录的行号。我们在查询中也可以显示这个列。【训练2】显示EMP表的行号。输入并执行查询:SELECTrownum,enameFROMemp;中国电信广东公司综合部广东省电信规划设计院结果如下:ROWNUMENAME-------------------------------1SMITH2ALLEN3WARD4JONES注意:显示的行号是查询结果的行号,数据在数据库中是没有行号的。中国电信广东公司综合部广东省电信规划设计院3.显示计算列在查询语句中可以有算术表达式,它将形成一个新列,用于显示计算的结果,通常称为计算列。表达式中可以包含列名、算术运算符和括号。括号用来改变运算的优先次序。常用的算术运算符包括:*+:加法运算符。*-:减法运算符。**:乘法运算符。*/:除法运算符。以下训练在查询中使用了计算列。中国电信广东公司综合部广东省电信规划设计院【训练3】显示雇员工资上浮20%的结果。输入并执行查询:SELECTename,sal,sal*(1+20/100)FROMemp;显示结果为:ENAMESALSAL*(1+20/100)-------------------------------------------------------SMITH800960ALLEN16001920说明:结果中共显示了3列,第3列显示工资上浮20%的结果,它不是表中存在的列,而是计算产生的结果,称为计算列。中国电信广东公司综合部广东省电信规划设计院【练习2】显示EMP表的雇员名称以及工资和津贴的和。4.使用别名我们可以为表的列起一个别名,它的好处是,可以改变表头的显示。特别是对于计算列,可以为它起一个简单的列别名以代替计算表达式在表头的显示。【训练4】在查询中使用列别名。输入并执行:SELECTenameAS名称,sal工资FROMemp;显示结果为:名称工资---------------------------------SMITH800ALLEN1600中国电信广东公司综合部广东省电信规划设计院说明:表头显示的是列别名,转换为汉字显示。在列名和别名之间要用AS分隔,如ename和它的别名“名称”之间用AS隔开。AS也可以省略,如sal和它的别名“工资”之间用空格分割。注意:如果用空格分割,要区别好列名和别名,前面为列名,后面是别名。别名如果含有空格或特殊字符或大小写敏感,需要使用双引号将它引起来。中国电信广东公司综合部广东省电信规划设计院【训练5】在列别名上使用双引号。输入并执行查询:SELECTenameASName,sal*12+5000AS年度工资(加年终奖)FROMemp;显示结果为:Name年度工资(加年终奖)-------------------------------------------SMITH14600ALLEN24200中国电信广东公司综合部广东省电信规划设计院说明:其中别名“Name”有大小写的区别,别名“年度工资(加年终奖)”中出现括号,属于特殊符号,所以都需要使用双引号将别名引起。【练习3】显示DEPT表的内容,使用别名将表头转换成中文显示。5.连接运算符在前面,我们使用到了包含数值运算的计算列,显示结果也是数值型的。我们也可以使用字符型的计算列,方法是在查询中使用连接运算。连接运算符是双竖线“||”。通过连接运算可以将两个字符串连接在一起。中国电信广东公司综合部广东省电信规划设计院【训练6】在查询中使用连接运算。输入并执行查询:SELECTename||jobAS雇员和职务表FROMemp;输出结果为:雇员和职务表-------------------SMITHCLERKALLENSALESMAN中国电信广东公司综合部广东省电信规划设计院说明:在本例中,雇员名称和职务列被连接成为一个列显示。在查询中可以使用字符和日期的常量,表示固定的字符串或固定日期。字符和日期的常量需要用单引号引起。下一个训练是作为上一个训练的改进。中国电信广东公司综合部广东省电信规划设计院【训练7】在查询中使用字符串常量。输入并执行查询:SELECTename||'IS'||jobAS雇员和职务表FROMemp;输出结果为:雇员和职务表-----------------------SMITHISCLERKALLENISSALESMAN说明:本练习中将雇员名称、字符串常量“IS”和雇员职务3个部分连接在一起。中国电信广东公司综合部广东省电信规划设计院【练习4】显示DEPT表的内容,按以下的形式:部门ACCOUNTING所在的城市为NEWYORK6.消除重复行如果在显示结果中存在重复行,可以使用的关键字DISTINCT消除重复显示。中国电信广东公司综合部广东省电信规划设计院【训练8】使用DISTINCT消除重复行显示。输入并执行查询:SELECTDISTINCTjobFROMemp;结果为:JOB---------ANALYSTCLERKMANAGERPRESIDENTSALESMAN中国电信广东公司综合部广东省电信规划设计院说明:在本例中,如果不使用DISTINCT关键字,将重复显示雇员职务,DISTINCT关键字要紧跟在SELECT之后。请去掉DISTINCT关键字,重新执行,并观察显示结果的不同。【练习5】显示EMP表中不同的部门编号。2.2.2查询结果的排序如果要在查询的同时排序显示结果,可以使用如下的语句:SELECT字段列表FROM表名WHERE条件ORDERBY字段名1[ASC|DESC][,字段名2[ASC|DESC]...];中国电信广东公司综合部广东省电信规划设计院ORDERBY从句后跟要排序的列。ORDERBY从句出现在SELECT语句的最后。排序有升序和降序之分,ASC表示升序排序,DESC表示降序排序。如果不指明排序顺序,默认的排序顺序为升序。如果要降序,必须书写DESC关键字。中国电信广东公司综合部广东省电信规划设计院1.升序排序【训练1】查询雇员姓名和工资,并按工资从小到大排序。输入并执行查询:SELECTename,salFROMempORDERBYsal;执行结果为:ENAMESAL---------------------------------SMITH800JAMES950注意:若省略ASC和DESC,则默认为ASC,即升序排序。中国电