用exists代替in的用法

今天在讨论如何优化sql语句的时候,有一个用exists 代替in 的方案,但具体写的时候没有使用过,尝试了一下出错了

出错代码如下:

SELECT * FROM `emp` a 
where  exists(
SELECT * from emp t 
where t.id=11 
)

改正后如下:

SELECT * FROM `emp` a 
where  exists(
SELECT * from emp t 
where t.id=11 and a.id=t.id
)

具体的原因上网查阅说是exists后面跟的子查询是一个独立的查询系统;要加上一个能关联外查询的条件;

exists代替in的用法

附上如何优化SQL:
SQL语句优化:
1.建议少用‘*’代替所有列
2.用exists代替in
3.连表查询的时候尽量减少表的查询次数
4.用truncate代替delete(删除全表数据)
5.合理使用索引(详见索引)
6.sql语句尽量大写,Oracle会把所有语句转换成大写在执行
7.在保证语句完整的情况下,多使用commit(多用于begin…end中)
8.优化group by,将不需要的数据尽量在group by之前过滤掉,避免使用having
9.连表查询是尽量使用表的别名,减少解析时间
10.表连接在where之前,where条件能够过滤更多数据的条件放在最开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值