반응형
프로그래머스 Lv1 다음 문제를 풀어보자.
FISH_INFO와 그리고 FISH_NAME_INFO 두 개의 테이블이 존재하고, join을 활용하면 쉽게 풀리는 문제이다.
하지만 단순하게 하나의 SQL 방법에 의존하게 되면, 향후 복잡한 쿼리를 사용할 때 제한적인 생각에 갇힐 수도 있다.
따라서 상관 중첩 질의를 이용해서도 풀이를 작성해놨다. (상관 중첩 질의 내용 포스팅은 여기로)
Join 문을 이용한 코드
SELECT count(*) AS FISH_COUNT
FROM fish_info as f
INNER JOIN fish_name_info as n
ON f.fish_type = n.fish_type
WHERE n.fish_name in ('BASS', 'SNAPPER')
;
위 코드는 단순하게 전체 결과를 count하는데, 해당 결과는 fish_name이 'bass'이거나 'snapper' 인 경우이며, FISH_INFO에 존재하는 레코드 중 fish_type이 fish_name_info에 존재하는 레코드의 fish_type 속성과 연결한 뒤 결괏값을 select하는 방식이다.
상관 중첩 질의 EXISTS 활용
SELECT count(*) AS FISH_COUNT
FROM fish_info as f
WHERE EXISTS(
SELECT *
FROM fish_name_info as n
WHERE (f.fish_type = n.fish_type) AND (n.fish_name IN ('BASS', 'SNAPPER'))
)
;
위 코드는 직접적인 JOIN을 하지 않고, 하위 질의를 활용하여 두 테이블 모두 활용해주었다.
EXISTS는 하위 질의에서 TRUE인 레코드에 한정해서 결괏값을 제한하고, 위에 작성된 하위 질의는 'bass' 또는 'snapper'인 경우와 fish_type이 양 테이블에 값이 같아야한다는 부분을 명시하고 있다. 해당 내용에 걸리지 않는다면 EXISTS 문을 통해 자연스럽게 걸러진다.
추후 실무에서 복잡한 쿼리를 다룰 때, EXISTS는 시간상의 이득을 상당히 가져다줄 수 있는 검색 기법이다.
잘 숙지하고, 활용 방안을 생각하면 도움이 되리라 생각한다!
반응형
'SQL' 카테고리의 다른 글
[SQL] 중첩 질의 - 상관 중첩 질의와 존재 연산자 EXISTS (3) (0) | 2024.03.21 |
---|---|
[SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2) (0) | 2024.03.20 |
[SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1) (0) | 2024.03.20 |
[SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스) (0) | 2024.03.18 |