Oracle培训结束啦!!!

Oracle进过两天的培训以后终于是结束了,回顾这两天也确实觉得不爽,整天写那些SQL也会觉得无趣。但是基本知识还是需要掌握的.下面就来总结一下今天学习的内容吧!

1、Oracle的数据类型

1.1 char(size)-- 当需要固定长度的字符串是,使用char数据类型,char数据类型可以存储字母和数字,可以存储1-2000个字节

1.2 varchar2(size)--varchar2数据类型支持可变长字符串

1.3 long--long数据类型存储可变长度字符数据,最多可以存储2GB数据

1.4 number--所有数字类型都称为number,number(n,m)--其中n小数点精度,m小数点后的位数

...还有一些不常用的数据类型就不写了...

2、表的建立

2.1 CREATE TABLE emp_hchen AS(SELECT * FROM emp)--将emp表结构及数据一起复制到一张emp_hchen表中

如果只需要复制emp表结构而不需要数据的话,可以使用SELECT TABLE emp_hchen AS(SELECT * FROM emp WHERE 1=0)

2.2 对表的DDL操作就不详细介绍了,介绍几个平时不常用的

对表重命名:RENAME 旧的表名 TO 新的表名--此语句只能在Oracle数据库中使用

3、约束

为了保证数据的唯一性,我们通常需要创建一些约束才实现.这里将约束大体上分为了5类:

3.1、主键约束:主键表示唯一的标识,本身不能为空且不能重复--primary key(pk)

3.2、唯一约束:在一张表中只允许建立一个主键约束,而其他列如果不希望出现重复值可以使用唯一性约束--unique key(uk)

3.3、检查约束:检查一个列的值是否合法,比如:性别只能取男女--default '男' check(sex in('男','女'),年龄只可以在0~150之间not null check(age between 0 and 150) ...

3.4、非空约束:很简单not null

3.5、外键约束:在两张表之间进行约束

这里有几点需要注意的是:对于主键约束我们知道在一张表中只允许有一个主键,但这个主键可以是一个或多个字段的组合值.当然除了在创建表时在字段的后面添加约束条件外,我们还可以用下面的方式创建约束条件

CONSTRAINT person_pid_pk   PRIMARY KEY(pid),
CONSTRAINT person_name_uk UNIQUE(name)

对于外键约束:我们通过建立主外键关系保证了数据的完整性,同时应该注意以下的情况:

1、在子表中设置的外键必须是父表中的主键

2、删除时必须先删除字表再删除父表

4、删除表中的约束

ALTER TABLE 表名称 DROP CONSTRAINT 约束名称

5、视图

视图的功能:一个视图实际上是封装了一条复杂的查询语句

创建视图的语法:CREATE OR REPLACE VIEW 视图名称 AS 子查询,实际上此时的子查询就是一条非常复杂的SELECT 语句

删除视图:DORP  VIEW 视图名称

6、索引

索引时什么?--是ORACLE的一种数据对象,用POINTER来加速查询行。

索引的作用--通过快速路径存取方法定位数据并减少I/O,说白了就是优化查询,提高查询的速度

如何建立索引?--自动索引:通过PRIMARY KEY和UNIQUE KEY约束来建立;手动创建索引CREATE INDEX 索引名 ON 表名(字段名)

哪种情况需要创建索引??
 1、此列经常被放到WHERE字段或JOIN来作条件查询。
 2、此列含有大量的数据。
 3、此列含有大量的空值。
 4、两个或几个列经常同时放到WHERE字段进行组合查询
表很大而且只有少于2-4% 的ROW可能被查询的时候

哪种情况不宜建立索引??
表很小或是表被更新频繁,这样的情况不建议使用

最后,INDEX独立于表它并不占用表空间

7、再把ROWNUM(伪列巩固一下吧)

习题一、求薪水最高的第6到第10名雇员

select *
  from (select ROWNUM rn, temp.*
          from (select e.ename, e.sal
                  from emp e
                 where rownum <= 10
                 order by e.sal desc) temp)
 where rn > 5
习题二、不用组函数求最高工资

select *
  from (select temp.*, ROWNUM rn
          from (select * from emp e order by e.sal desc) temp)
 where rn = 1
习题三、求平均薪水最高的部门名称

select d.dname
  from dept d,
       (select *
          from (select ROWNUM rn, t.*
                  from (select round(avg(e.sal)) avgSal, e.deptno
                          from emp e
                         group by e.deptno
                         order by avgSal desc) t)
         where rn = 1
       
        ) temp

where d.deptno = temp.deptno

PS:个人觉得这个ROENUM还是蛮好用的一个东西,以前接触的SQL SERVER数据库里面没有接触过..

怎么感觉今天的东西特别少,想来今天也没做什么事情嘛,算了,哪天再把Oracle拿出来好好研究一下吧!!

本文链接:https://my.lmcjl.com/post/12069.html

展开阅读全文

4 评论

留下您的评论.