当前位置:文档之家› Oracle课件资料

Oracle课件资料


NVL函数
运行结果: 问题:
我们发现很多员工的实发工资变成了 NULL,这很显然是不对的。造成这 个错误的原因在于有的员工的 commission_pct 为NULL , 在计 算总工资时,由于有空值参与,所以 导致整个运算结果为空
NVL函数
问题解决: NVL函数
nvl(n1,n2) --判断n1是否是null,是null执行n2,否则执行 n1。 类似(n1==null?n2:n1)
Rownum是给查询结果的编号,在查询结果中,第一条满 足查询条件的数据rowid的值为1,依次递增。 注:rownum做条件,只能用<,<=,=1, >=1条件
子查询

子查询概念

1.查询的结果是一行一列
可以将结果看做是一个值,参与条件比较,或者显示在 select子句

2.查询结果是多行一列
可以将结果看做多个值,参与条件比较或者显示在select 子句

3.查询结果是多列
可以将结果看做是一个临时表,针对临时表进行再次查询, 分组,排序,表连接等各种操作。
基本概念

例子:

1.查询工资低于公司平均工资的员工信息
甲骨文(兴学)培训中心
oracle函数
基本概念

学习目标

掌握单行函数 掌握组函数 【重点】掌握查询结果分组 Where和having的区别
单行函数

基本概念:
所谓的单行函数就是作用于表里的每一行数据,执行一次函 数。
数据1 结果1
数据 2 一条数据
单行函数
结果2
数据 3 一条数据
条件查询(WHERE)语句

语法结构:
case when exp1 then 结果1 when exp2 then 结果2 else 其他结果 end [别名] 功能:对查询数据根据不同条件返回不同结果(switch-case) 说明:语法中的exp1 表达式是布尔表达式
select first_name , salary , case when salary < 6000 then 'low' when salary between 6000 and 10000 then 'middle' else 'high' end as "sal_level " from ployees
甲骨文(兴学)培训中心
Oracle数据库入门
基本概念

学习目标

会基本的数据库操作 掌握简单查询语句 掌握条件查询 掌握查询结果排序
基本概念

什么是关系型数据库
(Relationship DataBase Management System)用于对数据进行存储、操作等管理,简称为数据库 (DB)。是一个由一批数据构成的有序集合,这个集合通常被保存 为一个或多个彼此相关的文件。这些数据被分门别类地存放在一些 结构化的数据表(table)里,而数据表之间又往往会形成种种内在 的交叉引用关系。
数据1
数据2
组函数
输出结果
数据3
组函数

常用单行函数:
sum(列名) avg(列名) max(列名) min(列名) --求一组数据的总和这些函数在运 算时都会忽略 --求一组数据的平均值 null值 --在一组数据中找出最大值 --在一组数据中找出最小值
count(列名) --对查询结果中该列的非空记录(统计结果中 该列不为null的行数) eg:查询公司中职位的个数 select count(distinct job) from employees;
分组过滤

Having子句,对分组后的数据进行过滤 概念:对分组后的数据进行条件过滤 语法结构:

select ... from ... where ... group by... having 过滤条件 order by ...
eg:查询平均工资大于3000的部门的部门id,最高工资和 总工资 select department_id , max( salary) , sum(salary), from employees group by department_id having avg( salary ) > 3000;
分组过滤

Where和having的区别 Where:对分组之前的数据进行过滤 Having:对分组后的数据进行过滤 优化: 如果where和having都可以实现过滤解决问题, 此时应优先选择where,效率高
甲骨文(兴学)培训中心
Oracle复杂查询
学习目标

学习目标

改写成
select employee_id , first_name , salary , commission_pct , (salary + salary* nvl(commission_pct,0)) as sum from employees;
பைடு நூலகம் 组函数

基本概念:
针对一组数据进行统计,这类 函数统称为组函数。 组函数的是一组数据产生一条结果
掌握伪劣的概念 掌握子查询 掌握分页查询【难点】 掌握表连接查询
伪劣

伪劣概念

伪列就是假的,不存在的列。这些列在表中并不存在, 但是可以通过查询语句查询出来。 Oracle常用的列有两种:rowID和rowNum ROWID:
Rowid伪劣能在整个数据库中唯一标识一条记录


ROWNUM:
数据分组

分组规则: 规则1:只有出现在group by 中的列才能出现在 select 子句中或order by子句中 规则2:如果在group by子句中的列上应用了某些函 数,select子句中或order by子句的相应列也必须应 用同样的函数 规则3:那些没有出现在group by 中的列,只有配合 分组函数可以出现在select子句中 或 order by子句中
数据分组

常用单行函数: 概念:组函数是把所有查询结果按照特定的条件进行分 组。 语法结构: Select… from…where…group by… 分组条件 eg:查询各个部门的最高工资和总工资 select department_id,max(salary),min(salary) from employees;
mod(num1,num2) -- 取模,num1%num2 trunc(n,length) --对数字n进行截断,精度到小数点后 length位 round(n1, length) --对数字n四舍五入,精度到小数点 后length位 abs(num) --对num取绝对值 获取随机数:dbms_random.random() , 产生一个很大的 随机数(可正,可负)
结果3
单行函数

常见单行函数
分类:字符串相关,数字相关,日期相关,类型转换相关, NVL函数
字符串相关函数:
length(str)—获得字符串str的字符长度
concat(str1,str2)—相当于 ||的功能 substr(str,begin,length)--对str做截取,从begin(下
数据分组
数据分组

分组特别注意【重点】

需要强调,由于SQL语句中使用类group by 子句之后,同一小 组内的多条数据最终要被合并为一条数据,那么对select 后面的 列名字是有要求的。我们先来看一个错误的例子:Select department_id,first_name,max(salary),sum(salary) from employeesgroup by department_id 这条sql产生错误的原因 就在于在使用group by 根据department_id 进行分组之后,又 要查询first_name列,我们知道一个小组最后会被合并成一条数 据,那么小组内每个人的first_name 由不相同,就会造成无法合 并的问题。那么究竟哪些列可以出现分组SQL中呢,我们给出如 下规则,请大家牢记:
功能:对查询结果进行排序
1.单列排序 2.多列排序
条件查询(WHERE)语句

语法结构:
select 列名1,列2 from 表名 where 过滤条件 order by 列 asc|desc
功能:对查询结果继续过滤
1.等值 = 2. > >= < <= != and or 3.null值得处理 IS [NOT] null【特别注意】 4.范围查询:列名[not] between 小值 and 大值 5.枚举查询:列名 [not] in (值1,值2,…,值N)
标从1开始)开始截length位 instr(str1,str2,begin) -- 在str1里查找str2,从begin (下标从1开始)开始查找。找到返回str2首字母所在的下标,否则 返回-1
lower(str) , upper(str) -- 将str转换成小写/大写
数字函数
数字相关函数:
连接数据库
服务器端: OracleServiceXE(核心)、OracleXETNSListener(对外提供连接支持) 客户端:
sqlplus : oracle提供的基于dos界面的client工具。 登录:sqlplus hr/hr ; 退出:exit iSqlPlus: oracle提供的基于浏览器界面的client工具。 访问:http://localhost:8080/apex
可选日期格式字符串: year--按年截断 day-星期 省略格式字符串表示截断时分秒 month-按月截断
相关主题