sql에서 깊게 고민하지 않고 쓰기 편한 문법이 있다.
바로 in (서브쿼리)
형태이다.
우선 기본부터 설명하자면, in은 where 절에서 컬럼의 값과 일치하는지 확인할 대상이 여러 개일때 유용하다.
select *
from table
where columnA = 3 or columnA = 4 or columnA = 5
위의 쿼리처럼 or을 활용해서 작성할 수 있지만 값이 많아질 수록 쿼리가 길어져 가독성이 떨어진다.
in을 활용하면 이 문제가 해결된다. ⬇
select *
from table
where columnA in (3,4,5)
not in도 있다.
select *
from table
where columnA <> 3 or columnA <> 4 or columnA <> 5
이렇게 간단하게 쓸 수 있다 ⬇
select *
from table
where columnA not in (3,4,5)
다중 조건이 아니어도 작동한다.
select *
from table
where columnA not in (3)
나는 조건이 여러 개 들어가야 할 것 같은데 아직은 잘 모르겠을때 종종 in + 단일조건으로 우선 구성해두곤 한다.
서브쿼리와 함께 사용하는 법을 알아보기 위해 아래와 같은 두 테이블을 생각해보자
A에는 직원의 이름과 직위가, B에는 나이와 성별이 포함되어있다.
만약 여성 직원의 이름과 직위를 알고 싶다면?
employee_ID로 두 테이블을 조인해서 B.gender로 조건을 거는 것도 가능하다. 그렇지만 설명을 위해서 in (서브쿼리)
형태를 사용해보자.
먼저 B 테이블에서 gender 정보를 활용하여 gender = 'F'인 employee_ID를 조회한다.
select employee_ID
from B
where gender = 'F'
해당 쿼리의 결과로 101, 123이 출력될 것이다.
A 테이블의 where 절에 다중 조건으로 employee_ID가 101,123인 직원을 조회하면 원하는 결과를 얻을 수 있다.
select *
from A
where employee_ID in (101, 123)
서브쿼리를 사용해서 다시 작성해보면 아래와 같다.
101, 123
을 쿼리로 대체하는 셈이다.
select *
from A
where employee_ID in (
select employee_ID
from B
where gender = 'F'
)
조인은 가끔 복잡하게 고려해야 할 부분들이 있는데 서브쿼리는 비교적 단순하고 직관적으로 쓸 수 있어서 좋다.
물론 서브쿼리를 쓰는게 나쁜 선택인 경우도 있다. (이 내용은 다음에😆)