一、函数—单行函数
函数分为系统内置函数 自定义函数(后期学习的 plsql 中定义);了解系统内置函数(方法),重点掌握 to_date 、 to_char(字符和日期的转换)
根据函数的返回结果,我们将函数分为单行函数和多行函数
1、单行函数:一条记录返回一个结果
2、多行函数 组函数 聚合函数 (重点) :多条记录 返回一个结果 (重点)
1、日期函数
日期函数: 注意区分 db数据库时间 ,java应用服务器的时间。以一方为准oracle以内部数字格式存储日期:年,月,日,小时,分钟,秒
sysdate/current_date 以date类型返回当前的日期
add_months(d,x) 返回加上x月后的日期d的值
LAST_DAY(d) 返回的所在月份的最后一天
months_between(date1,date2) 返回date1和date2之间月的数目
next_day(sysdate,‘星期一’) 下周星期一
2、转换函数(重点)
to_date(c,m) 字符串以指定格式转换为日期
to_char(d,m) 日期以指定格式转换为字符串
select to_date(‘2017-3-21 18:12:12’,‘yyyy-mm-dd hh24:mi:ss’) time from dual;
select to_char(sysdate,‘yyyy-mm-dd’) from dual;
select to_char(sysdate,‘yyyy/mm/dd’) from dual;
select to_char(sysdate,‘yyyy\mm\dd’) from dual;
注意中文的问题
–select to_char(sysdate,‘yyyy年mm月dd日’) from dual;select
to_char(sysdate,‘yyyy"年"mm"月"dd"日"’) from dual;
3、其他函数 (保证类型兼容)
–1)、nvl nvl(string1,string2) 如果string1为null,则结果为string2的值
select ename, nvl(null,0) from emp;
select ename, nvl(to_char(comm),‘hello’) from emp;
–2)、decode decode(condition,case1,express1,case2 , express2,….casen , expressn, expressionm)
select ename,decode(deptno, 10,‘十’,20,‘二十’) from emp;
–3)、case when then else end
二、组函数
组函数|多行函数|聚合函数 即多条记录 返回一个结果。我们需要掌握如下几个组函数:
avg 、sum、 min、 max、 count
1)、count :统计记录数 count() -->* 或一个列名
2)、max min: 最大值 最小值
3)、sum:求和
4)、avg:平均值
注意:
1、组函数仅在选择列表和Having子句中有效
2、出现组函数,select 只能有组函数或分组字段
三、分组
分组: group by , 将符合条件的记录 进一步的分组
过滤组:having , 过滤组信息 ,表达式 同 where 一致
group by :分组
1)、select 出现分组函数,就不能使用 非分组信息,可以使用 group by 字段
2)、group by字段 可以不出现 select 中 ,反之select 除组函数外的,其他字段必
须出现在group by 中
过滤组 having :
where :过滤行记录,不能使用组函数, having:过滤组 可以使用组函数
四、rowid 和 rownum
ROWID 是 ORACLE 中的一个重要的概念。用于定位数据库中一条记录的一个
相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。
ROWID 它是一个伪列,它并不实际存在于表中。它是 ORACLE 在读取表中数据行时,
根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的 ROWID 能
找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作都是
通过 ROWID 来完成的,而且使用 ROWID 来进行单记录定位速度是最快的。我们可以
将其用于删除重复数据。
ROWNUM 是一种伪列,它会根据返回记录生成一个序列化的数字。排序后的
结果集的顺序号 ,每一个结果集 都有自己顺序号 ,不能直接查询大于 1 的数。利用
ROWNUM,我们可以生产一些原先难以实现的结果输出。 例如实现分页操作。
ps: oracle 中 索引从 1 开始,java 程序 从 0 开始
五、表连接(92)
当我们获取的数据不是来自于同一张表而是来自于多张表时就需要使用到表连接
select * from emp;
select * from dept;
注意:同名列 非* 必须区分
数据源 、关系列、 过滤条件、字段