SQL_Programmers 코딩 테스트 2

DA_LEESUNHO·2025년 10월 30일

Practice & Project

목록 보기
2/5

학습사이트 > https://school.programmers.co.kr/

특정 세대의 대장균 찾기

SELECT
    ID
FROM
    ECOLI_DATA
WHERE
    PARENT_ID
    IN (
        SELECT
            ID
        FROM
            ECOLI_DATA
        WHERE
        PARENT_ID
        IN (
            SELECT
                ID
            FROM
                ECOLI_DATA
            WHERE
            PARENT_ID IS NULL
            )
        )
ORDER BY ID

해당 문제에서 포인트는 중첩 서브 쿼리 였다.
"WHERE / HAVING (조건 절)에 사용되는 서브쿼리" 를 칭함

  • 서브쿼리의 결과에 따라 달라지는 조건 절
  • (비) 상관 서브쿼리 개념
구분설명
상관 서브쿼리메인 쿼리의 컬럼을 참조하여, 각 행마다 반복 실행
'비상관 서브쿼리'메인 쿼리와 독립되어, 먼저 실행 후 결과를 메인 쿼리에 전달

쉽게 말해서,
상관 서브쿼리메인 쿼리없이 동작이 불가한 서브 쿼리이며,
비상관 서브쿼리메인 쿼리없이도 동작이 가능한 서브 쿼리다.

해당 문제에서 반복적으로 결과 값을 추출,
원하는 최종 결과 값을 메인 쿼리에 사용할 수 있도록 하는 것이 관건이었다.

RETRY> 멸종위기의 대장균 찾기

도저히 모르겠다. 확인해보니 LV5 문제라 추후 재시도 예정...

가장 큰 물고기 10마리 구하기

SELECT
    ID, LENGTH
FROM
    FISH_INFO
ORDER BY
    LENGTH DESC, ID ASC
LIMIT 10

오랜만의 쉬운 문제로 숨통이 트였다.
해당 문제에서 포인트는 LIMIT 구문 이었다.
"표기되는 출력의 행 표기를 제한하는 구문"

  • 실무) 쿼리를 날릴 때 자원 관리를 위해 사용

특정 물고기를 잡은 총 수 구하기

SELECT
    COUNT(a.ID) AS FISH_COUNT
FROM
    (
    SELECT
        A.ID, A.FISH_TYPE, B.FISH_NAME
    FROM
        FISH_INFO AS A
    LEFT JOIN
        FISH_NAME_INFO AS B ON A.FISH_TYPE = B.FISH_TYPE
    ) a
WHERE a.FISH_NAME IN ('BASS','SNAPPER')

한 번에 쿼리를 날려 성공했다..
해당 문제에서 포인트는 JOIN, 서브쿼리 였다.
1) LEFT JOIN 을 통해 A 테이블 기준 공통 컬럼으로 결합하고,
2) 서브 쿼리화
3) 서브 쿼리에서 생성된 테이블(a)를 이용해 조건 절을 통한 원하는 값 출력

profile
성장과 회고를 기록하는 일기장

0개의 댓글