buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

相关子查询与非相关子查询

子查询分相关子查询(Correlated Sub-Query)与非相关子查询(Uncorrelated Sub-Query)

--用户表
CREATE
TABLE [USER] ( USERID INTEGER NOT NULL,---用户ID COMPANYID INTEGER,---公司ID TELNO VARCHAR(12)---用户电话 ); --公司表 CREATE TABLE COMPANY ( COMPANYID INTEGER NOT NULL,---公司ID TELNO VARCHAR(12)---公司电话 ); INSERT [user] VALUES(1,100, '010-65432100') INSERT [user] VALUES(2,100, '13240471234') INSERT [company] VALUES(100,'010-12345678') --非相关子查询(Uncorrelated Sub-Query) SELECT * FROM [USER] WHERE COMPANYID IN ( SELECT COMPANYID FROM COMPANY WHERE TELNO='88888888' ); --相关子查询(Correlated Sub-Query) SELECT * FROM [USER] AS U WHERE EXISTS ( SELECT * FROM COMPANY AS C WHERE TELNO='88888888' AND U.COMPANYID=C.COMPANYID );



以上两条语句的用作是相同的,对比后我们发现,相关子查询的子句(也就是括号中的语句:SELECT * FROM COMPANY AS C WHERE
TELNO='88888888' AND
U.COMPANYID=C.COMPANYID)依赖外部语句的条件,不能单独执行;而非相关子查询的子句是可以单独执行的。

就以上这个例子来说,我们使用相关子查询无论从性能和可读性都不如非相关子查询。但有些情况,我们仍需使用相关子查询。

 

posted on 2012-06-06 17:02  buguge  阅读(275)  评论(0)    收藏  举报