SQL的别名和SQL的执行顺序和SQL优化

致敬原文:https://www.cnblogs.com/cindy-cindy/p/6798010.html

SQL的别名

1、不可以在where子句中使用列名的别名,即select name t from emp where t>2999;是不允许的

2、使用别名的好处:

提高SQL的易读性

提高SQL的解析执行效率

语法检查

语义检查

共享池检查

生成执行树

执行

3、SQL的硬解析和软解析?

SQL的执行顺序

1、from语句–where语句–group by语句–having语句–select语句–order by语句

rownum的使用

select * from emp rownum<=2 /查找emp表的前两条记录/

select * from (select rownum t,ename from emp) m

where m.t>=5 and m.t<=10 /查询某个范围的记录,先查询出rownum并保存为临时表m,再进行查询/

where和having的区别?

where对分组前的小组内的详细信息进行过滤

having对分组后的信息进行过滤

内连接,外连接,自连接?

SQL优化(这里可以借鉴)

1、避免使用select * ,而是具体指出选择哪些列

2、SQL大小写,数据库在解析sql时,先把SQL语句转换为大写,再进行解析操作,所以建议直接提供大写的SQL语句。

3、过滤时,>和>=,使用>=优先,如a>2000和a>=2001,这样可以避免过滤2000和2001之间的小数,可以调高效率

4、where子句中,不等于判断会使索引失效。

5、where子句中,对列做运算,例如,加减乘除,会使索隐列失效。所以尽量不要在索隐列上做操作。

6、模糊查询时,like “%abc%”,前模糊会导致索引失效,后模糊不会导致索引失效。

7、in和exists的区别?

1、in适合内表小外表大的情况,select * from emp where emp.deptno in (select deptno from dept)

2、exists适合外表小内表大的情况.如此运用可提升效率

注:由于两者对表的连接方式不同,导致以上区分,in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

8、not in 和 not exists 用法同上

9、某些情况下可以使用exists替换distinct。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值