oracle章节总结Word文档下载推荐.docx
《oracle章节总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《oracle章节总结Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
1988-12-11'
'
yyyy-mm-dd'
)),而在其他的数据库中,例如db2、mysql等可以直接将日期作为字符串插入数据库。
6、在实际的项目开发中,经常将多对多关系的表拆分成两个一对多的关系,使用关系表来建立关联。
在数据库建模的过程中,外键的含义是子表对主表的引用。
第03章表格操作及事务处理
1、带外键关联的主从表操作方式:
update:
如果主表中信息在子表中关联存在则该关联字段不可以修改;
如果不存在则可以修改。
如果子表中的关联字段在修改过后在主表中可以找到关联信息并且不违反子表的主键约束则可以修改;
反之则不可修改。
delete:
删除时应该先删除子表再删除主表。
insert:
插入时应该先插入主表再插入子表。
2、物理删除和逻辑删除:
物理删除指使用deletefrom方式删除数据,删除后数据在表中不存在;
逻辑删除是指在表中建立一个标志列,当删除一行时只是对这列做update,例如使用1表示未删除,使用0表示删除。
这样在查询的时候,可以使用where子句来判断是否显示逻辑删除的列。
第04章单表检索
1、单表查询结构如下:
1)SELECT[DISTINCT|UNIQUE](*,字段名[AS别名],…)
2)FROMtablename[ASallies]
3)[WHEREcondition]
4)[ORDERBY]
执行顺序如下:
2)-->
3)-->
1)-->
4)
2、别名问题,在oracle中对象的别名又叫同义词。
oracle中对于表的别名不能使用as,而列的别名可以使用as。
按照单表查询结构顺序别名可以用于排序。
3、distinct用于对单列或多列的组合进行重复数据过滤,如:
selectdistinctamfromtest对a和b列数据的组合进行过滤。
4、查询效率问题:
select*fromtest
大数据量:
例如在1000万条记录在这种场景下进行这样的查询无论是数据的查询还是传输都会造成系统极大的负担。
改进方法:
分页
列数据过大:
例如test表中某列为blob类型,用于存储高清照片信息,那么使用select*这种罗列出所有列的做法也会造成数据量过大。
选取需要的列信息,而对于不需要的列不要通过select选取出来selectafromtest
索引失效:
索引的作用是为了提高通过某列的限定行查询提高查询效率,但是有一些情况下会造成索引失效,例如使用like%进行字符串的模糊匹配;
使用in或notin关键字等。
5、oracle中的/运算符不是整除。
6、oracle中的简单分页sql:
select*from
(selectrownumasrn,tmp.*fromtbl_studentinfotmp)
wherernbetween3and6;
第05章数据库内置函数
1、函数和过程的区别(function和procedure):
函数有返回值;
过程是对业务的处理没有返回值。
2、casewhen语句的补充用法:
selectstuno,classno,
casewhenscore<
60then'
不及格'
whenscore>
=90then'
优秀'
=60andscore<
90then'
合格'
else'
未知'
endscoreLevel
fromtbl_scoreinfo;
需要注意的是scoreLevel这一列的数据是由多项选择出来的数据构成的,其中要求该列的每条记录的数据类型要一致。
3、日期时间类型
日期:
yyyy-mm-dd
时间:
hh:
mi:
ss
时间戳:
yyyy-mm-ddhh:
ss,000000000
4、常用ORACLE日期时间函数
--当前日期
selectsysdatefromdual;
--当前时间戳记
selectsystimestampfromdual;
--本月最后一天
selectlast_day(systimestamp)fromdual;
--用于从一个日期值增加或减少月份
selectadd_months(sysdate,2)fromdual;
--日期f和s间相差月数
selectfloor(months_between(sysdate,to_date('
2011-05-01'
)))fromdual;
--返回由"
day_of_week"
命名的,在变量"
d"
指定的日期之后的第一个工作日的日期。
--参数"
必须为该星期中的某一天。
selectnext_day(to_date('
20110620'
YYYYMMDD'
),1)fromdual;
--返回当前会话时区中的当前日期。
selectsessiontimezone,current_datefromdual;
--以timestampwithtimezone数据类型返回当前会话时区中的当前日期。
selectcurrent_timestampfromdual;
--返回时区
selectdbtimezonefromdual;
--分割时间
selectextract(yearfromsystimestamp)fromdual;
selectextract(monthfromsystimestamp)fromdual;
selectextract(dayfromsystimestamp)fromdual;
selectextract(hourfromsystimestamp)fromdual;
selectextract(minutefromsystimestamp)fromdual;
selectextract(secondfromsystimestamp)fromdual;
selectextract(monthfromtimestamp'
2011-11-1212:
12:
22'
)fromdual;
--返回会话中的日期和时间
selectlocaltimestampfromdual;
--常用日期数据格式
--Y或YY或YYY年的最后一位,两位或三位
--SYEAR或YEARSYEAR使公元前的年份前加一负号
--Q季度
--MM月份数
--RM月份的罗马表示
--Month
--WW当年第几周
--W本月第几周
--DDD当年第几天
--DD当月第几天
--D周内第几天
--DY周内第几天缩写
--HH或HH1212进制小时数
--HH2424小时制
--MI分钟数(0~59)
--SS秒数(0~59)
selectto_char(systimestamp,'
YYYY-MM-DDHH24:
MI:
SS'
YYYY-MM-DDHH:
--上月末天:
selectto_char(add_months(last_day(sysdate),-1),'
yyyy-MM-dd'
)LastDayfromdual;
--上月今天
selectto_char(add_months(sysdate,-1),'
)PreTodayfromdual;
--上月首天
selectto_char(add_months(last_day(sysdate)+1,-2),'
)firstDayfromdual;
--按照每周进行统计
selectto_char(sysdate,'
ww'
)fromdualgroupbyto_char(sysdate,'
);
--按照每月进行统计
mm'
--按照每季度进行统计
q'
--按照每年进行统计
yyyy'
第06章关联检索
1、在二维表中表中保存部门信息(树型结构)
|-----XX公司00
|-----财务部0001
|-----人事部0002
|-----开发部0003
|-----开发一部000301
|-----CRM组00030101
|-----ERP组00030102
|-----开发二部000302
|-----测试部0004
|-----测试一部000401
|-----测试二部000402
部门编号部门名称上级编号
00XX公司null
0001财务部00
0002人事部00
0003开发部00
0004测试部00
000301开发一部0003
000302开发二部0003
000401测试一部0004
000402测试二部0004
00030101CRM组000301
00030102ERP组000301
2、关联查询分类:
内关联:
相等关联和join方式关联,作用效果一致。
外关联:
左外连接,主表数据全部选出,子表中的记录满足条件被选出。
右外连接,子表数据全部选出,主表中的记录满足条件被选出。
全连接,主