ORACLE初识总结

前端之家收集整理的这篇文章主要介绍了ORACLE初识总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
--创建表空间
create tablespace oracle17_5
datafile 'e:/db/oracle17_5.dbf'
size 50M


--删除表空间
drop tablespace oracle17_5


--创建用户
create user haoshen
identified by admin
default tablespace  oracle17_5


--删除用户
drop user t7


--分配权限(角色带有的权限)
connect(登录)   resource(维护)  DBA(系统管理员)


grant connect,resource to haoshen


--撤销权限
revoke connect,resource f rom haoshen




数据类型
字符串:
Char(len)固定长度字符串
Varchar2(len)可变长度字符串
Nchar(len):只支持unicode字符编码的字符串
Nvarchar2(len):只支持unicode字符编码的字符串


数值类型:
Number:如果没写()规定是32位整数
Number(p):表示p位整数
Number(p,s):举例(8,2)表示6位整数、2位小数


id number(8)如果不写(8)默认是32位整数
money number(8,2)表示总共8位,其中2位是小数
如果想存1234.4321 number(8,4)


日期
Date  年月日时分秒
--创建表
create  table emp(
empid number(8) primary key,--使用序列来代替自增列 
empname varchar2(40) not null,gender char(2) not null,job varchar2(20) not null,birthday date,salary number(8,2) not null,deptid references dept(deptid) not null
)


create table dept(
deptid number(8) primary key,deptname varchar2(20) not null,loc varchar2(40) not null


)


alter table emp
add constraint FK_emp_deptid
foreign key (deptid) references dept(deptid);


--MysqL中学习的增加列、删除列、修改列均可以


alter table emp 
add phone char(11) not null unique


alter table emp
drop  column  phone




drop table emp
drop table dept


所有在oracle数据库中的增删改操作必须提交才能生效


--设置检查约束
alter  table emp 
add constraint CK_emp_gender
check(gender='男' or gender='女')


alter  table emp 
add constraint CK_emp_salary
check(salary>=0)


select * from emp
insert into emp values(102,'周伯通','男','老顽童','23-11月-2015',5200,'2');


insert into dept values(1,'人力资源部','中关村');
insert into dept values(2,'财务部','金融街');
insert into dept values(3,'开发部','上地');
insert into dept values(4,'市场部','望京');
commit;提交
rollback;回滚


delete from emp
insert into emp values(101,'欧阳锋','西毒','27-12月-2015',1111,'1');
insert into emp values(102,'2');
insert into emp values(103,'黄药师','东邪',4200,'3');
insert into emp values(104,'丘处机','二货',3200,'2');
insert into emp values(105,'杨过','神雕大侠',7200,'3');
insert into emp values(106,'欧阳克','流氓',2222,'1');
insert into emp values(107,'王重阳','中神通','2');
insert into emp values(108,'黄大力','卖药的',6000,'3');
insert into emp values(109,'尹志平','仙道',12000,'2');
insert into emp values(110,'杨康','官二代',9900,'3');
commit;


MysqL和oracle表中存储英文的不同
MysqL表中的英文字母在查询时是不分大小写的
oracle表中的英文字母在查询时是区分大小写的


SELECT * FROM EMP WHERE EMPNAME='HuangYaoShi'


关于伪列
1rowid
是在数据添加到表时oracle系统分配给这行的唯一值
相当于这行数据在整个数据库中的主键
rowid不会重复出现,始终跟随这条数据


select e.*,rowid from emp e




2rownum
是oracle分配给查询结果行的一个临时行号


select e.*,rownum from emp e where salary>5000


rownum会从where条件筛选结束之后对查询结果进行rownum的生成 


select e.*,rownum from emp e where salary>5000 order by salary desc


可以在where条件中查询前几条


select  e.*,rownum from emp e where salary>5000 and rownum<=3


但是由于rownum不会在order by之后重新生成,所以直接取前几条往往没有意义


select rownum,e.* from 
(select * from emp where deptid=2 order by salary desc) e
where rownum<=3


关于分页查询
如果是不排序的分页
select * from(
select rownum r,e.* from emp e) ee
where ee.r>9 and ee.r<=12


如果是排序的分页
select * from (
select rownum r,e.* from 
(select * from emp order by salary desc) e) ee
where ee.r>10 and ee.r<=15




--序列
--oracle是没有表中的自增列的
--怎么样获得一个唯一且不重复的值用作主键呢?
--使用序列来代替自增列


--序列是一个和任何表都没有绑定关系的独立的对象
--序列可以按照一定规则来生成不重复的唯一的值


--怎么样创建序列
create sequence seq_myseq
start with 1
increment by 1






