Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • class
  • 데이터
  • 하둡
  • 파이썬기초
  • MariaDB
  • sql
  • 코딩테스트
  • 선형대수
  • PYTHON
  • 코테
  • 백준
  • 머신러닝
  • 자료구조
  • AI
  • 프로그래밍
  • 파이썬
  • 객체
  • 빅데이터
  • 선형대수학
  • TensorFlow
  • 프로그래머스
  • 데이터사이언스
  • 객체지향
  • pytorch
  • Baekjoon
  • 알고리즘
  • 데이터베이스
  • 딥러닝
  • mysql
  • 인공지능

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

[SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의
SQL

[SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의

2024. 3. 25. 15:20
반응형

프로그래머스 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
    'SQL' 카테고리의 다른 글
    • [SQL] 중첩 질의 - 상관 중첩 질의와 존재 연산자 EXISTS (3)
    • [SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)
    • [SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1)
    • [SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스)
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바