Как EXISTS работает в Oracle и чем он отличается от IN? - PullRequest
8 голосов
/ 16 января 2012

У меня проблемы с пониманием пункта «Существует» при чтении книги оракула.Вот 3 изображения, которые я взял из книги.

enter image description here Это 1-й оператор SQL, использующий предложение IN, у меня нет проблем с его пониманием.

enter image description here Это 2-йSQL-оператор, использующий предложение EXISTS, я не понимаю, почему он возвращает все строки, когда есть условие DEPTNO> 20.

enter image description here Это 3-й оператор SQL, который получает те же строки, что и1-й оператор sql, требуется дополнительное объединение двух таблиц, и я не могу его обосновать.

Я пробовал Google "EXISTS ORACLE", но большая часть страницы объясняет разницу между EXISTS и IN, но не объясняет, какEXISTS работаетРебята, не могли бы вы объяснить это?

Ответы [ 2 ]

11 голосов
/ 16 января 2012

Вот довольно подробное объяснение того и другого и того, как решить, какой из них использовать: http://www.techrepublic.com/article/oracle-tip-understand-the-difference-between-in-and-exists-in-subqueries/5297080

Exists проверяет, возвращает ли подзапрос результат.По сути, если вы должны были взять подзапрос и выполнить его самостоятельно, если он возвращает хотя бы одну строку, тогда условие выполняется.Третий запрос добавляет второе условие, которое связывает подзапрос с родительским запросом, таким образом, он проверяет, есть ли у конкретного человека отдел с deptno> 20

8 голосов
/ 16 января 2012

Второй запрос возвращает все строки, потому что он не коррелирован (связан) с первичной таблицей, а набор результатов больше 0. Третий запрос является коррелированным подзапросом (E.DeptNo =), поэтому он возвращает тот же результат, что и первый запрос.

Предложение EXIST говорит, что нужно выполнить запрос, останавливаясь, как только он находит первое совпадение. Если он находит совпадение, он возвращает истину, если нет, он возвращает ложь. Запрос не должен (и во втором случае - нет) быть связанным с основным запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...