sql 进阶笔记

in 和 exists 的区别:

A in/exists B ,exist 会遍历 A中的id,in是直接去内存中对比数据,所以length(A)比length(B)小的话,用exists快,否则用in。

子查询和多表联接的区别:

子查询都可以用多表联接实现,但是一般用多表联接比较好,因为执行快,容易理解。子查询也有优势:能与insert、update、delete联用。

With as 的用法:

例子:

with test1 as(select * from A),test2 as(select * from B)
select * from B where B.id in(select id from test1)
union all select * from test2

其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它,只做一次查询,反复使用,提高语言的运行效率,更加简洁容易理解。

1、同级只能定义with关键字只能使用一次,多个用逗号分割。

2、如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。(至少一个with查询的name未被引用,解决方法是移除未被引用的with查询),注意:只要后面有引用的就可以,不一定非要在主查询中引用,比如后面的with查询也引用了,也是可以的。

3、前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能嵌套with子句。

4、例子中union all,如果不加all,union会自动去除重复数据;有all,不会去重。

sql的执行顺序:

https://www.cnblogs.com/qanholas/archive/2010/10/24/1859924.html

case when then else end

https://www.jianshu.com/p/de2ca1907934

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值