CREATE SEQUENCE toys_seq
	START WITH 10 --初始值(默认1)
	INCREMENT BY 10 --步长(默认1)
	MAXVALUE 2000  --最大值(默认无限大)
	MINVALUE 10    --最小值(默认1)
	NOCYCLE	       --不循环(默认不循环)
	CACHE 10;      --缓存数 




insert into emp values(seq_myseq.nextval,'萧峰','帮主','27-10月-2015',11000,'3');
insert into emp values(seq_myseq.nextval,'段誉','皇二代',9500,'2');
insert into emp values(seq_myseq.nextval,'虚竹','和尚',6500,'3');
commit


select* from emp


select sysdate from dual


select 56*91 from dual


select seq_myseq.nextval from dual


commit


select * from student
select * from grade
select * from result
select * from subject


--distinct去掉重复行


select distinct studentno from result 


select distinct studentno,subjectid from result


--查询重复的或没有重复的


select studentno,subjectid,count(1) from result group by studentno,subjectid
having count(1)>1


select studentno,subjectid
having count(1)=1




create table guanxi(
rid number(8),fid number(8)
)


--删除重复行




delete from guanxi where rowid not in
(select max(rowid) from guanxi group by rid,fid having count(1)=1)
and
 rowid not in(
select max(rowid) from guanxi group by rid,fid having count(1)>1
)




--union将两个表的查询结果和在一张表中
--union可以将两张不同表的数据在一个查询结果中显示,但是需要满足条件
--1两次查询的列数一致    2对应的列的数据类型相同
select * from (
select empid,empname,job,1 r from emp
union
select deptid,deptname,loc,2 r from dept
) ee
order by ee.r


--联合查询
union在联合之后如果两次查询出现了相同rowid行,那么只会出现一次
union all在联合之后如果两次查询出现了相同rowid行,那么两次都会出现
intersect在联合之后只显示两次查询都出现的rowid行
minus在联合之后只显示A结果不包含B结果中rowid的行




select * from emp where gender='男'
union
select * from emp where salary<6000




select * from emp where gender='男'
intersect
select * from emp where salary<6000


select * from emp where gender='男'
minus
select * from emp where salary<6000


select * from emp where salary<6000
minus
select * from emp where gender='男'


--oracle的数据导出:
1sql文件
      优点:可读、灵活,缺点:运行不稳定、维护困难,不适合数据量较大的数据备份和导出
2oracle通用方式 *.dmp文件
      优点:封装后的文件、安全性高,运行可靠,文件sql文件小
      缺点:不可读


3plsqldev方式
      优点:封装后的文件、安全性高,运行可靠,文件sql文件小
      缺点:不可读,只能由plsqldeveloper运行
      
drop table emp;
drop table dept;
drop table result;
drop table subject;
drop table student;
drop table grade;
drop table guanxi;




--事务控制
--什么是事务:就是业务逻辑中的最小单元
--就是多条更新语句要么都执行,要么都不执行的情况
--事务的特征
       --一致性
       --原子性
       --永久性
       --隔离性
       


       
--oracle中的运算符
算术:+ - * / %
比较:>  <  >=  <=  =  <>(!=)
逻辑运算符 and or not
       
--连接符




select empid||'-'||salary from emp


--oracle中的系统函数
--转换函数
--to_char
select empname,to_char(birthday,'yyyy"年"fmmm"月"dd"日"'),to_char(salary,'$99999.00') from emp


select to_char(sysdate,'yyyy"年"fmmm"月"dd"日" hh24:mi:ss') from dual
--to_date


select to_date('2016-6-6','yyyy-mm-dd') from dual


insert into emp values(seq_myseq.nextval,to_date('2013-9-15','yyyy-mm-dd'),'3');


--to_char是将日期等类型转换成字符串varchar2
--to_date是将字符串类型转换成日期类型date,其中在开发中to_date更常用


select '5'+'8' from dual


--逻辑函数
--nvl
select studentname,nvl(address,'<未填写>') from student 


--nvl2
select studentname,nvl2(address,'<已填写>','<未填写>') from student


--decode
select empname,decode(deptid,'1','启用','2','禁用','已删除') from emp




--分析函数
我们经常对一个查询结果进行排序,由于排序列的值可能相同,导致排序的序号总不能满意




select * from (
select studentno,score,rank() over(order by score desc) srank,dense_rank() over(order by score desc) 连续名次,row_number() over(order by score desc) 行号
 from result
 ) ee
 where ee.srank=1
 
 
 --关于数据库自动主键值


可以采用序列作为主键值
但是序列只能提供给一个数值类型的主键
如果想使用varchar2类型作为主键要什么技术呢?
就是sys_guid()


select sys_guid() from dual 
sys_guid()就是一个生成32位16位进制随机数的字符串
       
       



猜你在找的Oracle相关文章