《oracle数据库对象管理.ppt》由会员分享,可在线阅读,更多相关《oracle数据库对象管理.ppt(56页珍藏版)》请在三一办公上搜索。
1、第7章 数据库对象管理,SELECT语句的基本应用,SELECT语句的基本语法结构如下:SELECT DISTINCT 子句 INTO 子句 FROM 子句 WHERE 子句 GROUP BY 子句 HAVING 子句 ORDER BY 子句,第7章 数据库对象管理,SELECT 查询,单表查询多表连接查询,第7章 数据库对象管理,SELECT 查询单表查询,单表查询指的是在一个源表中查找所需的数据。因此,单表查询时,FROM子句中的 只需要给出一个源表表名。1.SELECT子句(1)选择表中若干列(2)选择表中所有列(3)使用表达式(4)设置列的别名(5)使用DISTINCT消除结果表中完全
2、重复的行,第7章 数据库对象管理,2.FROM子句,单表查询中,源表只有一个,因此,FROM子句FROM,SELECT 查询单表查询,3.WHERE子句,WHERE 查询体条件中没有多表连接条件,只有一个表的行筛选条件。中常用的运算符:比较运算符和逻辑运算符。比较运算符用于比较两个数值之间的大小是否相等。常用的比较运算符有:=(等于)、(大于)、=(大于等于)、(不等于)。,第7章 数据库对象管理,逻辑运算符主要有:范围比较运算符:BETWEEN AND,NOT BETWEEN AND集合比较运算符:IN,NOT IN字符匹配运算符:LIKE,NOT LIKE空值比较运算符:IS NULL,I
3、S NOT NULL条件连接运算符:AND,OR,NOT 下面举例说明,第7章 数据库对象管理,4.GROUP BY 子句 有时我们需要把FROM、WHERE子句产生的表按某种原则分成若干组,然后再对每个组进行统计。GROUP BY子句在WHERE子句后边。一般形式为:GROUP BY,n 其中是分组的依据。分组原则是的列值相同,就为同一组。当有多个时,则先按第一个列值分组,然后对每一组再按第二个列值进行分组,依此类推。,SELECT 查询单表查询,5.HAVING子句 HAVING子句指定GROUP BY生成的组表的选择条件。它的一般形式为:HAVING HAVING子句在GROUP BY子
4、句之后,并且必须与GROUP BY子句一起使用,第7章 数据库对象管理,6.ORDER BY子句 指定整个SELECT语句的输出结果中记录的排序依据。ORDER BY排序子句的格式为:ORDER BY ASC|DESC,n 其中指定排序的依据,ASC表示按列值升序方式排序,DESC表示按列值降序方式排序。如果没有指定排序方式,则默认的排序方式为升序排序。在ORDER BY子句中,可以指定多个用逗号分隔的列名。,SELECT 查询单表查询,第7章 数据库对象管理,多表查询指的是从多个源表中检索数据。因此,多表查询时,FROM子句中的要给出所有源表表名,各个表名之间要用逗号分隔。(1)多表查询的F
5、ROM子句格式 FROM 例如,若一个查询用到三个表,表名分别为Students、Enrollment,Courses。则FROM子句为:FROM Students,Enrollment,Courses,SELECT 查询多表连接查询,第7章 数据库对象管理,(2)多表查询中的SELECT子句不同的是:如果多个表中有相同的列名,则需要用:.来限定列是那个表的列。,SELECT 查询多表连接查询,(3)多表查询中的GROUP BY、HAVING、ORDER BY子句 与单表查询中的用法相同。不同的是:如果列名有重复,则要用.来限定列是那个表的列。,第7章 数据库对象管理,(4)多表查询中的WHE
6、RE子句与单表查询中的用法差别较大。多表查询中往往要有多表的连接条件,当然还有表的一个或多个行选择条件,两者用AND操作符组合。这里着重介绍多表的连接条件。按连接条件的不同,连接分为:内连接、外连接。外连接又分为左外连接、右外连接。,SELECT 查询多表连接查询,第7章 数据库对象管理,1.非相关子查询 非相关子查询,也称嵌套子查询,可以多层嵌套。这种子查询的执行不依赖于外查询。执行过程是,先执行子查询,子查询的结果并不显示出来,而是作为外查询的条件值,然后执行外查询。非相关子查询的特点:子查询只执行一次,其查询结果不依赖于外查询。而外查询的查询条件依赖于子查询的结果,因此,也可以说外查询的
7、查询结果依赖于子查询的结果。非相关子查询的结果可以是一行或多行。返回一行的非相关子查询通常用在比较运算符之后;返回多行的非相关子查询通常用在比较运算符与ANY、ALL组成的运算符、IN、NOT IN之后。,SELECT 查询子查询,第7章 数据库对象管理,(1)返回一行的非相关子查询【例】查询与Sue在同一个系学习的学生学号、姓名SELECT Sno,Sname FROM StudentsWHERE Sdept=(SELECT Sdept FROM Students WHERE Sname=Sue),第7章 数据库对象管理,(2)返回多行的非相关子查询如果子查询返回多个值,即一个集合,则外查询
8、条件中不能直接用比较运算符中的任意一个,因为某一行的一个列值不能与一个集合比较。必须在比较运算符之后加ANY或ALL关键字。使用格式为:列名比较符ANY|ALL子查询 ANY的含义为:将一个列值与子查询返回的一组值中的每一个比较。若在某次比较中结果为TRUE,则ANY测试返回TRUE,若每一次比较的结果均为FALSE,则ANY测试返回FALSE。ALL的含义为:将一个列值与子查询返回的一组值中的每一个比较。若每一次比较中结果均为TRUE,则ALL测试返回TRUE,只要有一次比较的结果为FALSE,则ALL测试返回FALSE。,第7章 数据库对象管理,【例】查询其他系中比计算机系所有学生年龄都小
9、的学生基本情况。SELECT*FROM StudentsWHERE SdeptComputer AND Sage ALL(SELECT Sage FROM Students WHERE Sdept=Computer),第7章 数据库对象管理,【例】查询其他系中比计算机系某一学生年龄小的学生的基本情况。SELECT*FROM StudentsWHERE SdeptComputer AND Sage ANY(SELECT Sage FROM Students WHERE Sdept=Computer),第7章 数据库对象管理,【例】查询成绩大于80分的学生的学号、姓名。SELECT Sno,Sna
10、me FROM StudentsWHERE Sno=ANY(SELECT Sno FROM Enrollment WHERE Grade 80),第7章 数据库对象管理,【例】查询选修了课程名为English的课程并且成绩大于80 分的学生学号、姓名。SELECT Sno,Sname FROM StudentsWHERE Sno IN(SELECT Sno FROM Enrollment WHERE Grade 80 AND Cno=(SELECT Cno FROM Courses WHERE Cname=English),第7章 数据库对象管理,2.相关子查询 相关子查询,即子查询的执行依赖
11、于外查询。相关子查询执行过程是先外查询,后内查询,然后又外查询,再内查询,如此反复,直到外查询处理完毕。使用EXSISTS 或NOT EXSISTS关键字来表达相关子查询。格式为:EXISTS EXISTS表示存在量词,用来测试子查询是否有结果,如果子查询的结果集中非空(至少有一行),则EXISTS条件为TRUE,否则为FALSE。由于EXISTS的子查询只测试子查询的结果集是否为空,因此,在子查询中指定列名是没有意义的。所以在有EXISTS的子查询中,其列名序列通常都用“*”表示。,SELECT 查询子查询,第7章 数据库对象管理,【例】查询选修了C2课程的学生的学号和姓名。SELECT S
12、no,Sname FROM StudentsWHERE EXISTS(SELECT*FROM EnrollmentWHERE Sno=Students.Sno AND Cno=C2),第7章 数据库对象管理,【例】查询没有选修C2课程的学生的学号、姓名。SELECT Sno,Sname FROM StudentsWHERE NOT EXISTS(SELECT*FROM EnrollmentWHERE Sno=Students.Sno AND Cno=C2),第7章 数据库对象管理,在标准SQL中,集合运算的关键字分别为UNION(并)、INTERSECT(交)、MINUS(或EXCEPT)(差
13、)。因为一个查询的结果是一个表,可以看作是行的集合,因此,可以利用SQL的集合运算关键字,将两个或两个以上查询结果进行集合运算,这种查询通常称为组合查询(也称为集合查询)。1将两个查询结果进行并运算并运算用UNION 运算符。它将两个查询结果合并,并消去重复行而产生最终的一个结果表。,SELECT 查询组合查询,【例】查询选修了C1课程或选修了C2课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1UNIONSELECT Sno FROM Enrollment WHERE Cno=C2 两个查询结果表必须是兼容的。即列的数目相同且对应列的数据类型相同。
14、在两个查询结果合并时,将删除重复行。若UNION后加ALL,则结果集中包含重复行。,第7章 数据库对象管理,2将两个查询结果进行交运算交运算符是INTERSECT。它将同时属于两个查询结果表的行,作为整个查询的最终结果表。【例】查询选修了C1课程并且也选修了C2课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1 INTERSECT SELECT Sno FROM Enrollment WHERE Cno=C2,SELECT 查询组合查询,第7章 数据库对象管理,3将两个查询结果进行差运算 差运算符是MINUS或EXCEPT。它将属于第一个查询结果表而
15、不属于第二个查询结果表的行组成最终的结果表。【例】查询选修了C1课程但没有选修了C2课程的学生学号。SELECT Sno FROM Enrollment WHERE Cno=C1MINUSSELECT Sno FROM Enrollment WHERE Cno=C2,SELECT 查询组合查询,第7章 数据库对象管理,7.3视图管理,视图的基本概念 视图管理页面 创建视图 修改视图 删除视图,第7章 数据库对象管理,视图的基本概念,视图特点 着重于特定数据 让用户着重于他们感兴趣的特定数据和所负责的特定任务。简化数据操作 将经常使用的连接、选择、投影等定义为视图,可以简化数据操作。自定义数据
16、允许用户以不同的方式查看数据。组合分区数据 可以将来自不同表的数据看成一个结果表。,视图是一个虚拟的表,它在物理上并不存在。视图可以把表或其它视图的数据按照一定的条件组合起来,所以可以把它看成一个存储的查询。视图并不包含数据,它只是从基表中读取数据。,第7章 数据库对象管理,视图管理页面,视图管理页面,第7章 数据库对象管理,创建视图,“创建视图向导”窗口,第7章 数据库对象管理,创建视图,CREATE VIEW语句创建视图:CREATE VIEW ASSELECT语句;【例】创建计算机系的学生学号,姓名视图:CREATE VIEW MONITOR.C_VIEWASSELECT Sno,Sna
17、meFROM STUDENTSWHERE Sdept=Computer;,第7章 数据库对象管理,修改视图,编辑视图页面,第7章 数据库对象管理,修改视图,在CREATE VIEW语句中增加OR REPLACE子句,修改视图的定义。【例】修改视图C_VIEW,增加学生的性别,年龄和所在系信息:CREATE OR REPLACE VIEW C_VIEWASSELECT Sno,Sname,Ssex,Sage,SdeptFROM STUDENTSWHERE Sdept=Computer,第7章 数据库对象管理,删除视图,DROP VIEW语句删除指定视图。【例】删除视图C_VIEW:DROP VI
18、EW C_VIEW;,第7章 数据库对象管理,7.4索引管理,索引的概念 索引管理页面 创建索引 修改索引 删除索引,第7章 数据库对象管理,索引的概念,UserName索引的存储和工作情况,UserName索引,Users表,第7章 数据库对象管理,索引管理页面,索引管理页面,第7章 数据库对象管理,创建索引,CREATE INDEX语句创建索引。【例】为表Users的列UserId创建索引,索引名为index_userid:CREATE INDEX index_userid ON Users(UserId)TABLESPACE Users;(1)当定义表时用关键字PRIMARY KEY指定
19、主键后,则会自动按照该字段建立主键索引。(2)当定义表时用关键字UNIQUE指定惟一性约束时,则会自动按照该字段建立惟一索引。也可以使用CREATE UNIQUE INDEX语句创建惟一索引。,第7章 数据库对象管理,创建索引,创建索引页面,第7章 数据库对象管理,创建索引,索引选项页面,第7章 数据库对象管理,修改索引,ALTER INDEX语句可以修改索引。【例】设置索引index_username不可用:ALTER INDEX index_username UNUSABLEALTER INDEX中使用REBUILD关键词可重新使用索引index_username:ALTER INDEX
20、index_username REBUILDRENAME TO子句可以重命名索引。【例】将索引名index_username重命名为index_username_1:ALTER INDEX index_username RENAME TO index_username_1,第7章 数据库对象管理,删除索引,DROP INDEX语句删除指定索引。【例】删除索引index_username:DROP INDEX index_username;,第7章 数据库对象管理,本章主要内容,7.1 表管理 7.2 数据查询 7.3 视图管理 7.4 索引管理 7.5 序列管理,第7章 数据库对象管理,7.5
21、序列管理,创建序列 修改序列 删除序列 序列的使用,第7章 数据库对象管理,创建序列,序列管理页面,第7章 数据库对象管理,创建序列,创建序列页面,第7章 数据库对象管理,创建序列,语法格式为:CREATE SEQUENCE sequence_nameSTART WITH n1 INCREMENT BY n2 MAXVALUE n3|NOMAXVALUE MINVALUE n4|NOMINVALUE CYCLE|NOCYCLE CACHE n5|NOCACHE ORDER|NOORDER,第7章 数据库对象管理,创建序列,CREATE SEQUENCE语句创建序列。【例】创建序列USER_S:
22、CREATE SEQUENCE USER_SMINVALUE 1NOMAXVALUESTART WITH 1INCREMENT BY 1NOCYCLECACHE 20;,第7章 数据库对象管理,修改序列,编辑序列,第7章 数据库对象管理,更改序列,要更改自己方案中的序列,用户必须具有ALTER SEQUENCE系统权限。要更改其他方案中的序列,必须具有ALTER ANY SEQUENCE系统权限。利用ALTER SEQUENCE语句可以对序列进行更改。除了序列的起始值之外,可以对定义序列时设置的任何选项和参数进行更改。如果要更改序列的初始值必须删除后重建它。,第7章 数据库对象管理,修改序列用
23、Alter sequence命令:【例】将序列user_s的最大值修改为1000,高速缓存修改为30;Alter sequence userman.user_s maxvalue 1000 cache 30;,修改序列,start with选项不能被修改,第7章 数据库对象管理,删除序列,确认删除页面 DROP SEQUENCE语句也可以删除序列。【例】删除序列USER_S:DROP SEQUENCE USERMAN.USER_S;,第7章 数据库对象管理,查看序列,第7章 数据库对象管理,序列的使用,例如,向表USERS中插入一个新的记录:INSERT INTO USERS(USERID,U
24、SERNAME)VALUES(USER_S.NEXTVAL,Li);,引用序列的语法NEXTVAL:返回序列生成的下一个值例:sequence_name.nextval,第7章 数据库对象管理,本章小结,掌握表的创建、修改和删除方法;掌握约束的创建、修改和删除的方法;掌握对表中数据的插入、更新和删除的方法;掌握使用select语句进行单表和多表连接查询的方法;了解子查询的使用方法;掌握组合查询的方法;掌握视图的概念及视图的创建、修改和删除方法;理解索引的概念,掌握如何创建、管理和删除索引;掌握创建、修改、删除和使用序列的方法;,第7章 数据库对象管理,本章作业,课后所有的选择和填空题;三、操作题 2,3,4,第7章 数据库对象管理,TO be continue,第7章 数据库对象管理,下 课 啦!,