初学Oracle二(自用)

7.数值类型
    NUMBER(P)表示整数 完整语法:
    NUMBER(P,S),S不写默认为0
    P:NUMBER可以存储的最大数字长度(不包括左右两边的0)
    S:小数点右边最大数字长度(包括左边的0),指定S,未指定P,则P默认为38
    
    数值函数
        ROUND(数字[,保留位数]):四舍五入,不指定则小数点后全部四舍五入,也可指定负数则是小数点前四舍五入

        TRUNC(数字[,截取位数]):保留小数,不指定则不保留
            
        MOD(数据1,数据2):取模 数据1%数据2

        CEIL,FLOOR 向上取整,向下取整

8.日期
    1 日期类型
        1 DATE
            DATE是Oracle中最常用的日期类型,用来保存日期和时间。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日。
            DATE类型在数据库中的存储固定为7个字节,格式为:
                第1字节:世纪+100
                第2字节:年
                第3字节:月
                第4字节:天
                第5字节:小时+1
                第6字节:分+1
                第7字节:秒+1

        2 TIMESTAMP
            比DATE更精确,可以保存到小数秒,精确到纳秒ns,存储格式前7和DARE类似,后四位存秒

        3 关键字
            1.SYSTIMESTAMP 返回当前系统时间精确到毫秒
    2 日期转换函数

        TO_DATE(char[,fmt [, nlsparams]]):将字符串按照定制格式转换为日期类型。
            char要转换的字符串
            fmt:格式
            nlsparams:指定日期语言
            常用的日期格式:
                YY:    两位数字年份
                RR:    两位数字年份 当数字为0~49时日期为本世纪,当日期为50~99时为上世纪
                具体:        点击查看
                YYYY:    四位数字年份
                MM:    两位数字月份
                MON:    简拼的月份
                MONTH:    全拼的月份
                DD:    两位数字的天
                DY:    周几的缩写
                DAY:    周几的全拼
                HH24:    24小时制小时
                HH12:    12小时制小时
                MI:    分钟
                SS:    秒

        add_months :几月后 MySQL不支持

        months_between :两月之间的时间 MySQL不支持

        next_day  :下星期几 几号 next_day(date,1),1指周日,2周一,以此类推。

        to_char: 将其他类型转化成字符            
            TO_CHAR(date[,fmt[,nlsparams]]):将日期类型数据date按照fmt的格式输出字符串。nlsparams用于指定日期语言。
            eg :
          

 SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual

        last_day:返回日期所在月的最后一天

        greatest,least:最大最小值

        EXTRACT(date FROM datetime) :从参数datetime中提取参数date指定的数据,比如提取年,月,日。
        eg:

-- 查看1980年入职的员工
SELECT ename,sal FROM emp WHERE EXTRACT(YEAR FROM hiredate)=1980

9.空值
    NULL与任何数字运算结果还是NULL
    NULL与字符串拼接等于什么都没干

    函数
        nvl :(数字,默认值)  如果数为null 返回默认值

        nvl2:(数字,返回结果1,返回结果2) 不为null 1 为null 2

        nullif(表达式1,表达式2) 表达式是否相等 相等 null 不等 表达式1

        decode(表达式,值1,返回值1,...)相当于if...else...语句

        case 表达式 when ... then ...
                when ... then ...
                ...
                else ... end


10.查询(单一表)
    基本查询
        略
    模糊查询
        like
        _指定个数字符
        %任意个数字符
        eg:第三位是L的:__L%
    
    any和all
        >any(list) 大于列表中最小的
        <any(list) 小于列表中最大的
        >all(list) 大于列表中最大的
        <all(list) 小于列表中最小的

    去重
         distinct:只有去重的功能

         group by:除了去重之外,还需为之后可能会运行的集合函数做准备;一般来说遇到单纯只要去重的情况不多,大多需要后续操作,因此个人感觉group by用的更多些。group by一般会下一章介绍的函数使用
    
    函数
        count
        sum
        avg
        max
        min
        median 中值
        variance 方差
        stddev 标准差

11.关联查询
    1.内连接
        

