Вопрос о подзапросах, почему существует необходимость в предложении IN - PullRequest
1 голос
/ 08 июля 2019

Вот код:

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 Ответ

1 голос
/ 08 июля 2019

Если id не является уникальным, существует разница между двумя запросами.

Второй запрос однозначно возвращает всех клиентов с зарплатой выше 4500. Первый запрос возвращает всех клиентов, у которых естьстрока, где их зарплата была выше 4500 - например, если таблица представляет всю историю изменений зарплаты, вы получите все строки для клиентов, у которых когда-то была зарплата больше 4500.

Если id уникален, использование такого предложения in действительно избыточно.

...