在看着韩顺平老师的视频进行oracle数据库的学习,简单的笔记总结如下:
oracle数据类型:比较少,简单
char 定长 最大2000字符,不够的空间被空格占用,效率高,查询速度快,比如身份证号(18位)
varchar2 变长,节省空间,最大4000字符,查询速度没有char快
clob 字符型大对象
number 数字类型,范围:-10的38次方到10的38次方,可以表示整数,也可以表示小数
比如:number(5,2) 表示一个小数有5位有效数,2位小数,范围:-999.99到999.99
number(5) 表示5位整数 范围:-99999到99999
日期类型
date 包含年月日和时分秒,一般用date
timestamp 这是oracle9i 对date 数据类型的扩展,精度高,到毫秒
图片类型
blob 二进制数据 可以存放图片/声音 视频,当这些类型保密性很高时,把图片/声音 视频存放到数据库中,一般的放在一个文件下下面
练习:
1、创建一个表
create table student(
xh number(4), --学号
xm varchar2(20),--姓名
sex char(2),--性别
birthday date,--出生日期
sal number(7,2) --奖金(99999.99)
);
create table classes(
classId numuber(2),
classname varcher(40)
);
右击新建也可以建一个表
2,删除一个表
drop table 表名字;
3,添加一个字段
alter table student add(classId number(2));
4,查看表命令:SQL>desc student;
5,修改字段的长度:alter table student modify(xm varchar(30));
6,删除一个字段:alter table student drop column 字段名
7,修改表的名字:sql>rename student to stu;
8,向表中添加数据
insert into 表名字 values(字段1,字段2.。。。。);
insert into student values(1,'小明','男','11-12月-1997',2000,三);
oracle中默认的日期格式是‘DD-MON-YY’
改日期格式:alter session set nls_date_format='yyyy-mm-dd'
insert into student values(1,'小明2','男','1997-12-11',2000,三);
9、插入部分字段
insert into student(xh,xm,sex) values('A003','JOHN','女');
插入空值
insert into student(xh,xm,sex,birthday) values(3,'aa','女',null);
查询字段为空时:
select * from student where birthday is null;
10,改一个字段
update student set sex='女' where xh='A001';
修改多个字段
update student set sex='男',birthday='1980-04-01' where xh='A001';
修改含有null值的数据
11、删除数据
delete from student;删除所有记录,表结构还在,写日志,可以恢复的,速度慢
drop table student; 删除表的结构和数据
truncate table student;
删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快
12、设置保存点和恢复保存点
savepoint 保存点名
rollback to 保存点名字
关于查询:
1,like %
2,order by "年薪" asc/desc
select * from emp order by "年龄" asc,"工资" desc;--按照年龄升序,按照工资降序
3,数据分组:max,min,avg,sum,count
4,group by 和 having 子句
group by 用于对查询的结果分组统计
having 子句用于限制分组显示结果
例如:select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)>2000;
5,对数据分组的总结
1),分组函数只能出现在选择列表、having、order by 子句中、
2),如果在select 语句中同时包含有group by,having,order by 那么他们的顺序是group by,having,order by
3),在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错
例如:select avg(sal),max(sal),deptno from emp group by deptno having avg(sal);
这里的deptno就一定要出现在group by中
6,取消重复行:distinct
select distinct deptno ,job from emp;
7,oracle 对字段区分大小写
8,nvl(列名,0):如果此列为空,用0来代替
9,如何使用 like 操作符
%:表示任意 0 到多个字符
_:表示单个字符
例如:select name from emp where name like 'S%';显示首字母为S的员工姓名
10,在 where 中使用 in
select * from emp where empno in(1,2,3);
11,使用 is null 的操作符
12,子查询:子查询是指嵌入在其他sql语句中的select 语句,也叫嵌套查询。
单行子查询:单行子查询时指只返回一行的数据的子查询语句。
多行子查询指返回多行数据的子查询
在多行子查询中使用any操作符
13,数据库中的sql 语句执行 从左到右。
例如:如何显示高于自己部门平均工资的员工信息
例子复杂语句:先查询出各个部门的平均工资和部门号,把查询出的信息作为一个表,起个别名为a1,然后把emp起个别名为a2,
第一步:
select deptno,avg(sal) as mysal from emp group by deptno
select a2.name,a2.sal,a2.deptno,a1.mysal from emp a2,(select deptno,avg(sal) as myavgsal from emp group by deptno)a1 where a2.deptno=a1.deptno and a2.sal>sal.myavgsal
内嵌视图:当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from 子句中使用子查询时,必须给子查询指定别名
注意:给表取别名时不能加 as,给列取别名时可以加 as 也可以不加 as
14、用查询结果创建新表
这个命令是一种快捷的见表方法
create table mytable(id,name,sal,job,deptno) as select empno,ennmae,sal,job,deptno from emp;
导入表
例如:把emp表中的数据导入到newtable中
insert into newtable( id,name,sex) select empid,ename,esex from emp where。。。。
15,使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据,
例如:希望员工scott的岗位、工资、补助与smith员工一样
update emp set (job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT'
16、合并查询
有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号
1)union 该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中重复行
2)union all 该操作赋予union类似,但是它不会取消重复行,而且不会排序,
3)intersect 使用该操作符用于取得两个结果集的交集
4)minus 使用该操作符用于取得两个结果的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据。