【Oracle】常见函数、用法(部分)

本文介绍了SQL查询的基础知识,包括执行顺序、笛卡尔积的概念、DECODE函数的使用方法、外连接的特点、子查询注意事项及exists的应用。同时,还探讨了rownum与rowId的区别,case when语句的应用,以及日期格式转换函数to_date和to_char的用法。此外,文章还讲解了集合运算中的差集、交集操作,并讨论了count函数的不同用法及其对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无论MySQL/SQL server/还是Oracle 关系型数据库嘛、赶脚语法都差不多但是也各有千秋,所以不说废话了,总得来说学习成本不是很高

 

SQL执行顺序

    from    where    group by      having     select    rownum     order by

 

笛卡尔:两张表的乘积

 

DECODE函数:特有函数计算方式 ***

     语法:【百度一下科

          DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

          Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。

DECODE(VALUE,'0','1','2')"row_name"
若value为0,则为1,否则为2,此值被展示在row_name列

 

连接:特此说明外连接

       左外连接:left join 左表中所有记录,如果右表无对应记录则显示空(笛卡尔积基础上 自己的理解);右同左

 

子查询:

      注意null值,where语句限制,创建时not null

 

exists:

rownum:系统自动生成的一列,标识行号

      oracle特有,起始值1(查询出结果后+1);最好不要做大于号判断

rowId:每行记录所存放的真实物理地址

 

case when语句:

      计算条件列表并返回多个可能结果表达式之一【


CASE
WHEN Boolean_expression THEN
    result_expression [...n ] [
ELSE
    else_result_expression

END

     简单来说和代码用到的CASE是一样的


SELECT
    CASE
WHEN parent_id < 3 THEN
    '<3'
WHEN parent_id >= 3
AND parent_id < 5 THEN
    '>=3 && <5'
ELSE
    '>=5'
END AS parent_id_new ,
count(*) AS num_count ,
parent_id ,
type_id ,
type_name
FROM
    tdb_goods_types
GROUP BY
    parent_id_new
ORDER BY
    num_count

转换函数:【

to_date():将字符串类型按格式转化为日期类型

YYYY:四位表示的年份 
YYY,YY,Y:年份的最后三位、两位 一位,缺省为当前世纪 
MM:01~12的月份编号 
MONTH:九个字符表示的月份,右边用空格填补 
MON:三位字符的月份缩写 
WW:一年中的星期 
D:星期中的第几天 
DD:月份中的第几天 
DDD:年中的第几天 
DAY:九个字符表示的天的全称,右边用空格补齐 
HH,HH12:一天中的第几个小时,12进制表示法 
HH24:一天中的第几个小时,取值为00~23 
MI:一小时中的分钟 
SS:一分钟中的秒 
SSSS:从午夜开始过去的秒数 

to_date('2018-07-29 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 

24小时格式下时间范围为: 0:00:00 - 23:59:59.... 
12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 

to_char():将日期转按一定格式换成字符类型 

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual; 

1、next_day函数 
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 

2、add_months()用于从一个日期值增加或减少一些月份 

select add_months(sysdate,12) "Next Year" from dual; 

3、months_between()判断两个日期之间的月份数量 

TO_NUMBER函数将字符转换为数字 

TO_CHAR 和 TO_DATE的一些用法总结

count(1):1查询的表里的第一个字段

 

集合运算

差集: minus结果相减(不包含)

(运算中多个sql语句)列的类型一致,按顺序写、(查询)列的数量一致 如果没有*列 空值会对应类型的*

交集:union 去除重复并排序    union all不会去除重复的

优化:

1、关于count(1)/count(*)count(列名)的区别【

     count(*) count(列名) 消耗资源是一样的,但是他们不是等价的:count(*)针对全表,count(列)针对一列、如果列值为空则不会统计这一行;

     列的偏移量决定性能,列靠后、开销大;count(*)算法与列偏移量无关,所以最快

     越常用的列,越靠前

 

oracle子查询实现分页

 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值