Oracle 开发基础

zhan_kevin

贡献于2012-01-11

字数:0 关键词: Oracle 数据库服务器

Friday 2009年8月14 日 ACRM项目组:王兆坤 ORACLE开发基础 1 ORACLE开发基础  ORACLE中SQL语句的类型 1:数据查询语言 例如:SELECT 2:数据操纵语言(Data Manipulation Language DML) 例如:INSERT、UPDATE、DELETE 3:事务控制语言(Transactional Control Language) 例如:ROLLBACK、COMMIT、SAVEPOINT 4:数据定义语言(Data Definition Language) 例如:CREATE、ALERT 5:数据控制语言(Data Control Language) 例如:GRANT、REVOKE 2 ORACLE常用函数  数学函数  日期函数  字符函数  类型转换函数  聚合函数  分析函数 3 数学函数  CEIL(n):返回大于或等于n的最小整数  FLOOR(n):返回等于或小于n的最大整数 4 数学函数  ROUND(n,m):四舍五入  TRUNC(n,m):直接截取,不遵守四舍五入原则 5 日期函数  ADD_MONTHS(date,n):返回date加上n个月的日期  备注:如果是月末(例如2009-01-31),因为二月是没有31日的, 所以返回的是二月月末的那天2009-02-28,那么如果是2009-01-30 加一个月的结果是什么哪?大家自己去测试。 6 日期函数  LAST_DAY(date):返回日期所在月的最后一天  NEXT_DAY(date,n):返回距离日期date最近的weekday  备注:n的取值范围是1-7,1表示星期日,2表示星期一.... 7 字符函数  LOWER(char)/UPPER(char):返回大写或小写字符  LTRIM(char,set)/RTRIM(char,set):对字符类型前后去set字符串  备注:如果不指定set,默认是去空格。用另外的方法实现前后去字 符,就需要各位去测试了。 8 字符函数  LPAD(expr1.n,expr2)/RPAD:对expr1左或右添加n个expr2  SUBSTR(str1,n,len):返回str1从第n个字符开始查找len个字符。  备注:如果不指定len,默认是从n个字符找到最后。INSTR大家 自己去测试 9 类型转换函数  TO_DATE(char,fmt):把字符型的数字转换成DATE型  备注:fmt是char的类型格式,严谨来说这个格式必须要和char的格 式相符,否则会转换错误。可能有的时候你指定的格式和char的格式 不相同,但是也成功了,那为什么能成功哪?因为是ORACLE帮你 转换了,可是日期格式很复杂,ORACLE也不是神,无法读懂你所 有的格式。所以希望各位能严谨些。 10 类型转换函数  CAST(expr as type_name):把expr转换成type_name的类型  TO_CHAR、TO_NUMBER这几个函数和TO_DATE都是大同小异  备注:需要注意的是TO_CHAR函数的FMT格式,是表示把sysdate 转换成字符串的格式。 11 聚合函数  SUM、MAX、MIN、COUNT、AVG  SUM:求和函数  MAX:求最大值  MIN:求最小值  COUNT:求记录数  AVG:求平均值  备注:注意对NULL的处理。 12 分析函数  ROW_NUMBER()OVER(PARTITION BY …ORDER BY …) 计算一个部门中薪水最高的一个员工的所有信息 13 分析函数  RANK() OVER(PARTITION BY …ORDER BY …) 计算一个部门薪水最高的员工的所有信息(薪水相同全部员工列出)  备注:看出ROW_NUMBER和RANK的区别了吗?ROW_NUMBER 同一组中的序号是唯一的,是连续的。而RANK不同,相同的数值的 序号也是相同的,不是唯一的。 14 其他函数  DECODE函数的简单应用 15 ORACLE常用HINT  FULL  INDEX  PARALLEL  USE_HASH  APPEND 16 FULL  FULL(table_name):走全表扫描 17 INDEX  INDEX(table_name,index_name):走索引扫描 18 PARALLEL  PARALLEL(table_name,n):并行扫描,并行度n 19 USE_HASH  USE_HASH(tab1,tab2):走HASH关联 20 APPEND  APPEND:直接路径插入(用于INSERT)  APPEND是直接插入到TABLE的HWM之上,而不是像传统INSERT 方式那样,插入到TABLE的FREE SPACE中。提高插入的速度。 21 ORACLE常见误区  ORACLE整人专家 -------NULL  莫名其妙的日期类型-----DATE  易忽略的数字类型 -------NUMBER  奇异的字符类型 -------CHAR/VARCHAR2  易出错的外连接 -------LEFT JOIN  MERGE容易忽略的地方 22 ORACLE整人专家  TEST_NULL表中有如下记录。(ID是NUMBER类型)  我想问下各位下面的SQL语句返回什么? SELECT CASE WHEN ID=NULL THEN 1 WHEN ID=2 THEN 2 WHEN ID=3 THEN 3 END CASE,NAME FROM TEST_NULL 23 莫名其妙的日期类型  我的时间哪里去了?我明明插入时间了呀?为什么我的日期和书上显 示的日期不一样,我的SQL和书上写的一样呀?这是为什么哪? 24 易忽略的数字类型  经常有人搞不懂number(5,2)这个存储什么样的数据? 25 奇异的字符类型  CHAR类型和VARCHAR2类型经常出错的一个地方  SELECT COUNT(*) FROM TEST_CHAR WHERE NAME=NAME2;返回什么? 26 易出错的外连接  有的时候外连接出来的结果不是你想要的?这是为什么哪?  select a.id,a.name,b.id,b.name,b.id2 from test_join1 a left outer join test_join2 b on a.id=b.id and b.id2=1  select a.id,a.name,b.id,b.name,b.id2 from test_join1 a left outer join test_join2 b on a.id=b.id where b.id2=1  这两个的执行结果是否相同? 27 MERGE易忽略的地方  MERGE最常见的错误是 28 ORACLE常见问题  网上问的最多题目之一-------去重复记录  面试官问的最多的题目-------取指定范围内的记录  带有输出参数的存储过程的调用 29 去重复记录之一 问题描述:按照字段ID去重 30 去重复记录之二 问题描述:按照ID字段去重,但是取NAME最小,ADDR最小的那条记录 31 返回指定范围内的记录 问题描述:返回ID从小到大排序后第2到第4条记录 32 带有输出参数的存储过程的调用 33 性能优化基础  尽量让表走索引扫描(多数情况)  不要建立过多的索引  索引和表建在独自的表空间上  对大表进行分区 靠,跑的 这么慢 34 尽量走索引扫描  SELECT * FROM TEST WHERE ID=20000; 35 不要建过多的索引  不管是走全表扫描还是走索引,这些都是查找数据的一个路径,一个 方法而已。建立的过多,必然会造成解析的时间加长。还会增加维护 难度,还需要更多的空间来存储索引数据。 成都 北京 西安 重庆 天津 36 索引和表数据要建在单独的表空间上  SELECT ID,NAME FROM TEST WHERE ID=2000; TEST PK_TEST SELECT ID,NAME FROM TEST WHERE ID=2000; 查找索引需要 走这条路 查找数据也 要走着条路 37 对大表进行分区 假设TEST表有两亿条记录,我想执行如下SQL语句: SELECT * FROM TEST WHERE month=‘200902’; TEST 200901 200902 200904200903 38

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 6 人已下载

下载文档

相关文档