[MySQL] 프로그래머스 - Python 개발자 찾기

켈로그·2025년 6월 11일

SQL

목록 보기
16/20

문제 : 프로그래머스 - SQL 고득점 KIT - Python 개발자 찾기

문제 정보

DEVELOPER_INFOS 테이블에서
Python 스킬을 보유한 개발자의 ID, EMAIL, FIRST_NAME, LAST_NAME을 ID 기준 오름차순으로 조회하는 SQL을 작성하시오.


테이블 구조

Column nameTypeNullable설명
IDVARCHAR(N)NOT NULL개발자 고유 ID
FIRST_NAMEVARCHAR(N)NULLABLE이름
LAST_NAMEVARCHAR(N)NULLABLE성
EMAILVARCHAR(N)NOT NULL이메일
SKILL_1VARCHAR(N)NULLABLE첫 번째 기술
SKILL_2VARCHAR(N)NULLABLE두 번째 기술
SKILL_3VARCHAR(N)NULLABLE세 번째 기술

예시 데이터

IDFIRST_NAMELAST_NAMEEMAILSKILL_1SKILL_2SKILL_3
D165JeramiEdwardsjerami_edwards@grepp.coJavaJavaScriptPython
D161CarsenGarzacarsen_garza@grepp.coReact
D164KellyGrantkelly_grant@grepp.coC#
D163LukaCoryluka_cory@grepp.coNode.js
D162CadeCunninghamcade_cunningham@grepp.coVueC++Python

→ Python 보유자: D165, D162
→ 출력 결과:

IDEMAILFIRST_NAMELAST_NAME
D162cade_cunningham@grepp.coCadeCunningham
D165jerami_edwards@grepp.coJeramiEdwards

정답 1 - WHERE 절에서 OR 조건문 이용

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python' OR SKILL_2 = 'Python' OR SKILL_3 = 'Python'
ORDER BY ID;

🔍 포인트

  • OR 조건으로 각 컬럼을 직접 비교하여 Python 포함 여부를 판단
  • 명시적이고 직관적이며, 성능상 유리함
  • 하지만 컬럼 수가 많을 경우 비효율적일 수 있음

정답 2 - 열 병합(CONCAT_WS) 후 검색

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE CONCAT_WS(',', SKILL_1, SKILL_2, SKILL_3) LIKE '%Python%'
ORDER BY ID;

🔍 포인트

  • CONCAT_WS(',', ...)를 사용하여 모든 스킬을 하나의 문자열로 결합
  • 이후 LIKE '%Python%'로 검색
  • 코드가 간결하며 컬럼 수에 유연하게 대응 가능

문법 요약

CONCAT_WS(구분자, 열1, 열2, ...)

  • NULL 값을 무시하고 구분자(separator)로 문자열을 병합

예:

CONCAT_WS(',', 'A', NULL, 'C') 
-- 'A,C'

LIKE '%키워드%'

  • 부분 문자열 검색
  • %는 0개 이상의 임의 문자열을 의미
LIKE '%Python%' 
-- 'Python'이 포함된 문자열을 찾음

정리

방식장점단점
OR 방식명확하고 빠름컬럼 수가 늘면 코드 길어짐
CONCAT_WS + LIKE짧고 유연문자열 연산으로 성능 저하 가능
profile
호랑이기운

0개의 댓글