【问题标题】:SQL QUERY ON EXISTS CLAUSE存在子句的 SQL 查询
【发布时间】:2018-01-24 04:10:07
【问题描述】:

1) 查询:

SELECT INS_NAME
  FROM INSTRUCTOR 
 WHERE EXISTS(SELECT DEPT_NAME
                FROM DEPARTMENT
               WHERE DEPT_ID = INSTRUCTOR.DEPT_ID AND DEPT_BUILDING = 'JOHNS');

2) 查询:

SELECT INS_NAME
  FROM INSTRUCTOR 
 WHERE EXISTS(SELECT DEPT_NAME
                FROM DEPARTMENT
               WHERE DEPT_BUILDING = 'JOHNS');

代码 1 和 2 产生不同的输出,请帮助我理解原因。

(教师表)

ins_id ins_name dept_id ins_sal tax
27     DHIRAJ    4        200
28     RAHUL     4        500   
34     HIO       4        100    2
90     SURYA     5        120    30
33     VINNY     6        100    11

(部门表)

DEPT_BUILDING    DEPT_NAME  DEPT_ID
THOMAS           BIO       4
JOHNS            CHEM      5
JOHNS            CSE       6

【问题讨论】:

  • 有什么理由使用exists而不是join?
  • 您使用的是 MySQL 还是 MS SQL Server?不要标记未涉及的产品。
  • Salmon ,我只是在测试,没有其他理由不使用 join 。

标签: mysql sql sql-server


【解决方案1】:

第二个查询返回instructor 表中的所有记录,因为department 表中有2 条记录,其中DEPT_BUILDING='JOHNS'。因此,exists() 对每条记录都返回 true。

第一个查询仅返回 instructor 表中的最后 2 条记录,因为 exists() 还测试部门 id 中的匹配项,并且 4 号部门没有名为 johns 的建筑物。

【讨论】:

  • 是的,有区别。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2014-01-02
相关资源
最近更新 更多