oracle常用sql总结
语法
1. SUM(<需要求和的字段,字段必须是数字类型>)
和count(<需要统计条数的字段>)
sum注意区分count,一个是根据字段里面的值求和,一个是根据条数求数据总条数
1 | -- 对所有用户的年龄进行累加求和 |
2. CASE WHEN <条件> THEN <满足条件的结果> ELSE <不满足条件的结果> END
CASE <条件字段> WHEN <值1> THEN <满足条件=值1的结果> WHEN <值2> THEN <满足条件=值2的结果> ... ELSE <不满足所有条件的结果> END
1 | --eg:查询年龄大于18的flag输出成年人,否则未成年人 |
3. DECODE(<条件字段>,<值1>,<满足条件=值1的结果>,<值2>,<满足条件=值2的结果>,....,<都不满足>)
1 | --将boy替换成男,girl替换成女,其他输出人妖,等效于case when |
4. NVL(<需要判断的字段>,<如果判断的字段为null输出的结果>)
1 | --数据为null的会替换成人妖 |
5. group by <分组的字段1,字段2...>
分组统计
select后面的字段=分组的字段+统计求和等字段,原理分组过后,查询不能查一个组有多个不同结果的字段,如果是相同的结果加入group by 字段1,字段2
1 | --按年龄分组统计各个年龄的总数 |
5. order by <排序字段> <desc/asc>
asc升序,desc降序
1 | --按时间升序 |
6. to_char(sysdate, 'yyyy-MM-dd')
格式化日期
1 | --sysdate获取当前日期,to_char格式化为天 |
7. round(<小数>,<保留小数点后位数>)
1 | --保留小数点后2位,输出33.33 |
8. left join
左连接
以左边为主,右边有就连接,没有就null
1 | select * from T_USER l left join T_USER r on l.AGE=r.FLAG; |
9. substr(<需要裁剪的字符串>,<开始位置>, <结束位置>)
1 | -- 输出2019 |
10. connect by
其他用法,获取树形数据(也就是父子关系)见google
rownum
数据库关键字,行数
1 | --生成1-10的序列 |
11. union <all>
两个结果集合并
有all 全连接,不去重,没有all 去重
1 | -- 输出1-4-1-4 |
12. ROLLUP 分组汇总
ROLLUP汇总分组排列在最后一条数据,但是数据头为null,可以通过null判断取别名为总数
1 | SELECT nvl(CASE |
13. ||
字符连接符
用于单位,用于多条数据拼接
1 | select 'sex是'||u.SEX||',年龄是'||u.AGE as detail from T_USER u; |
示例数据
1 | create table T_USER |