第 3 讲: SQL._第1页
第 3 讲: SQL._第2页
第 3 讲: SQL._第3页
第 3 讲: SQL._第4页
第 3 讲: SQL._第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 / 107第三部分第三部分 SQL2 / 107l SQL数据库的结构数据库的结构l SQL语句分类语句分类3 / 107SQL数据库的结构数据库的结构SQL数据库的结构基本上是三级结构,也数据库的结构基本上是三级结构,也可以说它支持关系数据库三级模式结构可以说它支持关系数据库三级模式结构外模式外模式模式模式内模式内模式4 / 107一个一个SQL数据库是表的集合;数据库是表的集合;一个基本表可以跨越一个或多个存储文件;一个基本表可以跨越一个或多个存储文件;而一个存储文件可以存放一个或多个基本表而一个存储文件可以存放一个或多个基本表;视图是由基本表或其他视图导出;视图是由基本表或其他视图导

2、出;用户可以用用户可以用SQL语言对视图进行查询。语言对视图进行查询。 5 / 107SQL语句分类语句分类l Select查询语句查询语句l DML语句(数据操作语言)语句(数据操作语言) Insert、 Update、 Delete、Mergel DDL语句(数据定义语言)语句(数据定义语言) Create、Alter、 Drop、Truncatel DCL语句(数据控制语言)语句(数据控制语言) Grant、Revokel 事务控制语句事务控制语句 Commit 、Rollback、Savepoint6 / 107SQL数据库的查询数据库的查询 数据库的查询时数据库的核心操作,也是使用最

3、频繁的语句数据库的查询时数据库的核心操作,也是使用最频繁的语句,其基本格式为:,其基本格式为: SELECTALL/DISTINCT FROM WHERE GROUP BY ORDER BY ASC/DESC; 在语句中,凡是在在语句中,凡是在中的项是不可缺的,中的项是不可缺的, 中的项可根中的项可根据需要省略。据需要省略。 7 / 107简单的表操作简单的表操作/创建一个简单的表create table student( name varchar2(20), age number(3) );/插入新记录insert into student values(Tom,18);/查询记录selec

4、t * from student;8 / 107简单的表操作简单的表操作/查看表结构desc student;/删除表drop table student;/回复表 FLASHBACK TABLE student TO BEFORE DROP;/ 永久删除表DROP TABLE student PURGE; /清空垃圾箱PURGE RECYCLEBIN; 9 / 107使用算术表达式使用算术表达式在在Select语句中,对语句中,对NUMBER型数据可以使用算术运算符型数据可以使用算术运算符 创建表达式。创建表达式。 select empno, ename,sal, sal*12 from e

5、mp;算术运算符算术运算符 +-*/运算优先级运算优先级 乘法和除法的优先级高于加法和减法乘法和除法的优先级高于加法和减法 同优先级运算的顺序是从左到右同优先级运算的顺序是从左到右 表达式中可使用小括号强行改变运算顺序表达式中可使用小括号强行改变运算顺序select empno, ename,sal, sal*12 +1000 from emp;select empno, ename,sal, sal*(12 +1000) from emp;10 / 107连接运算符连接运算符连接运算符连接运算符|可以把列与字符、或其它表达式连接在一可以把列与字符、或其它表达式连接在一 起起,得到一个新的字符

6、串,实现,得到一个新的字符串,实现合成合成列的功能。列的功能。 用法举例:用法举例:select ename | is a | job from emp;select empno, ename | s annual salary is | sal*12 from emp;11 / 107使用字段别名使用字段别名字段别名字段别名 重命名查询结果中的字段,以增强可读性重命名查询结果中的字段,以增强可读性 如果别名中使用特殊字符,或者是强制大小写敏感需使用如果别名中使用特殊字符,或者是强制大小写敏感需使用双引号双引号 语法格式:语法格式: SELECT | AS , . FROM ; 用法举例:用法

