📅 2026.01.29 (목) - ROOT 아이템 구하기
🔍 문제 정보
- 출처: https://school.programmers.co.kr/learn/courses/30/lessons/273710
- 문제명: ROOT 아이템 구하기
- 핵심 키워드: JOIN, SUBQUERY, IS NULL
📝 문제 요약
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 개발자 찾기
🔍 문제 정보
- 출처: https://school.programmers.co.kr/learn/courses/30/lessons/276013
- 문제명: Python 개발자 찾기
- 핵심 키워드: LIKE, CONCAT_WS, OR, 대소문자 구분
📝 문제 요약
개발자 스킬 정보(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을 쓰기도 하지만, 실무에서는 가독성을 위해 괄호와 들여쓰기로 조건을 명확히 하는 것이 좋습니다.
'Work&Skill > SQL' 카테고리의 다른 글
| [SQL 풀기] 26년 5회차 02.09~02.13 (0) | 2026.02.19 |
|---|---|
| [SQL 풀기] 26년 4회차 02.02 ~ 02.06 (0) | 2026.02.09 |
| [SQL 풀기] 26년 2회차 01.19~01.23 (0) | 2026.01.29 |
| [SQL 풀기] 26년 1회차 01.12~0.16 (0) | 2026.01.18 |
| 「#매일 SQL」 문제 풀이 (0) | 2025.11.27 |