标签:
数据库:系统数据库
子查询的用法
子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。
如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 关于相关子查询,应该注意:
(1)NOT IN的相关子查询可以改用LEFT JOIN代替写法。比如:
SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOT IN (SELECT PUB_ID FROM TITLES WHERE TYPE = ‘BUSINESS‘)
我们用左外连接语句对上面的语句进行替换,先看下面的语句,PUBLISHERS 表与TITLES表进行左外连接
SELECT A.PUB_NAME,B.pub_id FROM PUBLISHERS A LEFT JOIN TITLES B ON B.TYPE = ‘BUSINESS‘ AND A.PUB_ID=B. PUB_ID
根据要求,我们只要查询出上面pub_id为空的就行,对语句进行如下改进:
(2)NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法。比如:
NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化
标签:
原文地址:http://www.cnblogs.com/firstdream/p/5654009.html