select
from
where 表1.列名=表2.列名
--或 
select
from 表1 join 表2 
on 表1.列名=表2.列名
where
--只会输出满足条件的数据

    2.左外连接
        Oracle特有的简单写法:

select
from 表1 ,表2 
where 表1.列名=表2.列名(+)

--或
select
from 表1 join 表2 
on 表1.列名=表2.列名(+)
where

 正常写法:
      

select
from 表1 left join 表2
on 表1.列名=表2.列名

        注:左外连接会输出左表所有的数据,如果不满足,来自右表的字段输出null

    3.右外连接:

与左外连接类似因此只写一个:

 select
 from 表1 join 表2 
 on 表1.列名=表2.列名(+)
 where

    4.全外连接
        full outer join 
    
    5.自连接
        from 表名 a,表名 b
        where a.字段名 =b.字段名

12.高级查询
    1.分页查询
    Oracle的分页查询是基于rownum的
    rownum是数据的列数
    ps:查询第3~第5条数据
        

--错误示例:
select * 
from test 
where rownum between 3 and 5

--正确实例:
select * 
from (
select rownum rn, ...
from test
) where rn between 3 and 5

        注:必须给rownum一个别名,不然还是查不出数据

    2.排序函数:
        1.ROW_NUMBER()OVER(PARTITION BY 字段名1 ORDER BY 字段名2)
        以字段名1进行分组,以字段名2进行排序,只是组内排名
        注:此函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一

        2.RANK()OVER(PARTITION BY 字段名1 ORDER BY 字段名2)
        以字段名1进行分组,以字段名2进行排序,只是组内排名
        注:此函数计算的值就表示每组内部排序后的顺序编号,组内相同数值则排名一致,且不连续(例:1 1 3 4 4 6)

        3.DENSE_RANK()OVER(PARTITION BY 字段名1 ORDER BY 字段名2)
        以字段名1进行分组,以字段名2进行排序,只是组内排名
        注:此函数计算的值就表示每组内部排序后的顺序编号,组内相同数值则排名一致,但是连续(例:1 1 2 3 3 4)
    
    3.集合操作
        1.UNION和UNION ALL并集
            相同点:
                用来获取两个或两个以上结果集的并集
            不同点:
                UNION操作符会自动去掉合并后的重复记录
                UNION ALL返回两个结果集中的所有行,包括重复的行
                UNION操作符对查询结果排序,UNION ALL不排序? 对于这点有点疑惑,动手实验了下也没发现UNION的排序效果
        
        2.INTERSECT交集
            
        3.MINUE差集
            结果集1中含有,并且不再结果集2中的数据

    4.高级分组函数(一般配合GROUP BY使用)
        1.ROLLUP

            GROUP BY ROLLUP(a,b,c)等价于
            select ... group by(a,b,c)
            union all
            select ... group by(a,b)
            union all
            select ... group by(a)
            union all
            select * from (无group by子句)就是原表


        
        2.CUBE
            group by cube(a,b,c)等价于 2^n(n为参数个数)个查询结果的并集,如下:

            select ... group by(a,b,c)
            union all
            select ... group by(a,b)
            union all
            select ... group by(a,c)
            union all
            select ... group by(b,c)
            union all
            select ... group by(a)
            union all
            select ... group by(b)
            union all
            select ... group by(c)
            union all
            select * from (无group by子句)就是原表


        
        3.GROUPING SETS
            GROUPING SETS运算符可以生成与使用单个GROUP BY 、ROLLUP或CUBE运算符所生成结果集相同的结果集,但GROUPING SETS使用起来更灵活
            GROUPING SETS列表可以包含重复的分组
            GROUPING SETS:每个参数是一种分组方式,然后将这些分组统计后并在一个结果集显示。
            如:

            select ... group by grouping sets((a,b,c),(a,b))等价于
            select ... group by(a,b,c)
            union all
            select ... group by(a,b)

资料来源:Oracle数据库基础(二)_Alive的博客-CSDN博客

                  Oracle数据库基础(三)(查询)_Alive的博客-CSDN博客

                  Oracle数据库基础(四)(高级查询)_Alive的博客-CSDN博客  

                   Oracle数据库中对2位年份的处理(即日期格式中YY和RR的区别)_Alive的博客-CSDN博客


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值