sql语句在面试里面问道的问题:
sql的解析的顺序
1.where里面的条件是从右向左扫描解析
2.from里面的大表在前,小表在后,解析的顺序是从右向左解析。
3.left/right/inner join 链接基于hashjoin/loop/merge三种方式构建链接方式(最终翻译成oracle内部的一些函数)。
4.存储过程的有点就是sql解析完一次之后,以后就可以恭喜,不需要重新构建sql解析过程(执行计划,类似一个翻译的过程),在开发中我们也可以给予绑定变量,减少sql硬解析的开销。
5.物化视图/分区表
6.游标就是SQL语句执行过程中的一个内存区域的指针,比如存储过程里面常用的游标,但是游标比较消耗内存,占用资源,开销大。解决的方法可以使用临时表机制。
==========================================================================
rank 一般项目里面很少用,比较高级的语法 partion by 很好用,避免过多的group by
dense_rank
over
partition by
order by
===
rowid
===
rownum 常用
===
case when 常用
===
left join 常用(项目开发中大量使用left join 做一些报表查询,比较少使用子查询)
inner join 常用
===
exist in 用,但是不是很多,子查询使用不多,基本都是join连接
===
存储过程
临时表 存储过程常用----其实个人感觉存储过程一个就是游标,一个就是临时表存储数据
===
系统视图,部分开发场景要使用---比如开发一个类似于PL/SQL的客户端软件就需要一些系统特殊的视图以及Metedata元数据信息
===
触发器 少用----没办法了就是要触发器
===
自定义一些函数,也就是对oracle里面的函数进行封装成我们自己的函数,方便后期项目的维护