Oracle数据库的知识点总结

1、ANSI 美国国家标准局

select e.empno, e.ename, d.loc from emp e, dept d
where e.deptno = d.deptno and substr(e.ename, 1, 1) = ‘S’;
等价于
select empno, ename, loc from emp join dept on emp.deptno =
dept.deptno where substr(emp.ename, 1, 1) = ‘S’;

2、关于排序:

1)ASC 和 DESC
ASC是升序排列
DESC是降序排列
NULL作为最大值存在,如果在降序排列中,NULL排列在第一个,然后依次往下降;
如果在升序排列中,NULL则在最后一个。
没写ASC或者DESC 则默认是升序排列
2)多列排序
当以多列作为排序标准时,首先第一列进行排序,如果第一列数据相同,则以第二列排序,依次类推。
注意:多列排序中,不管是正序还是倒叙,每个列需要单独设置排序方式。
SELECT ename,deptno,sal from emp order by deptno ASC,sal DESC;

3、聚合函数(分组函数、多行函数、集合函数)

在表中不能直接查询得到结果,而需要将现有的数据经过计算得到结果,
这种多行数据参与运算返回一行结果的计算方式就是聚合函数。
AVG和SUM等聚合函数的计算忽略表中的NULL值。
其他数据和NULL计算结果为NULL

4、count

select count(*) total_number from emp;
select count(job) total_job from emp;

5、分组

group by
having
having必须跟在group by的后面才能出现,having不能单独存在。

6、查询语句执行顺序

1.from 从后到前 从右到左。数据量较少的表尽量放在后面
|
2.where 从右到左 将能过滤最大记录的条件写在where子句的最右边
|
3.group by 从左往右分组 在group by之前用where将不需要分组的记录过滤掉。
|
4.having子句 消耗资源 尽量避免使用,having会在检索出所有记录之后才对结果集进行过滤,需要排序等操作
|
5.select 少用* 尽量取字段名,oracle在执行号时,会将转换成所有的列名,消耗时间
|
6.order by 执行顺序为从左到右 消耗资源

7、关联查询

1)内连接
内连接返回所有满足条件的记录
2)外连接
1>左外连接
在两表中关联字段中,将左表中的该字段中对应的每一条数据的信息显示出来,可包含重复的
2>右外连接
在两表中关联字段中,将右表中的该字段中对应的每一条数据的信息显示出来,可包含重复的
3>全外连接
在两表中关联字段中,两表中对应的字段都要显示出数据,每个关联都要有数据。
4>自连接

8、分页查询

ROWNUM 伪列
截取结果集中的部分数据
select from (select rownum rn,e* from emp e)
where rn between 8 and 10;

9、排序:

ROW_NUMBER
ROW_NUMBER() over(PARTITION BY col1 ORDER BY col2)
根据col1分组后根据col2排序,ROW_NUMBER()函数计算的值是结果集中每组内部数据排序编号,组内连续且唯一
rownum是伪列,而row_number是可以直接从结果集中查询出的。
跳跃排序
pank  组内如果有相同的排序编号为2 则下一位排序编号为4
连续排序
dense_pank   组内如果有相同的排序编号为2 则下一位排序编号为3

10、mysql和oracle中的行列换置

mysql:
  select name,sum(case when course='java' then grade end) java,
              sum(case when course='web' then grade end) web
              from user
oracle:
  decode函数decode(expr,search,result[,search,result...][default])
  用于比较字段数据中与查询条件符合的数据,返回result。

11、需要查询那个字段的信息条数 就用count(字段名)

如果需要查询的是特定小组的某个字段信息条数,就在最后加 group by(分组字段名) 即可
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值