小编Rav*_*ell的帖子

如何在不使用 DISTINCT 的情况下识别无法重写为 JOIN 的相关子查询?

我对 SQL 查询调优相当陌生。我一直在尝试了解如何编写等效的查询。在浏览J. Widom 教授的斯坦福在线视频讲座时,她提到了一些子查询,如果不JOIN使用DISTINCT. 例如,看这个:

  1. 4:45 / 20:13 - GPA 示例

    SELECT GPA
    FROM Student
    WHERE sID in (select sID from Apply where major = 'CS');
    
    Run Code Online (Sandbox Code Playgroud)
  2. 6:39 / 20:13 - 学生申请 CS 而不是 EE

    SELECT sID, sName
    FROM Student
    WHERE sID IN (select sID from Apply where major = 'CS')
      AND sID NOT IN (select sID from Apply where major = 'EE');
    
    Run Code Online (Sandbox Code Playgroud)

我的问题是如何知道使用子查询编写的 SQL 语句是否将具有使用连接编写的等效语句。我很舒服,如果在答案中,有人喜欢使用关系代数表示法。

我在网上搜索了很多,找不到合适的答案。

样本数据

Schema 和表创建(对于 PostgreSQL)如下,

CREATE TEMP TABLE college …
Run Code Online (Sandbox Code Playgroud)

join subquery

5
推荐指数
1
解决办法
621
查看次数

标签 统计

join ×1

subquery ×1