oracle数据库知识总结.docx
- 文档编号:13118782
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:43
- 大小:26.73KB
oracle数据库知识总结.docx
《oracle数据库知识总结.docx》由会员分享,可在线阅读,更多相关《oracle数据库知识总结.docx(43页珍藏版)》请在冰点文库上搜索。
oracle数据库知识总结
一.基本概念
Oracle驱动用oracle安装目录可以找到oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
1.数据
数据就是信息
2.数据处理
对各种形式的数据进行收集,存储,加工和传播的行为
3.数据管理
对数据库进行分类,组织,存储和维护等操作
4.数据库
存储数据的仓库,存储一些互有联系的数据的集合
5.数据库的发展
5.1人工管理
5.2文件管理
5.3数据库系统
6.数据库管理软件
6.1sqlserver微软中型项目
6.2access微软小型项目
6.3mysql小型项目
6.4oracle大型项目
cmd下输入sqlplus
1.输入用户名:
sys@oracleassysdba
2.输入用户名:
sys/double@oracleassysdba
7.sys:
超级管理员
system:
管理员连接方式选择normal
8.数据库的层次结构
数据库
表空间
表
二.创建权限
1.
--创建表空间
--datafile表空间对应的一个或者多个文件,如果有多个文件用逗号分隔
--size表空间的大小
--autoextendon自动增长
CREATETABLESPACEMH
DATAFILE'd:
\work01.dbf'SIZE5MAUTOEXTENDON;
2.--创建用户
--createuser指定用户名
--iDENTIFIEDBY指定密码
--DEFAULTTABLESPACE指定默认的表空间,如果不指定,使用系统的默认表空间
SYSTEM
CREATEUSERMH001
IDENTIFIEDBYMH123456
DEFAULTTABLESPACEMH;
3.给用户分配权限
--connect允许用户使用数据库并在数据库中创建其他对象
--resource允许用户使用数据库中的空间
GRANTCONNECT,RESOURCETOMH001;
GRANTSELECT,UPDATE,INSERTONscott.empTOMH001;
赋予管理员权限
Connectas要选择sysdba,然后grantsysdbatoadmin;
4.--修改用户名密码
ALTERUSERMH001
IDENTIFIEDBYMH12345;
5.--删除用户
DROPUSERMH001;
6.--回收权限
REVOKESELECTONscott.empFROMMH001;
三.数据类型
--字符串数据类型
--char:
存放固定长度的字符串,范围1-2000字节,如果不指定大小默认1个字节,效率高
--varchar2:
存放可变长度的字符串,范围1-4000字节,必须指定大小,节约磁盘空间
--数字类型
--number(p,s):
p表示精度(数字的总位数,最大38),s表示范围,表示小数点右边的数字的位数
--存放整数:
number表示位数为38位的整数,number(9)表示位数为9位的整数
--存放小数:
number(10,2)
--日期类型
--date'1980-05-06''1980/05/56''05/12/1980'
四.创建表
--primarykey设置主键,主键的值不允许重复,每张表只能有一个主键。
--notnull必须填写.
CREATETABLEstuinfo
(
snoNUMBERPRIMARYKEY,
snameVARCHAR2(10)NOTNULL,
ssexCHAR
(2),
sageNUMBER(3)NOTNULL,
addressVARCHAR(50)
);
CREATETABLEsubject
(
snoNUMBERPRIMARYKEY,
subnameVARCHAR(20)
);
CREATETABLEscore
(
snoNUMBER,
subjectNUMBER(20),
scoreNUMBER(5,2)
)
--插入日期
insertintotestvalues(to_date('2010-08-0814:
'10:
20,'yyyyMMddHH24:
mi:
ss'));
五.约束
--主键约束,将2个字段设为一个主键
ALTERTABLEscoreADDCONSTRAINTPK_sno_subjectPRIMARYKEY(sno,subject);
--设置外键约束
ALTERTABLEscoreADDCONSTRAINTFK_sno_snoFOREIGNKEY(sno)REFERENCESstuinfo(sno);
ALTERTABLEscoreADDCONSTRAINTFK_subject_snoFOREIGNKEY(subject)REFERENCESsubject(sno);
--唯一约束(unique)
ALTERTABLEstuinfoADDCONSTRAINTuq_sageunique(sno);
--检查约束(check)
ALTERTABLEstuinfoADDCONSTRAINTCK_sageCHECK(sage>=20ANDsage<=80);ALTERTABLEstuinfoADDCONSTRAINTCK_ssexCHECK(ssex='男'ORssex='女');
--默认约束
在定义表的时候创建
CREATETABLEtest
(
snameVARCHAR2(10)DEFAULT('a')notnull
);
INSERTINTOtestVALUES(DEFAULT);
--撤销约束
altertablestudentdropconstraintck_student;
六.简单查询
--合并列,取别名
SELECTename||'_'||jobASejobFROMscott.emp;
--运算
SELECTsal*2salFROMscott.emp;
--与(and)、或(or)、非(not)
--查询年龄等于20岁的男同学姓名
SELECTsnameFROMstuinfoWHEREsage=20ANDssex='男';
--查询年龄大于20,或者性别为男的学生信息;
SELECT*FROMstuinfoWHEREsage>20ORssex='男';
--查询年龄不大于20的学生信息
SELECT*FROMstuinfoWHEREsage<=20;
SELECT*FROMstuinfoWHERENOTsage>20;
--查询年龄在20-21之间的学生信息
SELECT*FROMstuinfoWHEREsage>=20ANDsage<=21;
SELECT*FROMstuinfoWHEREsageBETWEEN20AND21;
--查询年龄为20,21,25的学生信息
SELECT*FROMstuinfoWHEREsage=20ORsage=21ORsage=25;
SELECT*FROMstuinfoWHEREsageIN(20,21,25);
--通配符
--_表示有且仅有一个任意字符_abc第一个字符时任意字符,后面3个是abc
--%表示0个到多个任意字符'张%'以张开头
--包含'张'字符'%张%'
--模糊查询
--查询姓张的学生信息
SELECT*FROMstuinfoWHEREsnameLIKE'张%';
--查询NULL值
SELECT*FROMstuinfoWHEREssexISNULL;
SELECT*FROMstuinfoWHEREssexISNOTNULL;
--按照年龄升序排列,orderby排序asc升序desc降序
SELECT*FROMstuinfoORDERBYsageASC;
SELECT*FROMstuinfoORDERBYsageDESC;
--按照年龄升序排列,如果年龄相同,就按照学号升序排序
SELECT*FROMstuinfoORDERBYsageASC,snoDESC;
--去除重复值
SELECTDISTINCTsageFROMstuinfo;
连接
表a有5个字段,表b有3个字段,则一般的链接有5*3=15个字段。
--内链接,只显示都有的
SELECT*FROMscott.empseINNERJOINscott.deptsdONse.deptno=sd.deptno;
--左外连接,以左边的表为标准
SELECT*FROMscott.empseLEFTJOINscott.deptsdONse.deptno=sd.deptno;
--右外连接,以右边的表为标准
SELECT*FROMscott.empseRIGHTJOINscott.deptsdONse.deptno=sd.deptno;
--多表连查
SELECTse.*,sd.dnameFROMscott.empse,scott.deptsdWHEREse.deptno=sd.deptnoANDsd.dname='SALES';
--子查询
SELECTse.*,sd.dnameFROMscott.empseWHEREse.deptno=(SELECTsd.deptnoFROMscott.deptsdWHEREsd.dname='SALES');
--查询语句顺序
select列名from表名连接名where条件gropby列名orderby列名having分组后条件
--查寻工资最高的前三条记录
select*from(select*fromstudentorderbyscdesc)whererownum<=3;
--分组后再加条件用having
selectsum(score),snofromscoregroupbysnohavingsum(score)>100
--decode的用法小王-王晶小李-李连杰其他-王力宏
decode(sname,'小王','王晶','小李','李连杰','王力宏');
七.函数
--转换ASCII码
SELECTASCII('a')FROMdual;
--连接字符串
SELECTconcat('abc','def')FROMdual;
SELECT'abc'||'def'FROMdual;
--求字符串长度
SELECTlength('abcdfe')FROMdual;
SELECTlength('我是')FROMdual;
--去除左边的空格
SELECT'['||ltrim('abc')FROMdual;
--去除右边的空格
SELECT'['||rtrim('abc')||']'FROMdual;
--同时去除左右两边的空格
SELECTrtrim(ltrim('abc'))FROMdual;
--替换字符串
SELECTREPLACE('alblb1','1','l')FROMdual;
SELECTREPLACE('abcdaac','a','e')FROMdual;
--返回大于或等于给出数字的最小整数
SELECTCEIL(32.5)FROMdual;--33
--对给定的数字取整数
SELECTFLOOR(32.5)FROMdual;--32
SELECTfloor(-32.5)FROMdual;---33
--按照指定的精度进行舍入
SELECTround(32.5)FROMdual;--33
SELECTround(32.4)FROMdual;--32
--截断,(和floor类是)
SELECTTRUNC(32.5)FROMdual;
SELECTtrunc(-32.5)FROMdual;
SELECTtrunc(32.4445,2)FROMdual;
--日期函数
--增加或减去月份
SELECTadd_months(SYSDATE,3)FROMdual;
SELECTadd_months(to_date('1985-02-04','yyyy-MM-dd'),2)FROMdual;
SELECT*FROMscott.emp;
SELECTadd_months(hiredate,1)FROMscott.emp;
--返回日期的最后一天
SELECTlast_day(SYSDATE)FROMdual;
--两个日期相差的月份
SELECTMONTHS_BETWEEN(SYSDATE,hiredate)FROMscott.emp;
--给出日期date和星期x之后计算下一个星期的日期
SELECTNEXT_DAY(SYSDATE,'星期二')FROMdual;
--得到系统当前日期
SELECTSYSDATEFROMdual;
--将字符串转换成数字
SELECTTO_NUMBER('29854.2323')FROMdual;
SELECTto_number('34.56','99999.9999')FROMdual;
--条件函数
SELECT*FROMscott.emp;
SELECTdecode(deptno,30,'市场部',20,'学术部',10,'电脑部'),deptnoFROMscott.emp;--与空值(NULL)相关
SELECT*FROMscott.emp;
SELECT*FROMstuinfo;
SELECTsname,nvl(address,'没得地方')addressFROMstuinfo;
--不为空替换为有地方,为空替换为没得地方
SELECTnvl2(address,'有地方住','没的地方住')FROMstuinfo;
INSERTINTOstuinfoVALUES(1,'a','男',20,NULL);
--统计(聚合)函数(必须记住)
--最大值:
查询最高工资是多少
SELECTMAX(sal)FROMscott.emp;
--最小值
SELECTMIN(sal)FROMscott.emp;
--平均值
SELECTAVG(sal)FROMscott.emp;
--求和
SELECTSUM(sal)FROMscott.emp;
SELECTSUM(sal)FROMscott.empWHEREsal>1500;
--统计记录条数
SELECTCOUNT(*)FROMscott.empWHEREsal>1500;
------------分组(groupby)
SELECT*FROMscore;
--求每一门课程的平均成绩
SELECTAVG(score),subjectFROMscoreGROUPBYsubject;
--求每一个学生的总成绩
SELECTSUM(score),snoFROMscoreGROUPBYsno;
--求总成绩大于100分的学生,分组之后的条件只能有having
SELECTSUM(score),snoFROMscoreGROUPBYsnoHAVINGSUM(score)>100;
八.数据库对象
--同义词
--私有的同义词
--创建或者替换某个同义词
CREATEORREPLACESYNONYMempFORscott.emp;
SELECT*FROMemp;
--共有同义词
CREATEORREPLACEPUBLICSYNONYMempFORscott.emp;
SELECT*FROMemp;
要授权才能用
GRANTSELECTONsynTOuser2;
--删除同义词
--删除共有的同义词
DROPPUBLICSYNONYMemp;
--删除私有的同义词
DROPSYNONYMmyemp;
SELECT*FROMstuinfo;
--序列
--startwith要生成序列的第一个序号
--incrementby指定序号之间的间隔
--maxvalue序列的最大值
--minvalue序列的最小值
--cycle序列达到指定的最大或者最小值后从头开始生成默认nocycle不重新生成--cache缓存序号,nocache不缓存,不写默认缓存20个序号
CREATESEQUENCEseq_stuinfo_sno
STARTWITH1
INCREMENTBY1
MAXVALUE99
MINVALUE1
--访问序号
--得到下一个序号
SELECTseq_stuinfo_sno.nextvalFROMdual;
SELECTseq_stuinfo_sno.currvalFROMdual;
INSERTINTOstuinfoVALUES(seq_stuinfo_sno.nextval,'aa','男',19,'重庆');
--更改序号
--不能修改startwith参数
ALTERSEQUENCEseq_stuinfo_sno
MAXVALUE10
CYCLE
CACHE2;
--删除序列
DROPSEQUENCEseq_stuinfo_sno
--视图,临时表
CREATEORREPLACEVIEWview_emp
ASSELECT*FROMscott.empWHEREdeptno=30;
SELECT*FROMview_emp;
SELECT*FROMscott.empWHEREdeptno=30;
UPDATEscott.empSETsal=5000WHEREempno=7499;SELECT*FROM(SELECT*FROMscott.emp);
--删除视图
DROPVIEWview_emp;
--
九.PLSQL
--1.PLSQL语句块语法
DECLARE--声明部分
BEGIN--可执行代码
EXCEPTION--异常部分,不是必须的
END;
--例:
DECLARE
vnoNUMBER:
=30;
BEGIN
IFvno>20THEN
dbms_output.put_line('vno:
'||vno);
ELSE
dbms_output.put_line('vno:
的值太小');
ENDIF;
END;
--2.PLSQL声明变量
--2.1声明变量并赋值
DECLARE
vnoNUMBER:
='&vno';
BEGIN
dbms_output.put_line('vno='||vno);
END;
--2.2声明变量,后赋值
DECLARE
vnoNUMBER;
vnameVARCHAR2(20);
BEGIN
vno:
=7369;
--将scott.emp中的ename赋给vname变量
SELECTenameINTOvnameFROMscott.empWHEREempno=vno;
dbms_output.put_line('vno='||vno);
dbms_output.put_line('vname='||vname);
END;
--3.数据类型
--3.1数字类型NUMBER
--3.2可变长度字符类型VARCHAR2最大的字节长度4000
--3.3固定长度字符类型CHAR最大字节长度2000
--3.4属性类型
---%TYPE和表里的字段对应
--%ROWTYPE和表里面的行对应
DECLARE
vnamescott.emp.ename%TYPE;
BEGIN
SELECTenameINTOvnameFROMscott.empWHEREempno=7369;
dbms_output.put_line('vname='||vname);
END;
--4.控制结构
--4.1条件控制
--4.1.1简单if
DECLARE
vnoNUMBER:
='&vno';
BEGIN
IFvno>10THEN
dbms_output.put_line('vno='||vno);
ENDIF;
END;
--4.1.2多重if
DECLARE
vnoNUMBER:
='&no';
BEGIN
IFvno=10THEN
dbms_output.put_line('vno=10');
ELSIFvno=20THEN
dbms_output.put_line('vno=20');
ELSE
dbms_output.put_line('vno=50');
ENDIF;
END;
--4.2case语句
--4.2.1使用选择器
DECLARE
vnoNUMBER:
='&vno';
BEGIN
CASEvno
WHEN1THEN
dbms_output.put_line('vno=1');
WHEN2THEN
dbms_output.put_line('vno=2');
WHEN3THEN
dbms_output.put_line('vno=3');
ELSE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 数据库 知识 总结