7、举例:select empno as 员工编号员工编号, ename 员工姓名员工姓名, sal*12 年年 薪薪 from emp;select empno, ename Ename, sal*12 Anual Salary from emp;12 / 107空值空值 什么是空值?什么是空值? 空值是无效的,未指定的,未知的或不可预知的值。空值是无效的,未指定的,未知的或不可预知的值。 空值不等同于空格或者空值不等同于空格或者0。13 / 107在表达式中使用空值在表达式中使用空值算术表达式中如果出现空值,则整个表达式结果为空算术表达式中如果出现空值,则整个表达式结果为空连接表达式中出现的空

8、值被当作一个空的(长度为零的)连接表达式中出现的空值被当作一个空的(长度为零的) 字字符串处理符串处理 select ename, sal, comm, ename| - |comm, sal+comm from emp;14 / 107去除重复行去除重复行在缺省情况下,查询结果中包含所有符合条件的记录行,在缺省情况下,查询结果中包含所有符合条件的记录行, 包包括重复行。括重复行。 select deptno from emp;使用使用DISTINCT关键字可从查询结果中清除重复行关键字可从查询结果中清除重复行 select distinct deptno from emp;DISTINCT的

9、作用范围是后面所有字段的组合的作用范围是后面所有字段的组合 select distinct deptno, job from emp;15 / 107查询结果排序查询结果排序查询结果缺省按照记录的插入顺序进行排列查询结果缺省按照记录的插入顺序进行排列,也可使用也可使用ORDER BY 子句对查询结果进行排序,排序方子句对查询结果进行排序,排序方 式包括升序(式包括升序(ASC,缺,缺省)和降序(省)和降序(DESC)两种:)两种:select empno, ename, sal from emp order by sal;select empno, ename, sal from emp or

10、der by sal desc ;按多字段排序按多字段排序select deptno, empno, ename, sal from emp order by deptno, sal;使用字段别名排序使用字段别名排序select empno, ename, sal*12 annsal from emp order by annsal;16 / 107条件查询条件查询 语法格式语法格式SELECT * | DISTINCT | , . FROM WHERE ;如果如果 查询语句中使用字符串和日期查询语句中使用字符串和日期 字符串和日期值要用字符串和日期值要用单引号单引号扩起来扩起来 字符串大小写

