1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四
2、级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1GB=1024MB,1MB=1024KB,Oracle数据库开发实用教程,21世纪高职高专规划教材,总 目 录,第1章 数据库引论,第2章 O
3、racle数据库实用工具,第3章 SQL语言与查询,第4章 数据的定义、操纵与控制,第5章 PL/SQL程序块,第6章 存储过程与函数,第7章 PL/SQL包与触发器,第8章 数据库对象,第9章 权限、角色与用户,第10章 Oracle数据库的逻辑备份,第11章 数据库设计过程与方法,第1章 数据库引论,学习要点:,数据库系统的模式结构,数据模型,关系数据库,本章主要内容,数据库系统概论,数据模型,数据描述,关系数据库,Oracle数据库系统概述,1.1 数据库系统概论,1.1.1 信息、数据与数据库,信息是一种已经被加工为特定形式的数据,数据是信息的载体和具体表现形式,信息不随数据形式的变化
4、而变化。很多人认为数据就是数字,实际上数据有很多形式:文字、数字、图形、声音等。,数据和信息是两个相互联系但又相互区别的概念,数据是信息的具体表现形式,信息是数据有意义的表现,而数据库是一个可以共享的、存储在计算机内的、有组织的数据集合。,1.1.2 数据管理技术的发展,1人工管理阶段,2文件管理阶段,3数据库管理阶段,4分布式数据库管理阶段,表1-1 数据库管理的发展阶段,阶段特点,人工管理,文件管理,数据库系统,分布式系统,背景,应用背景,科学计算,科学计算,数据管理,大规模管理,分布式管理,硬件背景,无,磁盘,磁带,磁鼓,大容量磁盘,大容量磁盘,软件背景,无操作系统,文件系统,数据管理系
5、统,分布式数据管理系统,处理方式,批处理,联机实时处理,批处理,联机实时处理,批处理,联机实时处理,批处理,分布处理,特点,数据管理者,用户,文件系统,DBMS,各个节点的,DBMS,数据对象,应用程序,某应用,现实世界,现实世界,数据共享,无,差,冗余度高,高,冗余度小,数据共享,数据独立,不独立,差,高,高,结构化,无结构,记录内有结构,整体无结构,整体结构化高,整体结构化高,控制能力,应用程序自己控制,应用程序自己控制,DBMS,各个节点的,DBMS,1.1.3 数据库系统的组成,数据库系统由计算机硬件、数据库管理系统、数据库、应用程序和用户等部分组成。,1.1.4 数据库系统的模式结构
6、数据库系统有着不同的层次结构。美国国家标准委员会在1975年公布了一个关于数据库标准的报告,提出了数据库的三级结构组织,也就是SPARC分级结构。三级结构对数据库的组织从内到外分三个层次描述,分别称为内模式、概念模式和外模式。,外模式又称为子模式或用户模式,是局部的逻辑结构,它与应用程序一一对应,一个数据库有多个外模式,由用户定义。,概念模式又称为模式或逻辑模式,是数据库全体数据的逻辑结构和特征描述。一个数据库只有一个模式,由DBA使用DDL(数据定义语言)语言来定义。,内模式又称为存储模式,一个数据库只有一个内模式。,事实上,三级模式中只有内模式才是真正存储数据的,而模式和外模式仅是一种逻
7、辑表示数据的方法。这三种模式之间存在两种映射:,外模式和模式之间的映射,它把用户数据库与概念数据库联系起来了。,模式和内模式之间的映射,它把概念数据库与物理数据库联系起来了,。,1.1.5 数据库系统的特点,(1)实现数据共享,减少数据冗余。,(2)采用特定的数据模型。,(3)具有较高的数据独立性。,(4)有统一的数据控制功能。,1.2 数据模型,数据模型的三要素包括:数据结构、数据操作和数据的约束条件。,(1)数据结构。数据结构是所研究的对象类型的集合。,(2)数据操作。数据操作是指对各种对象类型的实例(或值)所允许执行的操作的集合,包括操作及有关的操作规则。,(3)数据的约束条件。数据的约
8、束条件是完整性规则的集合。,1.2.1 层次模型,用树形结构表示数据及其联系的数据模型称为层次模型。,层次模型的基本特点是:树形结构中有且仅有一个结点无父结点,称其为根结点;其他结点有且只有一个父结点。层次模型可以直接方便地表示一对一联系和一对多联系,但不能直接表示多对多联系。,1.2.2 网状模型,用网络结构表示数据及其联系的数据模型称为网状模型,它是层次模型的拓展。网络模型的结点间可以任意发生联系,能够表示各种复杂的联系。,网状模型的基本特点是:,(1)有一个以上结点无父结点。,(2)至少有一个结点有多于一个的父结点。,1.2.3 关系模型,用关系表示的数据模型称为关系模型。关系数据模型由
9、关系数据结构、关系操作集合和关系的完整性约束三大要素组成。,关系数据结构是指由行与列构成的二维表。在关系模型中,实体和实体间的联系都是用关系表示的。也就是说,二维表格中既存放着实体本身的数据,又存放着实体间的联系。关系不但可以表示实体间一对多的联系,通过建立关系间的关联,也可以表示多对多的联系。,1.3 数据描述,1.3.1 信息的三个层次,计算机信息处理是这样的一个过程:首先从现实世界中抽象出大量描述客观事物的信息,再对这些信息进行整理、分类和规范,进而将规范化的信息数据化,最终实现由数据库系统存储、处理。,在此过程中,涉及到三个层次,经历了两次抽象和转换。这三个层次分别是:客观世界、信息世
10、界和数据世界。,两次抽象和转换是:,(1)把客观世界的信息抽象出来,转换为信息世界。,(2)把信息世界的数据抽象出来,转换为计算机处理的数据。,1.3.2 实体与属性,客观事物在信息世界中称为实体,它是现实世界中任何可区分、可识别的事物。,实体:可以是具体的人或物,如张三同学,石景山业余大学;也可是抽象概念,如一个人,一所学校。,属性:实体的特性称为属性。一个实体可用若干属性来刻画。每个属性都有特定的取值范围,即值域,值域的类型可以是整数型、实数型、字符型等。,如学生这个实体,它的姓名和年龄等是学生的属性;姓名的类型是字符型,值域是所有汉字;年龄是整数型,值域是(0,100)。,1.3.3 实
11、体之间的关系,(1)一对一联系(1:1)。若两个不同型实体集中,任一方的一个实体只与另一方的一个实体相对应,称这种联系为一对一联系。,(2)一对多联系(1:n)。若两个不同型实体集中,一方的一个实体对应另一方若干个实体,而另一方的一个实体只对应本方一个实体,称这种联系为一对多联系。,(3)多对多联系(m:n)。,1.4 关系数据库,关系数据库是建立在关系模型基础上的数据库,它由一些相关的表和其他数据库对象组成。这个定义包含几层含义:,(1)建立在关系模型基础上。,(2)信息被存放在表(二维表)中。,(3)表之间是相互关联的。,(4)除了表之外,还有其他数据库对象,如索引、视图、存储过程等。,一
12、般来说,关系数据库主要包括数据定义、数据操作和数据控制。,1.5 Oracle数据库简介,1.5.1 Oracle数据库及其版本,1.5.2 Oracle 10,g,的版本,Oracle 10,g,版本分为如下五类:,(1)Oracle 10,g,标准版1。,(2)Oracle 10,g,标准版。,(3)Oracle 10,g,企业版。,(4)Oracle 10,g,个人版。,(5)Oracle 10,g,移动版。,1.6 本章小结,本章主要介绍了数据管理技术的发展、数据库系统的组成、数据库系统的模式结构以及数据库系统的特点。,另外还介绍了数据模型的分类和数据描述方法,最后介绍了Oracle数
13、据库的版本和技术特点:网格化管理;自动存储管理;可移植的集群组件;支持高速无限带宽网络;计算资源供应;共振。,第2章 Oracle数据库实用工具,学习要点,iSQL*Plus的使用,SQL*Plus的使用,本章主要内容,iSQL*Plus的使用,SQL*Plus的使用,WebDB开发工具简介,JDeveloper开发工具简介,2.1 iSQL*Plus的使用,进入iSQL*Plus的方法如下:,(1)先检查Oracle的服务。把Windows操作系统中控制面板下的服务窗口打开,检查如下几个服务是否打开。,(2)在浏览器中输入:,127.0.0.1/isqlplus,,如图2-1所示。,(3)输
14、入安装时设置的用户名和密码即可进入如图2-2所示的界面。,在编辑界面的工作区,可以输入SQL语句,PL/SQL 程序块和SQL*Plus命令。如图2-3所示。,2.2 SQL*Plus的使用,SQL*Plus有几类命令:,(1)环境维护。,(2)格式设置命令。,(3)行编辑和执行命令。,(4)输入输出命令。,(5)其他命令。,2.2.1 环境维护命令,1SHOW命令,【例】查看所有系统变量值。,SQLSHOW all;,【例】显示当前连接用户。,SQLSHOW user;,【例】把错误信息列出来。,SQLSHOW error;,2SET命令,使用SET 命令可以设置SQL PLUS的环境参数。
15、例】禁止输出列标题。,SQLSET heading off;,heading的默认值为ON。,【例】禁止显示最后一行的计数反馈信息,默认值为“对6个或更多的记录,回送ON”。,SQLSET feedback off;,【例】设置查询SQL语句的执行时间,以便测试数据库的性能。,SQLSET timing on;,timing的默认值为OFF。,【例】设置默认提示符,默认值就是SQL。,SQLSET sqlprompt SQL,2.2.2 格式设置命令,1表头和表尾,TTITLE 和BTITLE命令可以自动地在每页的顶部和底部显示日期和页号。,【例】表头和表尾。,SQLTTITLE samp
16、le report for|hitech corp;,SQLBTITLE right strictly confidential;,“|”表示换行,结尾不必加分号,选项有三种:right、left、center。,【例】退出命令。,SQLTTITLE OFF;,SQLBTITLE OFF;,2列格式,COLUMN命令用于制定输出列的标题、格式和处理的设置。,【例】定制列标题。,SQLCOLUMN ename HEADING employee;,SQLCOLUMN ename HEADING employee|name;,【例】查询工种为CLECK 的所有雇员信息。,SQLCOLUMN sal
17、FORMAT$9,999.99;,SQLSELECT ename,sal,job,deptno FROM emp,WHERE job=CLECK;,3分组显示,BREAK和ORDER BY一起使用可以控制列输出的统一排序。,【例】分组练习。,SQLBREAK ON deptno,SQLSELECT deptno,ename FROM emp ORDER BY deptno;,结果如下:,DEPTNO ENAME,100 SMITH,JERRY,200 FORD,SCOTT,300 JAMES,WARK,-,2.2.3 行编辑命令,行编辑命令主要是对于SQL提示符下的命令的编辑。它们是,1EDI
18、T命令,格式:,EDIT 文件名;,功能:把当前目录中指定的.sql文件调入编辑器进行编辑。,注意:这里的“当前行”指在最近执行的命令中最近一次的命令(即当前缓存区中的最后一条命令)。,【例】创建s.sql文件。,SQLEDIT s;,如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,这样就可以输入和编辑SQL命令了,例如输入“SELECT*FROM tab;”,存盘退出。,2APPEND命令,格式:,APPEND 追加的字符串;,功能:追加字符串到缓冲区当前行尾。注意此命令可以使用简写命令“a”。,【例】假设当前执行命令为:SELECT*FROM tab;,SQLa orde
19、r by tname;,a命令后面跟两个空格。,结果为:SQLSELECT*FROM tab ORDER BY tname;,3CHANGE命令,格式:,CHANGE/OLD/NEW;,功能:在当前行用新的文本替换旧的文本。注意此命令可以使用简写命令“c”。,【例】用tname替代当前行的“*”。,SQLc/*/tname;,结果为:SQLSELECT tname FROM tab ORDER BY Tname;,【例】从当前行删除指定文本tab。,SQLc/tab,结果为:SELECT tname FROM ORDER BY tname;,4del命令,格式:,SQLDEL,功能:删除当前行
20、SQLDEL n,功能:删除第n行。,【例】DEL 命令的使用。,删除第2行。,5INPUT命令,格式:,INPUT 文本,功能:在当前行之后添加一行。,6LIST命令,格式:,LIST,功能:显示缓冲区中所有行。,LIST n,功能:显示缓冲区中第 n 行。,LIST m n,功能:显示缓冲区中 m 到 n 行。,7执行命令,SQLRUN,执行当前缓冲区的命令。,SQL/,执行当前缓冲区的命令。,SQLR,执行当前缓冲区的命令。,SQL文件名,运行调入内存的sql文件。,2.2.4 输入输出命令,1SAVE 文件名,功能:把正在建立的SQL查询保存到一个选中的文件中,即将缓冲区的命令以文
21、件方式存盘,缺省文件扩展名为.sql。,2GET 文件名,功能:调入存盘的sql文件。,3START 文件名,功能:START或告诉SQL*Plus执行已经存储到文件中的指令,即运行调入内存的sql文件。,4SPOOL 文件名,功能:SPOOL命令将通常在屏幕上显示的报表移入一个文件,以便打印。即设置后,在之后的各种操作及执行结果“假脱机”(即存盘到磁盘文件上),默认文件扩展名为.lst。,5HOST,功能:向主操作系统(Oracle运行的操作系统)发送命令,即HOST命令后面可以使用主操作系统的命令。,【例】主操作系统是Windows情况下的HOST的使用。,SQLHOST Copy C:a
22、bc D:abc;,如果主操作系统是UNIX,可以用,SQLHOST mv C:abc D:abc;,2.2.5 其他命令,1DESC 表名;,功能:显示表的结构。,【例】EMP是一个数据库的表,显示这个表的结构。,SQLDESC EMP;,2EXIT 或QUIT,功能:退出SQL*Plus。,3CLEAR SCREEN,功能:清空当前屏幕显示。,2.3 WebDB开发工具简介,Oracle当前的Web开发工具有以下三个:,(1)Oracle Developer工具。Oracle Developer 能满足用户提出的任何要求,并能创建很“酷”的Web页面。Developer允许创建Web窗体,
23、但也提供了Client/Server窗体。,(2)JDeveloper工具。可以说是比较矛盾的,它平衡着新技术和结构化编程。JDeveloper 开发者能使用专门为Web创建的技术提供Web解决方案。因为有Java作为内核,JDeveloper 允许用户开发、调试及运行Web窗体和应用,它仍是一个开发产品,但有了一点改进。JDeveloper 的潜力很大,它将随着Internet的发展不断前进。,(3)WebDB 工具。是Oracle最简单的Web开发工具。从表面上看,WebDB是一个使用、管理和开发应用的简单工具。它能利用数据库存储自己的对象。正因为把所有东西都存入数据库,WebDB允许用户
24、利用Oracle数据库的可靠性和备份功能。通过使用数据维护、报表、图形和查询等多个功能来满足众多的需求,WebDB开发者能把应用迅速发布到Web。WebDB是简单的开发工具,但拥有了管理数据库的必备技能。,2.4 JDeveloper开发工具简介,Oracle的JDeveloper允许用户快速容易地创建Java程序,而且只需很少的手工编程。JDeveloper简化编程过程和编译Java程序的关键在于它的集成化开发环境(IDE)。JDeveloper是一种可视化的程序开发环境,它包括了Java成熟的组件,这些组件包括按钮、下拉式菜单、标题、列表、数据库等。JDeveloper是完全的鼠标驱动界面
25、大部分设计可以不必编码。,程序设计者可以选择一个组件,将其放在生成对象的程序中。JDeveloper自动产生确定这些项目的代码,减少程序员设计时的无谓尝试,使他们能够集中精力完善这些对象的功能,比如能在用户选择菜单后,识别出将会发生什么。,2.5 本章小结,本章主要介绍了Oracle 数据库管理工具iSQL*Plus和SQL*Plus的使用以及WebDB、JDeveloper工具的特点。,WebDB在数据库中存储了Web页面需要的数据,所以不管什么时候Web页面的内容发生变化,通过Web浏览器看到的页面将反映最新的内容。这里的内容指的不仅是数据,还包括页首、页脚、图像和页面导航。这样开发人员
26、就能对Internet和Intrannet不断变化的需求做出快速的反应。,Oracle JDeveloper的特点:简便的数据库编程;Internet与Intranet部署;工业标准部件模型;针对Java的编程环境;高生产力可视化开发;集成式JDBC支持;利用SQLJ进行数据库编程;针对HTML客户的服务器端的Java;针对HTML客户的服务器端的Java;开放性与兼容性。,读者应该着重掌握iSQL*Plus和SQL*Plus工具的使用,了解其他工具的用途。,第3章 SQL语言与查询,学习要点,基本查询,多表联接,子查询,集合运算,聚合函数,本章主要内容,SQL 语言概述,SQL语言的功能种类
27、数据类型、运算符与表达式,基本查询,多表联接,子查询,集合运算,聚合函数,3.1 SQL语言概述,SQL(Structured Query Language)是一种结构化查询语言,简称为SQL。它是1972年在SQUARE(Specifying Queries As Relational Expression)语言的基础上由Boyce和Chamberlin提出的一个标准的、通用的结构化查询语言,后来将SEQUEL改为SQL。,1989年,美国ANSI采纳了ANSI X3.1341989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89。该标准被国际标准化组织(ISO)
28、和美国联邦政府组织所采纳。,3.2 SQL语言的功能种类,SQL语言按照功能可以分为四大类:,(1)数据查询语言,主要用于查询数据,以SELECT 语句为主要关键词。,(2)数据定义语言DDL,用于定义SQL模式、基本表、视图和索引。,(3)数据操纵语言DML,主要用于完成数据修改操作。,(4)数据控制语言DCL,用于控制对数据库的访问,服务器的关闭、启动等,3.3 数据类型、运算符与表达式,3.3.1 简单数据类型,常用的简单数据类型分为9个:Number(p,s)、smallint、integer、float、double、char(n)、varchar(n)、date、time,下面一一
29、进行介绍。,(1)Number(p,s)。p是数字的整个位数,s是小数点后的位数。如:number(8,4)是一个8位数字,其中小数点后有4位。如果没有特别指定,例如:number,则系统会设为p=5;s=0。,(2)smallint。表示16 位的整数。,(3)integer。表示32 位的整数。,(4)float。表示32位的实数。,(5)double。表示64位的实数。,(6)char(n)。表示固定长度为n的字符串,n不能超过 254。,(7)varchar(n)。表示可变长度的字符串且其最大长度为n,n不能超过 4000。,(8)date。表示日期,包含年份、月份。,(9)time。
30、表示时间,包含小时、分钟、秒。,3.3.2 运算符,SQL的运算符分为如下几种:,(1)算术运算符。加(+),减(-),乘(*),除(/)。,(2)比较运算符。,(3)逻辑运算符,(4)范围运算符,(5)列表运算符。,3.3.3 表达式,SQL语言的表达式分为三类:算术表达式;关系表达式;逻辑表达式。,(1)算术表达式。用算术运算符连接的表达式称为算术表达式。如:sal+2000。,(2)关系表达式。用比较运算符连接的表达式称为关系表达式。如:sal 2000。,(3)逻辑表达式。用逻辑运算符连接的表达式称为逻辑表达式。如:name=HERY AND SAL=2000。,3.4 基本查询,SE
31、LECT语句的功能是从指定的数据库的表中提取数据。其语法格式为:,SELECT ALL|DISTINCT字段名列表,FROM 表名,WHERE 条件表达式,GROUP BY group_by_list,ORDER BY order_by_list ASC/DESC;,说明:,这条语句分为三大部分:,(1)SELECT:SELECT子句用于指定检索数据库中的哪些列。,(2)FROM:FROM子句用于指定从哪一个表或视图中检索数据。,(3)WHERE:WHERE字句用于在查询过程中的限制条件。,关于DISTINCT子句、GROUP BY子句、ORDER BY子句的使用在本节后面介绍。,3.4.1
32、简单查询,简单查询格式如下:,SELECT 字段名列表 FROM 表名;,【例】假设关于一个企业信息的数据库中有三个表:,职工表EMP、部门表DEPT、岗位(或工种)表JOBLEVEL。,其中:,表EMP有如下字段:,序号,字段名称,字段类型,字段说明,1,name,字符型,职工姓名,2,sex,字符型,性别,3,birth,日期型,出生日期,4,phone,字符型,员工个人联系方式,5,deptname,字符型,所在部门,6,salary,实型数据,工资,7,job,字符型,岗位(或工种),8,title,字符型,职务(无职务,可以为空),这个表主要描述企业的职工信息,数据如下,name,s
33、ex,birth,deptname,title,phone,salary,job,欧阳军,女,1986-09-01,办公室,86798821,2500,文员,底雪洋,男,1998-10-09,软件开发部,86798823,3800,软件开发,李一岚,女,1984-10-01,软件开发部,13912345,4500,软件开发,白海燕,女,1978-02-09,市场部,86798825,1700,产品销售,刘紫羽,女,1989-01-09,办公室,主任,86798821,3000,文员,刘徐贝尔,女,1989-01-09,软件开发部,经理,86798823,4500,软件开发,周楚远,男,1989
34、01-09,市场部,经理,86798825,2000,产品销售,表DEPT有如下字段,序号,字段名称,字段类型,字段说明,1,deptname,字符型,部门名,2,manager,字符型,部门经理姓名,3,addr,字符型,部门地址,4,phone,字符型,电话号码,表JOBLEVEL有如下字段:,序号,字段名称,字段类型,字段说明,1,job,字符型,岗位名字,2,level1,数字型,工资等级,1,3,level2,数字型,工资等级,2,4,level3,数字型,工资等级,3,3.4.2 带条件的简单查询,SELECT 字段名列表,FROM 表名,WHERE 条件表达式,这里讲的带条件的
35、简单查询指单条件的查询和组合条件的查询。下面分别介绍。,1单条件的查询,【例】查询企业中工资超过2100元(包括2100元)的所有员工的姓名及其岗位。,SQL 语句如下:,SQLSELECT name,salary,job FROM EMP WHERE salary=2100;,2组合条件的查询,组合条件指WHERE子句中的条件由多个条件组成,这些组合主要是由逻辑运算符(AND、OR、NOT)组成。看下面的例子。,【例】找出企业员工中做软件开发工作并且工资在4000元以上的员工姓名和所在部门。,SQL 语句如下:,SQLSELECT name,deptname,salary,job,FROM
36、EMP,WHERE job=软件开发 and salary 4000;,3.4.3 单表查询应用,1查询某些字段不同的记录,在查询工程中,可能发现有某些相同的数据,为了只显示不同的数据,可以使用DISTINCT关键字。,【例】查询企业中有多少种不同的岗位。,SQL 语句如下:,SQLSELECT DISTINCT job FROM EMP;,2BETWEENAND关键字的使用,BETWEENAND 关键字给出了查询范围内的字段,而NOT BETWEENAND则给出了查询选择范围之外的某些列。,【例】找出工资在2000元到3500元的所有员工。,SQL 语句如下:,SQLSELECT name,
37、salary,FROM EMP,WHERE salary BETWEEN 2000 AND 3500;,3模糊查询,前面的查询都是精确查询,但是我们平时查询时经常会使用模糊查询,比如“找姓陈的先生”,“找员工名字中最后一个字是琳的小姐”等,这些只给出某个字段得到部分关键词而不是字段的整个数据时,就可以使用LIKE关键字了。而NOT LIKE的意思正好相反。,这里介绍几个通配符,如表3-3所示。,序号,通配符,说明,1,%,代表,0,到多个字符,2,_,代表单个字符,4NULL和 NOT NULL 关键字的使用,NULL和 NOT NULL主要用于找出下落不明值的记录。例如,在公司人员招聘过程中
38、查询出尚未安排面试的候选人名单。,【例】查询办公室中一般员工的基本信息(不带职务的员工)。,SQL 语句如下:,SQLSELECT*,FROM EMP,WHERE deptname=办公室 AND title=null;,5查询结果排序,ORDER BY 子句使得SQL在显示查询结果时将各返回行按顺序排列,返回行的排列顺序由ORDER BY 子句指定的表达式的值ASC 或DESC确定。,SELECT ALL|DISTINCT字段名列表,FROM 表名,WHERE 条件表达式,GROUP BY group_by_list,ORDER BY order_by_list ASC/DESC;,其中:
39、ASC:升序。表示按照递增顺序从低到高对指定的列值排序。,DESC:降序。表示按照递减顺序从高到低对指定的列值排序。,6字段运算查询,在数据库查询时,我们希望把表中的数据进行基本的算术运算,然后显示出来。,常见的算术运算有:+(加)、-(减)、*(乘)、/(除)四种。,【例】如果将软件开发部的所有员工工资增加1000元,请显示出此部门的员工姓名和工资。,SQL 语句如下:,SQLSELECT name,salary+1000,FROM EMP,WHERE deptname=软件开发部;,7rowid和rownum,rowid和rownum是很有用的两个数据库表中隐含的字段。,rowid 是数
40、据库内部的十六进制的数据地址,表明信息放在第几块第几行。,rownum是行号,并且顺序排列,根据你的select语句的执行动态生成。它表示是表的逻辑上的第几行,【例】区别rowid和rownum。,SQLSELECT rownum,rowid,ename FROM EMP;,执行结果:,rownum rowid ename,-,1 D9B3333C.0003.0002 白海燕,2 DAAAA66D.0002.0002 周楚远,3 BAA33331.0003.0002 底雪洋,4 D555DFD.0005.0002 欧阳军,5 DB133344.0006.0002 刘徐贝尔,.,8别名的使用,在
41、前面的查询中,显示的结果都是用字段名来显示的,这样不是很直观,我们可以给显示的字段名起一个直观的名字(叫“别名”),以这个别名来显示。格式是:,字段名 as 别名,在“字段名”和“别名”之间加空格或者“as”即可,可以将默认的字段名以设定的名称显示。,【例】显示出软件开发部的每个员工工资增加1000元后的信息。,SQLSELECT name 员工姓名,salary+1000 增加工资,FROM EMP,WHERE deptname=软件开发部;,3.4.4 多表查询,多表查询是指查询结果要从两个以上的表中检索结果。,【例】查询员工“刘紫羽”所在的部门地址。,分析:首先确定要求中的关键字:刘紫羽
42、部门地址。然后确定查询的表有哪些。“部门名称”在部门表DEPT中,但是“刘紫羽”是员工名称,“员工名称”在表EMP中。所以我们确定查询的表涉及两个表:EMP和DEPT。,SQL语句如下:,SQLSELECT d.addr,FROM EMP e,DEPT d,WHERE e.name=刘紫羽;,3.5 子查询,如果某一个SELECT命令(查询1)出现在另一个SQL命令(查询2)的一个子句中,则称查询1是查询2的子查询,又称为“嵌套查询”。在SELECT查询语句里可以嵌入SELECT查询语句,称为嵌套查询。有些书中将内嵌的SELECT语句称为“子查询”,子查询形成的结果又称为父查询的条件。,下面
43、是嵌套查询的格式:,SELECT 字段列表,FROM 表名,WHERE 操作符,(SELECT select_list FROM table);,3.5.1 简单子查询,【例】查询员工中所有高于员工底雪洋薪水的员工信息。,SQL 语句如下:,SQLSELECT name,sex,salary,FROM EMP,WHERE salary=,(SELECT salary FROM EMP WHERE name=底雪洋);,3.5.2 单行子查询,单行子查询的结果仅返回一行记录。一般使用比较运算符(、=、)。,【例】阅读下面的SQL 语句,并解释其含义。,SQLSELECT name,sex,sal
44、ary,FROM EMP,WHERE job=,(SELECT job,FROM EMP,WHERE name=底雪洋),AND salary,(SELECT salary,FROM EMP,WHERE name=李一岚);,3.6 集合运算,3.6.1 UNION,UNION 是集合的并运算,并运算的结果是参加运算的集合元素的总和,相当于数学的加法。如图3-1所示。其中集合A和集合B的交叉部分为集合C。,集合A,集合B,3.6.2 INTERSECT,INTERSECT是集合的交运算。交运算的结果是参加运算的集合元素的公共元素。,假设:集合A=1,2,3,集合B=2,3,5,那么执行INTE
45、RSECT运算的结果是2,3。,数学符号记为:AB。,在SQL语言中它返回查询结果中的相同部分。,【例】找出account、research、sales中都存在的工种。,SQLSELECT job FROM account,INTERSECT,SELECT job FROM research,INTERSECT,SELECT job FROM sales;,3.6.3 MINUS,MINUS是集合的差运算。差运算的结果是参加运算的集合元素中从第一个集合中去掉二者相同部分元素后剩余的元素,相当于数学的减法。,假设:集合A=1,2,3,集合B=2,3,5,那么执行MINUS运算的结果是1。,数学符
46、号记为:A-B。,在SQL语言中它返回在第一次查询结果中而不在第二次查询结果中的记录。,【例】找出在account 中存在而在research中不存在的工种。,SQLSELECT job FROM account,MINUS,SELECT job FROM research;,3.7 聚合函数,常用的聚合函数包括如下几种函数:AVG()、MIN()、MAX()、SUM()、COUNT()。,1MAX,格式:MAX(x),返回一个字段的所有值中的最大值。如果x是VARCHAR2数据类型,返回一个字符串;如果x是一个DATE数据类型,返回一个日期;如果x是number数据类型,返回一个数字。,【例
47、查询EMP表中的最高工资。,SQLSELECT max(salary)AS 最高薪水 FROM EMP;,2MIN,格式:MIN(x),返回一个字段的所有值中的最小值。如果字段是空的,函数MIN()返回空值。,【例】查询EMP表中的最低工资。,SQLSELECT MIN(salary)AS 最少薪水 FROM EMP;,【例】查询公司中工资最高和工资最低的员工。,SQLSELECT ename,sal,FROM EMP,HAVING sal=(SELECT MAX(SAL)FROM EMP)AND sal=(SELECT MIN(SAL)FROM EMP);,3AVG,格式:AVG(x,返回
48、指定字段中的平均值。注意,函数AVG()只能对数值型字段使用,即x的数据类型只能是数值型,如果空值即AVG(),忽略不计。缺省设置为ALL。,【例】查询软件开发部人员的平均工资。,SQLSELECT avg(salary)AS 平均工资,FROM EMP,WHERE deptname=软件开发部;,4COUNT,格式:COUNT(*),返回查询中行的数目,缺省值是ALL,*表示返回所有的行。用来统计一个表中有多少条记录,包括有空值的记录。因此,不需要指定要被计算的特定字段。,【例】统计EMP表目前有多少条记录。,SQLSELECT count(*)AS 记录总数 FROM EMP;,5SUM,
49、格式:SUM(x),返回选择列表项目x的数值的总和。,【例】求所有部门的工资总和。,SQLSELECT SUM(salary)AS 薪水总和 FROM EMP;,3.7.2 GROUP BY的应用,聚合函数就是操作那些已经分好组的数据,可以用GROUP BY给数据分组或者分类。,【例】对于员工表EMP和部门表DEPT,查询各个部门的职工数。,SQLSELECT d.deptno,COUNT(),FROM EMP e,dept d,WHERE e.deptno=d.deptno GROUP BY d.deptno;,3.7.3 HAVING与 WHERE 关键词的使用,在使用聚合函数时一定要小心
50、如果在SELECT 查询语句的条件表达式中出现聚合函数时不要使用WHERE 条件句,而要使用HAVING条件句。,【例】查询哪些部门的工资总和超过了10000元。,SQLSELECT deptno,SUM(salary),FROM EMP,GROUP BY deptno,HAVING AVG(salary)10000;,3.7.4 ORDER BY的应用,使用ORDER BY 子句可以对查询结果进行排序,其中包括升序和降序。升序使用ASC关键字(缺省值),降序使用DESC关键字。,【例】查询EMP表中所有男员工的信息,按照工资从大到小进行排序。,SQLSELECT*FROM EMP,WHER






