[TIL] IN + 서브쿼리, 생각대로 쿼리 쓰기

Hanna Kim·2021년 1월 19일
0

SQL

목록 보기
11/11

sql에서 깊게 고민하지 않고 쓰기 편한 문법이 있다.
바로 in (서브쿼리) 형태이다.

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 + 단일조건으로 우선 구성해두곤 한다.

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'
            		)

조인은 가끔 복잡하게 고려해야 할 부분들이 있는데 서브쿼리는 비교적 단순하고 직관적으로 쓸 수 있어서 좋다.

물론 서브쿼리를 쓰는게 나쁜 선택인 경우도 있다. (이 내용은 다음에😆)

profile
쌓으며 배우는 중

0개의 댓글