SQL Join和Sub查询混淆

时间:2013-08-27 06:00:36

标签: sql sql-server

SELECT familyname 
FROM dtoohey.patient, DTOOHEY.account, dtoohey.doctor 
WHERE dtoohey.account.patientID = dtoohey.patient.patientid 
  AND dtoohey.doctor.providerno = DTOOHEY.account.providerno 
  AND dtoohey.doctor.name = 'Dr Brian';

SELECT familyname 
FROM dtoohey.patient 
WHERE patientid IN (
          SELECT patientid 
          FROM dtoohey.account 
          WHERE providerno IN (
              SELECT providerno 
              FROM dtoohey.doctor 
              WHERE name = 'Dr Brian'
          )
);

这两者有什么区别?两者都给出了不同的结果。

2 个答案:

答案 0 :(得分:1)

执行计划的主要区别。可能此查询可能更有效 -

SELECT familyname
FROM dtoohey.patient p
WHERE EXISTS(
    SELECT 1 
    FROM dtoohey.account a
    JOIN dtoohey.doctor d ON d.providerno = a.providerno
    WHERE a.patientID = p.patientid
        AND d.Name = 'Dr Brian'
)

答案 1 :(得分:1)

大多数时候加入比子查询更快但不总是,我在几天前遇到了一个问题,我有7个连接,执行时间大约需要50秒,我用子查询替换了两个连接(两个加入我怀疑导致延迟的事情,并且下降到1秒。

以下是一些可以帮助您的链接:

  1. Join vs. sub-query
  2. when to use which