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 评论