-
[MySQL] in 연산자와 exists 연산자 의 차이프로그래밍/MySQL 2019. 12. 8. 12:47
Summary
in 연산자의 처리순서는 서브쿼리 -> 메인쿼리 이다.
따라서 서브에서 메인의 정보를 가져올 수 가 없기 때문에 조건을 각각 설정한다.
반면에,
exists 연산자는 처리순서가 메인쿼리 -> 서브쿼리 이다.
따라서 서브에서 메인의 정보를 가져와 모든 조건을 한번에 설정한다.
데이터 베이스 및 예제
< Q1. 데이터베이스에서 2013년 3월 15일에 제품을 주문한 고객의 고객이름을 검색해보자. >
In 연산자
문제를 in 연산자를 통해 풀어보면 아래와 같습니다.
In 연산자의 처리순서는 서브쿼리에서 메인쿼리순으로
코드만 봐도 서브쿼리에 메인쿼리의 내용이 포함되어 있지 않은것이 보입니다.
제가 In 연산자를 쉽게 익힐수 있었던 이유는 '=' 연산자와 사용법이 똑같기 때문입니다.
이 문제의 경우 단일행만을 검색하기 때문에 in 대신에 '=' 을 사용하여도 문제가 없습니다.
Exists 연산자
exists 연산자로 풀어보면 아래와 같습니다.
Exists 연산자의 처리순서는 메인쿼리에서 서브쿼리순입니다.
즉, 위에서 아래로 쭉 읽어오는 것이죠.
이게 바로 In 연산자와의 큰 차이인데요. In 연산자는 서브쿼리를 처리할때 메인쿼리의 정보가 입력되지 않았지만
Exists 연산자는 메인쿼리부터 처리를 하기 때문에 서브쿼리를 처리할때 모든 정보를 가지고 있습니다.
그래서 Exists 연산자를 사용하면 서브쿼리에서 모든 조건을 한번에 정해주는 방식으로 이해해주시면 됩니다.
코드를 보시면 메인에서는 속성만 결정해주고 서브쿼리에서 모든 조건을 수행하는 것을 볼 수 있습니다.