有关子查询的问题,为什么需要IN子句

时间:2019-07-08 12:59:12

标签: sql sql-server select sql-in

这是给定的代码:

SELECT * 
FROM CUSTOMERS
WHERE ID IN (SELECT ID FROM CUSTOMERS 
WHERE SALARY > 4500);

为什么我们不能简单地写:

SELECT *
FROM CUSTOMERS
WHERE SALARY > 4500;

这是另一个代码:

SQL>

INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS 
WHERE ID IN (SELECT ID 
FROM CUSTOMERS);

同样,我不理解该子查询的要点,如果我要编写,它不会带来相同的结果-

INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS;

1 个答案:

答案 0 :(得分:1)

如果id不是唯一的,则两个查询之间是有区别的。

第二个查询清楚地返回所有薪水高于4500的客户。第一个查询返回所有薪水高于4500的行的客户-例如,如果该表代表所有薪金变化的历史记录,则一次获得薪水大于4500的客户的所有行。

如果id是唯一的,那么使用这样的in子句确实是多余的。