11、敏感字符串大小写敏感 日期值格式敏感,缺省的日期格式是日期值格式敏感,缺省的日期格式是 DD-MON-RRselect * from emp where ename = SMITH;select * from emp where hiredate = 02-4月月-81;获取当前缺省日期格式获取当前缺省日期格式select sysdate from dual;17 / 107比较运算符比较运算符运算符运算符含义含义=等于等于大于大于=大于等于大于等于小于小于=小于等于小于等于不等于不等于select * from emp where deptno 20;18 / 107比较运算符(比较运算符(

12、2)运算符运算符含义含义between and介于两值之间介于两值之间in出现在集合中出现在集合中like模糊查询模糊查询is null为空值为空值select * from emp where sal between 2500 and 3000;select * from emp where ename in (SMITH,BLAKE);19 / 107模糊查询模糊查询用用like运算符执行模糊查询运算符执行模糊查询% 表示表示 0 或者多个字符或者多个字符_ 表示一个字符表示一个字符对于特殊符号可以使用对于特殊符号可以使用ESCAPE来查找来查找select * from emp wher

13、e ename like S_I%; select * from emp where ename like %_% escape ;20 / 107判断空值判断空值使用使用is null 运算符进行空值判断运算符进行空值判断select * from emp where comm is null;21 / 107逻辑运算符逻辑运算符运算符运算符含义含义AND逻辑逻辑”与与“OR逻辑逻辑”或或“NOT逻辑逻辑“非非”select ename from emp where deptno =20 and sal2000;select * from emp where deptno not in(20

14、,30,40) ;22 / 107oracle基本数据类型基本数据类型 23 / 10724 / 107函数函数Oracle函数分为单行函数和多行函数两大类函数分为单行函数和多行函数两大类单行函数分类单行函数分类 字符函数字符函数 数值函数数值函数 日期函数日期函数 转换函数转换函数 通用函数通用函数25 / 107字符字符 函数函数函数函数功能功能用法用法返回结果返回结果lower()转换为小写转换为小写lower(Join Smith)join smithupper()转换为大写转换为大写upper (Join Smith)JOIN SMITHinitcap()单词首字母大写单词首字母大写

15、initcap (JOIN Smith)Join Smithconcat() 字符串连结字符串连结concat(Join Smith)JoinSmithsubstr()截取字字符串截取字字符串substr(Join Smith,2,3)oinlength()返回字符串长度返回字符串长度length(Join Smith)10instr()定位字串定位字串instr(Join Smith,mi)7lpad()左侧填充左侧填充lpad(Join,10,*)*Joinrpad()右侧填充右侧填充rpad(Join ,10,*)Join*trim()过滤首尾空格过滤首尾空格trim ( Join Sm

16、ith )Join Smithreplace()替换替换replace (Smith,m,oo)Sooith26 / 107数值数值 函数函数函数函数功能功能用法用法返回结果返回结果abs()取绝对值取绝对值abs(-3.14)3.14round()四舍五人四舍五人round (3.1415,2)round (314.15,-2)3.14300trunc()截断截断trunc(3.1415,3)3.141ceil()向上取整向上取整ceil(3.14)4floor()向下取整向下取整floor(3.14)3sign()判断数值正负判断数值正负sign(-3.14)-1sin()三角函数三角函数

17、sin(3.14).001592653power()幂运算幂运算power(3,2)9sqrt()开平方根开平方根sqrt(9)3mod()取模取模mod(10,3)1exp()基数为基数为e的幂运算的幂运算exp(1)2.71828183log()对数运算对数运算log(4,16.0)4ln()自然对数运算自然对数运算ln(7)1.9459101527 / 107日期类型日期类型 Oracle内部以数字格式存储日期和时间信息:世纪内部以数字格式存储日期和时间信息:世纪,年年,月月,日日,小时小时,分钟分钟,秒秒缺省的日期格式是缺省的日期格式是 DD-MON-YY可使用可使用sysdate函数

18、获取当前系统日期和时间函数获取当前系统日期和时间日期型数据可以直接加或减一个数值,结果仍为日期日期型数据可以直接加或减一个数值,结果仍为日期两个日期型数据可以相减,结果为二者相差多少天两个日期型数据可以相减,结果为二者相差多少天28 / 107日期日期 函数函数函数函数功能功能用法用法add_months(x,y)计算在日期计算在日期x基础上基础上增加增加y个月后的日期个月后的日期add_months(sysdate,2)last_day(x)返回日期返回日期x当月最后当月最后一天的日期一天的日期last_day(sysdate)months_between(x,y)返回日期返回日期x和和y之

19、间之间相差的月数相差的月数months_between(sysdate,hiredate)round(x,y)将日期将日期x四舍五入到四舍五入到y所指定的日期单位所指定的日期单位(月或年(月或年)的第一天的第一天round(sysdate,month)round(sysdate,year)trunc(x,y)将日期将日期x截断到截断到y所所指定的日期单位(指定的日期单位(月或年月或年)的第一天的第一天trunc(sysdate,month)trunc(sysdate,year)next_day(x,y)计算指定日期计算指定日期x后的后的第一个星期第一个星期y对应的对应的日期日期next_day

20、(sysdate, 星期二星期二)29 / 107转换函数转换函数数据类型转换包括显式的和隐含数据转换两种,建议使用数据类型转换包括显式的和隐含数据转换两种,建议使用显式的转换显式的转换数值类型数值类型字符类型字符类型日期类型日期类型to_number()to_date()to_char()to_char()30 / 107日期转字符串日期转字符串格式:格式:to_char(date) 转换为转换为dd-mm-yy格式格式 to_char(date,format model)转换为指定格式转换为指定格式select ename, to_char(hiredate,yyyy-mm-dd) hir

21、edate from emp;31 / 107通用函数通用函数通用函数适用于任何类型数据(包括空值):通用函数适用于任何类型数据(包括空值): nvl () nvl2 () nullif () coalesce () case表达式表达式 decode()32 / 107nvl()函数函数nvl()函数用于将空值函数用于将空值null替换为指定的缺省值,适用于字符替换为指定的缺省值,适用于字符,数值,日期等类型数据,数值,日期等类型数据语法格式:语法格式:nvl(exp1, exp2)说明:如果表达式说明:如果表达式exp1为为null,则返回,则返回exp2的值,否则的值,否则 返回返回ex

22、p1的值。的值。用法举例:用法举例:select ename, sal + nvl(comm,0) from emp;33 / 107DECODE()函数函数和和case表达式类似,表达式类似,decode()函数也用于实现多路分支结构函数也用于实现多路分支结构语法格式:语法格式:decode(col|expression, search1, result1, search2, result2,., default)用法举例:用法举例:select empno, ename, sal, decode(deptno, 10, 财务部财务部,20, 研发部研发部,30, 销售部销售部,未知部门未知

23、部门) 部门部门from emp;34 / 107函数嵌套函数嵌套单行函数可以嵌套使用,嵌套层次无限制单行函数可以嵌套使用,嵌套层次无限制嵌套函数的执行顺序是由内到外嵌套函数的执行顺序是由内到外 select empno, lpad(initcap(trim(ename),10, ) name, job, sal from emp;35 / 107分组函数分组函数分组函数对一组数据进行运算,针对一组数据(多行记录分组函数对一组数据进行运算,针对一组数据(多行记录) 只返回一个结果,也称多行函数。只返回一个结果,也称多行函数。常用分组函数常用分组函数函数函数功能说功能说 明明适用类型适用类型av

24、g()计算平均值计算平均值数值型数值型count()返回查询所得到的记录行数返回查询所得到的记录行数任何类型数据任何类型数据max()计算最大值计算最大值任何类型数据任何类型数据min()计算最小值计算最小值任何类型数据任何类型数据sum()求和求和数值型数值型select avg(sal), max(sal), min(sal), sum(sal) from emp; 36 / 107COUNT()函数函数count(*)返回组中总记录数目;返回组中总记录数目;count(exp)返回表达式返回表达式exp值值非空的记录数目;的记录数目;count(distinct(exp)返回表达式返回表

25、达式exp值不重复的、非空的记录值不重复的、非空的记录数目。数目。select count(*) from emp;select count(comm) from emp;select count(distinct(deptno) from emp;37 / 107分组函数与空值分组函数与空值分组函数分组函数省略列中的空值省略列中的空值select avg(comm) from emp;select sum(comm) from emp;可使用可使用NVL()函数强制分组函数处理空值函数强制分组函数处理空值 select avg(nvl(comm, 0) from emp;38 / 107GR

26、OUP BY子句子句GROUP BY 子句将表中数据分成若干小组子句将表中数据分成若干小组语法格式语法格式select column, group_function(column)from tablewhere conditiongroup by group_by_expressionorder by column;说明:出现在说明:出现在SELECT列表中的字段,如果不是包含在组函列表中的字段,如果不是包含在组函数中,那么该数中,那么该 字段必须同时在字段必须同时在GROUP BY子句中出现。子句中出现。 包含在包含在 GROUP BY子句中的字段则不必须出现在子句中的字段则不必须出现在SE

27、LECT列表中。列表中。举例举例 select deptno, avg(sal) from emp group by deptno;39 / 107基于多个字段分组基于多个字段分组select deptno, job, avg(sal) from emp group by deptno, job;40 / 107组函数的错误用法组函数的错误用法如果没有如果没有GROUP BY子句,子句,SELECT列表中不允许出现字列表中不允许出现字 段(单行函数)与分组函数段(单行函数)与分组函数混用混用的情况。的情况。select empno, sal from emp;/合法合法select avg(s

28、al) from emp;/合法合法select empno, initcap(ename), avg(sal) from emp;/非法非法 不允许不允许在在 WHERE 子句中使用分组函数。子句中使用分组函数。select deptno, avg(sal)from empwhere avg(sal) 2000;group by deptno;41 / 107HAVING子句子句 HAVING子句用于过滤分组子句用于过滤分组语法格式语法格式selectcolumn, group_function(column)fromtablewhere conditiongroup by group_by

29、_expressionhaving group_conditionorder by column;举例举例selectdeptno, job, avg(sal)fromempwherehiredate = to_date(1981-05-01,yyyy-mm-dd)group by deptno,job having avg(sal) 1200 order by deptno,job;42 / 107分组函数嵌套分组函数嵌套分组函数最多可嵌套两层分组函数最多可嵌套两层select max(avg(sal)from emp group by deptno;43 / 107Oracle表连接表连接

30、SQL/Oracle使用表连接从多个表中查询数据使用表连接从多个表中查询数据语法格式:语法格式:select字段列表字段列表fromtable1, table2wheretable1.column1 = table2.column2;说明:说明: 在在Where子句中指定连接条件子句中指定连接条件 当被连接的多个表中存在同名字段时,必须在该字当被连接的多个表中存在同名字段时,必须在该字段前加上段前加上表表 名名.作为前缀。作为前缀。44 / 107连接的类型连接的类型Oracle8i之前的表连接:之前的表连接:- 等值连接(等值连接( Equijoin )- 非等值连接(非等值连接(Non-E

31、quijoin) - 外连接(外连接(Outer join) 左外连接左外连接 右外连接右外连接 - 自连接(自连接(Self join)Oracle9i新引入的的连接形式(支持新引入的的连接形式(支持SQL99规范):规范): - 交叉连接(交叉连接(Cross join) - 自然连接(自然连接(Natural join) - 使用使用Using子句建立连接子句建立连接 - 使用使用On子句建立连接子句建立连接 - 外连接(外连接( Outer join ) 左外连接左外连接 右外连接右外连接 全外连接全外连接45 / 107等值连接等值连接(Equijoin)select empno,

32、ename, sal, emp.deptno, dname from emp, dept where emp.deptno = dept.deptno;46 / 107非等值连接非等值连接(Non-Equijoin)问题:如何查得每个员工的工资等级?问题:如何查得每个员工的工资等级?SALGRADE表(表(5行)行) EMP表(表(14行)行) 47 / 107外连接外连接(Outer join)使用外连接可以看到参与连接的某一方不满足连接条件使用外连接可以看到参与连接的某一方不满足连接条件的记录。外连接运算符为的记录。外连接运算符为(+)传统的外连接分为左外连接和右外连接两种传统的外连接分为

33、左外连接和右外连接两种语法格式:语法格式:select字段列表字段列表fromtable1, table2wheretable1.column1 = table2.column2 (+);select字段列表字段列表fromtable1, table2wheretable1.column1(+) = table2.column2; 48 / 107自连接自连接(Self join)问题:如何查得每个员工及其上司的工号和姓名?问题:如何查得每个员工及其上司的工号和姓名?49 / 107交叉连接交叉连接(Cross join)Cross join产生了一个笛卡尔集,其效果等同于在两个表进产生了一个

34、笛卡尔集,其效果等同于在两个表进 行连接时未使用行连接时未使用WHERE子句限定连接条件子句限定连接条件; 举例:举例:select empno, ename, sal, emp.deptno, dname from emp cross join dept; 50 / 107自然连接自然连接(Natural join)Natural join基于两个表中的基于两个表中的全部同名列全部同名列建立连接建立连接 从两个表中选出同名列的值均对应相等的所有行从两个表中选出同名列的值均对应相等的所有行 如果两个表中同名列的数据类型不同,则出错如果两个表中同名列的数据类型不同,则出错 不允许在参照列上使用表

35、名或者别名作为前缀不允许在参照列上使用表名或者别名作为前缀举例:举例:select empno, ename, sal, deptno, dname from emp natural join dept;51 / 107Using子句子句如果不希望参照被连接表的如果不希望参照被连接表的所有所有同名列进行等值连接,自同名列进行等值连接,自 然然连接将无法满足要求,可以在连接时使用连接将无法满足要求,可以在连接时使用USING子句来子句来 设置用于等值连接的列(参照列)名。设置用于等值连接的列(参照列)名。 举例:举例:select empno, ename, sal, deptno, dname

36、 from emp join deptusing (deptno); 不允许在参照列上使用表名或者别名作为前缀不允许在参照列上使用表名或者别名作为前缀52 / 107On子句子句如果要参照如果要参照非同名的列非同名的列进行等值连接,或想设置任意的连进行等值连接,或想设置任意的连 接接条件,可以使用条件,可以使用ON子句。子句。 举例:举例:select empno, ename, sal, emp.deptno, dname from emp join depton (emp.deptno = dept.deptno);53 / 107子查询子查询(Sub Query)问题引入问题引入 如何查

37、得所有比如何查得所有比“张三张三”工资高的员工的信息工资高的员工的信息子查询子查询 子查询在主查询前执行一次子查询在主查询前执行一次 主查询使用子查询的结果主查询使用子查询的结果 语法格式:语法格式:select 字段列表字段列表from tablewhere 表达式表达式 operator (select 字段列表字段列表 from table);54 / 107子查询的种类子查询的种类单行子查询:子查询结果返回单行单行子查询:子查询结果返回单行多行子查询:子查询结果返回多行多行子查询:子查询结果返回多行55 / 107使用子查询注意事项使用子查询注意事项在查询是基于未知值时应考虑使用子查询

38、在查询是基于未知值时应考虑使用子查询子查询必须包含在括号内子查询必须包含在括号内建议将子查询放在比较运算符的右侧,以增强可读性建议将子查询放在比较运算符的右侧,以增强可读性。 除非进行除非进行Top-N 分析,否则不要在子查询中使用分析,否则不要在子查询中使用ORDER BY 子句。子句。对单行子查询使用单行运算符对单行子查询使用单行运算符对多行子查询使用多行运算符对多行子查询使用多行运算符56 / 107单行子查询单行子查询单行子查询只返回一行记录单行子查询只返回一行记录对单行子查询可使用单行记录比较运算符对单行子查询可使用单行记录比较运算符举例:举例:select * from empwh

39、ere sal (select sal from emp where empno = 7566);57 / 107子查询空值子查询空值/多值问题多值问题如果子查询未返回任何行,则主查询也不会返回任何结果如果子查询未返回任何行,则主查询也不会返回任何结果select * from empwhere sal (select sal from emp where empno = 8888); 如果子查询返回单行结果,则为单行子查询,可以在主查如果子查询返回单行结果,则为单行子查询,可以在主查询中对其使用相应的单行记录比较运算符询中对其使用相应的单行记录比较运算符select * from empwh

40、ere sal (select sal from emp where empno = 7566); 如果子查询返回多行结果,则为多行子查询,此时不允许如果子查询返回多行结果,则为多行子查询,此时不允许对其使用单行记录比较运算符对其使用单行记录比较运算符select * from empwhere sal (select avg(sal) from emp group by deptno);/非法非法58 / 107多行子查询多行子查询含义含义 运算符运算符IN等于列表中的任何一个等于列表中的任何一个ANY和子查询返回的任意一个值比较和子查询返回的任意一个值比较ALL和子查询返回的所有值比较和子

41、查询返回的所有值比较59 / 107多行子查询多行子查询对多行子查询只能使用多行记录比较运算符对多行子查询只能使用多行记录比较运算符举例:举例:select * from empwhere sal any(select avg(sal) from emp group by deptno);select * from empwhere sal all(select avg(sal) from emp group by deptno);select * from empwhere job in (select job from emp where ename = MARTIN or ename =

42、 SMITH);60 / 107TopN查询查询在在ORACLE中通常采用子查询的方式来实现中通常采用子查询的方式来实现TOP N查询查询语法格式:语法格式:select 字段列表字段列表from (select 字段列表字段列表 from table order by 排序字段排序字段 ) where rownum = n;举例:举例:select *from (select * from emp order by sal desc)where rownum =0 and age =120);92 / 107查看约束查看约束查询用户字典视图查询用户字典视图user_constraints可得

43、到用户的所有约束可得到用户的所有约束查询用户字典视图查询用户字典视图user_cons_columns可获知约束建立在哪些字段上可获知约束建立在哪些字段上93 / 107建表后添加约束建表后添加约束 基本语法基本语法alter table tablenameadd constraint constraint_name constraint_type (column);举例:举例:create table student(sid number(10), name varchar2(20);alter table studentadd constraint student_sid_pk prima

44、ry key(sid); 特例:特例:非空约束必须使用非空约束必须使用modify子句添加子句添加alter table studentmodify (name char(15) default n/a not null);94 / 107删除约束删除约束 基本语法基本语法alter table tableNamedrop constraint constraint_name;举例:举例:create table student(sid number(10) , name varchar2(20),constraint student_sid_pk primary key(sid);alter

45、 table student drop constraint student_sid_pk ; 删除主键约束的另一种方式:删除主键约束的另一种方式:alter table tableName drop primary key;alter table student drop primary key ;95 / 107视图视图什么是视图什么是视图(View)? 视图由一个或多个表(或视图)中提取数据而成视图由一个或多个表(或视图)中提取数据而成 视图是一种虚拟表视图是一种虚拟表 视图一经创建,可以当作表来使用。视图一经创建,可以当作表来使用。96 / 107视图(续)视图(续)使用视图的好处使用

46、视图的好处 简化复杂数据查询简化复杂数据查询 提高运行效率提高运行效率 屏蔽数据库表结构,实现数据逻辑独立性屏蔽数据库表结构,实现数据逻辑独立性 限制数据库访问限制数据库访问 在相同数据上提供不同的视图,便于数据共享在相同数据上提供不同的视图,便于数据共享简单视图和复杂视图简单视图和复杂视图特征项目特征项目简单视图简单视图复杂视图复杂视图基表数目基表数目一个一个一个或多个一个或多个使用函数使用函数无无有有使用分组使用分组无无有有支持支持DML操作操作支持支持不一定不一定97 / 107创建创建/删除视图删除视图创建视图创建视图 通过在通过在create view语句中嵌入子查询的方式创建视图语

47、句中嵌入子查询的方式创建视图基本语法:基本语法:create or replace view schema. view (alias,aliasx.)as subquery;举例:举例:create or replace view myview1(编号编号, 姓名姓名, 职位职位, 工资工资)as select empno, ename, job, sal from emp where deptno = 20;查看视图结构查看视图结构 desc myview1;删除视图删除视图 drop view myview1;98 / 107更新视图更新视图在可更新视图上进行在可更新视图上进行DML操作,

48、可以修改基表中数据操作,可以修改基表中数据 可更新视图的定义中不能使用分组函数、可更新视图的定义中不能使用分组函数、group by子句子句、 distinct关关 键字、键字、rownum伪列,字段的定义不能为表达伪列,字段的定义不能为表达式式 由两个以上基表中导出的视图不可更新由两个以上基表中导出的视图不可更新 基表中非空的列在视图定义中未包括,则不可在视图上进基表中非空的列在视图定义中未包括,则不可在视图上进行行insert操作操作 在视图上进行在视图上进行DML操作,语法与在表上操作相同操作,语法与在表上操作相同 insert update delete99 / 107创建只读视图创建

49、只读视图在创建视图时,可使用在创建视图时,可使用with read only选项将之设置为只选项将之设置为只读读语法格式语法格式 create or replace force | noforce view schema. view (alias,aliasx.) as subquery with read only;举例:举例:create or replace force view myview2as select empno, ename, job, sal from emp2 where deptno = 20 with read only;100 / 107索引索引什么是索引什么是索

50、引(index)? 一种用于提升查询效率的数据库对象;一种用于提升查询效率的数据库对象; 通过快速定位数据的方法,减少磁盘通过快速定位数据的方法,减少磁盘 I/O操作;操作; 索引信息与表独立存放;索引信息与表独立存放; Oracle 数据库自动使用和维护索引。数据库自动使用和维护索引。索引分类索引分类 唯一性索引唯一性索引 非唯一索引非唯一索引创建索引的两种方式创建索引的两种方式 自动创建自动创建 - 在定义主键或唯一键约束时系统会自动在在定义主键或唯一键约束时系统会自动在相应的字段相应的字段 上创建唯一性索引。上创建唯一性索引。 手动创建手动创建 - 用户可以在其它列上创建非唯一的索引,用户可以在其它列上创建非唯一的索引,以加速查询。以加速查询。101 / 107创建创建/删除索引删除索引可使用可使用create index语句手动创建索引语句手动创建索引create index schema.indexon table (column, column.);create index myindexon emp(ename);删除索引删除索引 使用使用drop index 语句删除索引语句删除索引 操作者须是索引的所有者、或拥有操作者须是索引的所有者、或拥有drop该该inde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论