sql in 연산자는 expr (값)이 집합에 속하는지 테스트 하는 연산자입니다. 몇 가지 예제를 보면서 알아보도록 하겠습니다.
in 연산자
먼저 in 연산자는 보통 아래 포맷으로 많이 씁니다.
- expr in set
- expr이 set에 포함되어 있으면 true, 아니면 false
1번 쿼리에서 expr은 ‘a’였습니다. 그리고 set A에는 ‘a’, ‘b’, ‘c’가 있습니다. expr ‘a’는 A에 포함되어 있나요? 포함되어 있습니다.
따라서 결과는 참이 나옵니다.
not in 연산자
반면 not in 연산자는 value가 포함되어 있지 않으면 참이고, 포함되어 있으면 거짓입니다. in과 결과가 반대입니다.
2번 쿼리는 not in 연산자가 있습니다. expr 값이 ‘a’였습니다. 그리고 set B는 ‘a’, ‘b’, ‘c’를 포함하고 있습니다. ‘a’가 set B에 없나요? 아닙니다. 하나 있습니다. 따라서 결과는 거짓이 나오겠지요.
결과 또한 거짓이 나옴을 볼 수 있습니다. 여기까지 내용을 정리해 봅시다.
- expr in set
- expr이 set에 속하면 true, 속하지 않으면 false
- expr not in set
- expr이 set에 속하지 않으면 true, 속하면 false
어렵지 않지요? 그러면 실전 쿼리로 들어갑니다.
쿼리 예제
먼저 book의 title이 ‘com’과, ‘math’인 레코드 들을 book table에서 찾아보겠습니다. book 테이블에서 찾아야 하니, from 절에는 book이 들어가겠지요. 그리고, where 절에는 title in (‘com’, ‘math’) 를 입력해 주면 됩니다.
위에서 설명한 것을 그대로 쿼리로 옮기면 그림 5와 같습니다. 실행해 볼까요?
title이 com인 책과, math인 책에 대한 정보가 나옵니다.
이제 sub query가 들어간 4번 쿼리를 보겠습니다. ‘com’이 집합 S에 속해 있는지 보라고 합니다. 그런데, S가 뜬금없이 어떻게 나와 있나요?
- select title from book
이라고 나와 있어요. 이건 무엇을 의미하나요? book 테이블로부터 title들을 모두 뽑아오라는 의미입니다. 이렇게 column이 1개인 것을 뽑아서, in 절의 입력에 넣는 것입니다.
이 제목들을 보니까, ‘com’, ‘pu’, ‘book’이 있습니다. 결국, 괄호 안에 있는 select title from book에 의해, in 이하의 절은 ‘com’, ‘pu’, ‘book’이 속해있는 집합이 됩니다. 이제, ‘com’이 ‘com’, ‘pu’, ‘book’을 담고 있는 집합에 속해 있는지 물어보는 것으로 바뀌었네요?
‘com’은 ‘com’, ‘pu’, ‘book’을 담고 있는 집합에 속해 있으므로 참이 리턴됩니다.