0
点赞
收藏
分享

微信扫一扫

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

子查询分相关子查询(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)依赖外部语句的条件,不能单独执行;而非相关子查询的子句是可以单独执行的。

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

 

当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--​​buguge​​



举报

相关推荐

0 条评论