Oracle笔记.docx
《Oracle笔记.docx》由会员分享,可在线阅读,更多相关《Oracle笔记.docx(47页珍藏版)》请在冰点文库上搜索。
Oracle笔记
Oracle
笔记
目录
绪论3
---------------------------day01-------------------------------
--1.概念导论
--1)什么是数据库
--有组织和结构存储数据。
可以存储
--字符、字节、图形、图像等类型数据
--DB(数据库):
数据集合
--DBMS(数据库管理系统):
对数据集合进行管理和操作的软件
----Oracle
----DB2
----MySQL
----SQLSERVER
--2)为什么使用数据库
--程序在运行时,对数据需要以下几点服务:
----持久存储(文件或数据库)
----高可靠性
----存取方便
----大数据量
--3)如何使用数据库
--a.Oracle
--Oracle甲骨文公司-->Oracle数据库
--LarryEllisonOracle之父CEO
--1970,IBM一个研究员发布一篇数据关系模型文章。
--1977,LarryEllison同另外两个人一起创办了公司***实验室(32岁)
--1979公司改名,最终在1983年改成Oracle.
--第一个员工是SCOTT/TIGER
--
--*b.操作语句SQL
--Oracle数据库通过SQL命令操作数据。
--SQL有以下几种类型:
----DML(DataManipulationLanguage):
数据操作语句。
例如存取数据。
----DDL(DataDefinitionLanguage):
数据定义语句。
例如定义存储结构
----DCL(DataControlLanguage):
数据控制语句。
例如授权,取消授权
----TCL(TransactionControlLanguage):
事务控制语句。
例如开启事务、提交和回滚
----DQL(DataQueryLanguage):
数据查询语句。
例如查询
--
--2.Oracle环境
--a.Oracle访问
--Oracle分为客户端和服务器端两部分。
--通过以下几种途径可以访问Oracle服务器。
----程序Java(JDBC)+SQL
----客户端软件(sqldeveloper,
--eclipse)
--运行opt/sqldeveloper
----远程登录telnet
--命令行运行:
telnet服务器ip
----服务器本机操作DBA工具界面
--b.Oracle环境
--安装Oracle服务器(DBA)-->
--创建库(DBA)-->
--创建用户和授权(DBA)-->
--*用户可以创建数据结构(表)-->
--*用户可以使用SQL对表操作
--c.达内北京Oracle实验室
--192.168.0.20:
1521:
tarena
--192.168.0.23:
1521:
tarena10g
--192.168.0.26:
1521:
tarena
--登录服务器用户名openlab和密码open123
--账号1:
openlab
--密码1:
open123
--账号2:
jsd1309
--密码2:
jsd1309
--opt/sqldeveloper
--*3.Oracle操作
--*1)命令行操作步骤(北京现场班)
----进入命令行,输入"telnet服务IP"
----输入openlab/open123登录服务器
----输入sqlplus命令
----输入oracle账号openlab或jsd1309账号登录Oracle,进行SQL操作
--*2)SQLDeveloper操作步骤
----启动该软件,opt/sqldeveloper
----填写用户名、密码、服务器IP、端口号、SID(库)名
----单击“连接”按钮,进入之后执行SQL操作
--*3)具体使用
--表结构:
表是数据库存储的基本单元和结构。
表格由若干行和列构成。
--列被称为"字段",行被称为记录。
--列需要在建表时定义,行不需要指定。
--a.DDL语句
--负责创建、修改、删除表结构。
----创建表
--createtable表名(
--字段1类型,
--字段2类型,
--字段3...
--);
--常用类型有:
CHAR,VARCHAR2,NUMBER,
--DATE.
--CHAR(10)固定字符串"abc"
--VARCHAR2(10)可变字符串"abc"
----查看表结构
--desc表名;
----删除表
--droptable表名;
----查阅改用户下已创建表有哪些
selecttable_namefromuser_tables;
--
--b.DML
--负责添加、修改、删除表记录信息。
--DML操作必须执行commit才能生效。
----添加记录
--INSERTINTO表名【(字段1,字段2..)】VALUES(值1,值2...)
--给部分字段指定值:
insertintoperson1(t_id,t_name,t_sex)values(102,'sun','女');
--给所有字段指定值:
insertintoperson1values(103,'tiger',50,'男',SYSDATE,'Y');
----更新记录
--UPDATE表名
--SET字段1=值1,字段2=值2
--【WHERE字段=条件值】
--
--没有WHERE语句将更新所有记录。
--有WHERE语句将更新满足WHERE条件的
--记录。
--
----删除记录
--DELETEFROM表名
--【WHERE字段=条件值】
--
--没有WHERE语句将删除所有记录。
--有WHERE语句将删除满足WHERE条件的
--记录。
--c.TCL
--用于事务管理,默认DML增删改语句执行后没有真正修改表中数据,可以该操作进行确认commit和取消rollback。
--
--d.DQL
--用于数据查询操作。
--SELECT*或字段1,字段2
--FROM表名
--【WHERE字段=值】
--
--SELECT*表示返回所有列,
--SELECT字段1,字段2返回指定列
--没有WHERE语句将查询所有记录。
--有WHERE语句将查询满足WHERE条件的
--记录。
--新建表
--createtable表名(
--字段1类型
--字段2类型
--字段3……
--);
createtablewang_feng_createtable(
t_idNUMBER,
t_nameVARCHAR2(20),
t_ageNUMBER(3),
t_sexCHAR
(2),
t_birthDATE,
t_marryCHAR
(1)
);
--查看当前表的结构desc表名
desccreatetable32;
droptablecreatetable32;
--删除当前表droptable表名
droptablewangfeng
--获取当前用户名下的所有表
selecttable_name
fromuser_tables;
--查看当前表的数据select*from表名;
select*fromwang_feng_createtable;
--批量更新表中的数据
insertintowang_feng_createtable(t_id,t_name,t_age,t_sex,t_birth,t_marry)
values(23,'王小丰',22,'男',SYSDATE,'Y');
commit;--刷新
select*fromwang_feng_createtable;
--更改update表名
--set字段1=值where字段=条件值(不加条件默认为修改全部);
updatewang_feng_createtablesett_name=wangfeng;
commit;
select*fromwang_feng_createtable;
--删除记录deletefrom表名where字段=值/in(多个条件中满足一个)(如果不加条件就删除当前表中所有记录)
deletefromwang_feng_createtablewheret_idin(11,12,23,44);
--CTL用于事务管理,默认DML增删改语句执行后没有真正修改表中数据,可以改操作进行确认comit和取消rollback
--DQL查询select字段1,字段2(如果查看全部就用“*”)
--from表名
selectt_name
fromwang_feng_createtable;
--定义一个资费信息表sost_yelang
--ID资费ID
--NAME资费名
--BASE_DURATION基本时长
--BASE_COST基本费用
--UNIT_COST单价数值
--STATUS状态数值
--DESCR资费描述
--COST_TYPE资费类型
--CREATIME创建时间
--STARTTIME开启时间字符串类型'1'包月'2'套餐'3'计时
--插入若干数据测试
--查询资费类型='1'
--查询资费名=xxx
--单价>0.5
--更新
--将id=1的记录的名字更新
--将所有单价上调10%
createtablecost_yelang(
t_idnumberprimarykey,--资费id/主键
t_namevarchar2(20),--资费名/
base_durtionnumber,--基本时长
base_costnumber,--基本费用
unit_costnumber,--单价
startusvarchar2(10),--状态
descrvarchar2(50),--资费描述
createtimedate,--创建时间
starttimedate,--开启时间
cost_typevarchar2
(2),--资费类型
constraintname_1unique(t_name)
);
SELECT*FROMcost_yelang;
insertintocost_yelang(t_id,t_name,base_durtion,base_cost,unit_cost,
startus,descr,createtime,starttime,cost_type)
values(8,'3G上网套餐',10,3,1.8,'开启','长话漫游包',sysdate,sysdate,3);
commit;
SELECT*FROMcost_yelang;
SELECT*FROMcost_yelang--查询资费类型='1',包月类型的数据
wherecost_type='1';
SELECT*FROMcost_yelang--查询资费名='30M包月'类型的数据
wheret_name='30M包月';
SELECT*FROMcost_yelang--查询单价大于0.5类型的数据
whereunit_cost>0.5;
updatecost_yelangsett_name='30M你妹啊'wheret_id=1;--将id=1的资费名更新
sommit;
select*fromcost_yelang;
updatecost_yelangsetunit_cost=unit_cost*1.1;
sommit;
select*fromcost_yelang;
--字符串操作
--字符串类型:
--Char:
固定长度字符串,不足则用空格补齐
--Varchar:
同varchar2,但推荐使用varchar2
--注意:
varchar存储中文的问题:
varchar2存储字符与安装oracle字符集有关,一般字母按一个长度,
--中文按2个,因此varchar定义时,最大上限长度指定为*3
--Varchar2:
可变字符串长度,
--Nvarchar2:
采用unicode编码存储,一个汉字算一个长度
--上限
--Varchar2:
上限最大长度是4000,在使用时必须指定一个上限,例:
varchar2(20)
--Char:
上限长度是2000,在使用时可以使用char格式,默认长度是1.
--表名、字段名最大上限长度是30,不能以数字开头
---------------------------day02-------------------------------
createtablestringss(
t_idnumber,
t_namevarchar2(10)
);
insertintostringss(t_id,t_name)
values(3,'夜狼');
commit;
select*fromstringss;
selectt_id||t_namefromstringss;--字符串连接,将字段id和字段name连接
selectt_id||'.'||t_namestringss;
selectupper(t_id||'.'||t_name)fromstringss;将全部转换为大写
selectlowper(t_id||'.'||t_name)fromstringss;将全部转换为大写
selectinitcap(t_id)||initcap(t_name)fromstringss;--首字母大写
--trim(str)去掉字符串两边的空格
--rtrim(str)过滤右边空格
--ltrim(str)过滤左边空格
selectt_id||t_name||t_idfromstringss;没去空格
selecttrim(t_id)||trim(t_name)||trim(t_id)fromstringss;--去掉两边空格
--substr(str,截取位置[n,m])如果m不写,则默认为到末尾截取字符串
createtablefoo51(
ssvarchar2(30)
);
insertintofoo51values('1234567890');
commit;
selectsubstr(ss,3,7)fromfoo51;--从3到7
selectsubstr(ss,-6)fromfoo51;--倒着取5个
--填充字符串
--lpad(str,长度,填充字符):
对str在左边填充到指定长度,如果没有指定填充字符,则默认为空格
--rpad(str,长度,填充字符):
******右***
selectlpad('abc',5,'*')
fromdual;
selectrpad('agc',5,'*')
fromdual;
selectrpad('abc',5)
fromdual;
--instr(str,str1,5)查看str1在str中从第5位开始出现的位置,不写着默认从第一位开始
--instr(str,str1,int,int)查找str1在str中第5位后第3次匹配的字符的位置
selectinstr(ss,'78')fromfoo51;
selectinstr('12341234123412341234512345','3',4,3)fromdual;
--数值操作
--数值类型
--number,Oracle采用number表示整数和浮点数。
定义格式number(p[,s])p表示有效位数,s表示精度
--number含义:
--idnumber;不指定参数时,采用默认长度38位有效数字。
--number(p[,s]):
使用规则
--1.整数位超过p-s会出错
--2.小数位超过s会四舍五入
--3.s>0,对小数位进行四舍五入如number(4,2)23.567=》23.57
--4.s<0,对整数的指定位进行四舍五入,并将指定位后的位变为0,例:
number(4,-2)1253=>1300;
--5.s=0,采用四舍五入对整数取整
--6,p
number(2,4),0.00xx
--number定义:
--createtablefoo1(
--c1number,--默认长度38位有效数字
--c2number(4),--存储四位整数,有小数会自动四舍五入
--c3number(int1,int2)--存一个长度为int1的浮点数,小数位占int22位,整数位=int1-int2,
--整数位过多就超范围,小数过多者四舍五入
--c4number(4,-2)存储4位有效数,先将|-2|这个位四舍五入,末为0,例如1234变为1200
--1254变为1300123435变为123400
--);
createtablefoo1(
c1number,
c2number(4),
c3number(4,2),
c4number(4,-2)
);
insertintofoo1(c1)
values(12433215345);
commit;
select*fromfoo1
insertintofoo1(c2)
values(12333);--会报错,超过指定长度
insertintofoo1(c2)
values(1234.56);--会自动的四舍五入为整数
insertintofoo1(c3)
values(12.55);
insertintofoo1(c4)
values(125345);
commit;
select*fromfoo1;
--数值函数:
--round(n[,m]):
保留m位小数采用四舍五入对n操作,m默认为0;
--trunc(n[,m]):
保留m位小数采用截取方式对n操作
selectround(123.456,2)
fromdual;--123.46
selecttrunc(123.456,2)
fromdual;--123.45
selectround(126.456,-1)--负数就像小数点左移在操作
fromdual;--130
selecttrunc(123.456,-1)
fromdual;--120
--日期操作
--日期类型
--date:
存储年月日时分秒
--timestamp:
存储年月日小时,分钟秒.毫秒
--上述类型使用时,不需要指定参数
--日期时间关键字
--sysdate:
当前Orcale服务器系统时间
--systimestamp:
当前Orcale服务系统时间
createtablefoo71(c1date,c2timestamp);
insertintofoo71(c1,c2)
values(sysdate,systimestamp);
commit;
select*fromfoo71;
--日期格式:
--date默认格式为DD-MON-RR,日月年格式,例如'10-NOV-13'
insertintofoo71(c1)
values('10-NOV-13');
commit;
select*fromfoo71;
--如果需要插入自定义格式要使用to_date函数。
to_date(日期str,模板格式),将日期str转换为date类型,
--末班格式yyyy-mm-ddhh24:
mi:
ss
insertintofoo71(c1)
values(to_date('2013-08-08','yyyy-mm-dd'));
commit;
select*fromfoo71;
--将日期时间转换成字符串
--to_char(date,模板格式),将date值按模板格式转换成字符串
selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')fromdual;
--extract:
获取日期和时间制定部分
--extract(yearfrom日期)--年
--extract(monthfrom日期)--月
--extract(dayfrom日期)--日
--extract(hourfromsystimestamp)--小时
--extract(minutefromsystimestamp)--小时
--extract(secondfromsystimestamp)--秒
--
selectextract(yearfromsysdate)fromdual;--2013
selectextract(monthfromsysdate)fromdual;--11
selectextract(dayfromsysdate)fromdual;--12
selectextract(hourfromsystimestamp)fromdual;
--
--日期处理函数(其他)
--last_day(日期):
获取当前月份最后一天
selectlast_day(sysdate)fromdual;
--next_day(日期,星期几):
获取下一个星期几的日期
selectnext_day(sysdate,'星期一')fromdual;
months_between(日期1,日期2):
获取两个日期差多少个月
selectmonths_between(to_date('2013-8-8','yy-mm-dd'),to_date('2013-7-8','yy-mm-dd'))fromdual;
--round(日期[,'yyyy'|'mm']):
可以对年月日时分秒取四舍五入,不加后面的参数就取下一天
--trunc(日期[,'yyyy'|'mm']):
可以对年与日时分秒截取,不加参数则是舍去时分秒
---------------------------day03-------------------------------
createtableyl_table1(t1number,t2varchar2(10),t3varchar(10),
t4varchar(10));
dropt