[SQL 풀기] 26년 3회차 01.26~01.30

📅 2026.01.29 (목) - ROOT 아이템 구하기

🔍 문제 정보

📝 문제 요약

ROOT 아이템(부모가 없는 아이템)의 ID와 이름을 조회하고, 아이템 ID 기준 오름차순으로 정렬합니다.

💻 SQL 풀이

SQL
 
SELECT
    ITEM_ID,
    ITEM_NAME
FROM ITEM_INFO
-- ITEM_TREE 테이블에서 부모 ID가 NULL인 (ROOT) 아이템 ID만 필터링
WHERE ITEM_ID IN (
    SELECT ITEM_ID 
    FROM ITEM_TREE 
    WHERE PARENT_ITEM_ID IS NULL
)
ORDER BY ITEM_ID ASC;

💡 풀이 노트

  • ITEM_TREE 테이블의 PARENT_ITEM_ID가 NULL인 데이터가 바로 최상위인 ROOT 아이템입니다.
  • 서브쿼리를 활용해 조건에 맞는 ITEM_ID 리스트를 먼저 추출한 뒤, ITEM_INFO 테이블에서 정보를 가져왔습니다.

📅 2026.01.30 (금) - Python 개발자 찾기

🔍 문제 정보

📝 문제 요약

개발자 스킬 정보(SKILL_1, SKILL_2, SKILL_3) 중 하나라도 'Python'이 포함된 개발자의 정보를 조회합니다.

💻 SQL 풀이 01: CONCAT_WS 활용

여러 컬럼을 하나로 합쳐서 한 번에 검색하는 방식입니다.

SQL
 
SELECT
    ID,
    EMAIL,
    FIRST_NAME,
    LAST_NAME
FROM DEVELOPER_INFOS
-- 여러 스킬 컬럼을 콤마(,)로 연결 후 PYTHON 키워드 검색
WHERE UPPER(CONCAT_WS(',', SKILL_1, SKILL_2, SKILL_3)) LIKE '%PYTHON%'
ORDER BY ID ASC;

💻 SQL 풀이 02: OR 조건 활용

가장 직관적으로 각각의 컬럼을 검사하는 방식입니다.

SQL
 
SELECT
    ID,
    EMAIL,
    FIRST_NAME,
    LAST_NAME
FROM DEVELOPER_INFOS
WHERE (
    SKILL_1 LIKE '%PYTHON%'
    OR SKILL_2 LIKE '%PYTHON%'
    OR SKILL_3 LIKE '%PYTHON%'
)
ORDER BY ID ASC;

💡 풀이 노트 및 TIL (Today I Learned)

  • CONCAT_WS: 문자열을 결합할 때 NULL 값은 자동으로 제외하고 결합해 주기 때문에 유용합니다.
  • MySQL 대소문자 구분:
    • 기본적으로 MySQL의 LIKE는 대소문자를 구분하지 않습니다. (설정에 따라 다를 수 있음)
    • 더 확실하게 검색하기 위해 UPPER() 함수를 사용하거나, 반대로 정확한 구분이 필요할 때는 BINARY 키워드를 사용합니다.
  • WHERE 1: 쿼리 작성 시 조건을 추가하거나 주석 처리하기 편하게 WHERE 1을 쓰기도 하지만, 실무에서는 가독성을 위해 괄호와 들여쓰기로 조건을 명확히 하는 것이 좋습니다.