📌 문제 정보
- 문제 이름 : 프로그래머스 - (SELECT) 조건에 맞는 개발자 찾기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/276034
📌 문제 요약
- SKILLCODES 테이블 : NAME, CATEGORY, CODE (스킬의 코드는 2진수 표현 시 각 bit로 구분될 수 있게 2의 제곱수로 구성)
- DEVELOPERS 테이블 : ID, FIRST_NAME, LAST_NAME, EMAIL, SKILL_CODE (컬럼 INTEGER, 2진수 표현 시 각 bit는 SKILLCODES 테이블의 코드를 의미)
- DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요. 결과는 ID를 기준으로 오름차순 정렬해 주세요.
예시)
| NAME | CATEGORY | CODE |
| C++ | Back End | 4 |
| JavaScript | Front End | 16 |
| Java | Back End | 128 |
| Python | Back End | 256 |
| C# | Back End | 1024 |
| React | Front End | 2048 |
| Vue | Front End | 8192 |
| Node.js | Back End | 16384 |
| ID | FIRST_NAME | LAST_NAME | SKILL_CODE | |
| D165 | Jerami | Edwards | jerami_edwards@grepp.co | 400 |
| D161 | Carsen | Garza | carsen_garza@grepp.co | 2048 |
| D164 | Kelly | Grant | kelly_grant@grepp.co | 1024 |
| D163 | Luka | Cory | luka_cory@grepp.co | 16384 |
| D162 | Cade | Cunningham | cade_cunningham@grepp.co | 8452 |
출력)
| ID | FIRST_NAME | LAST_NAME | |
| D162 | cade_cunningham@grepp.co | Cade | Cunningham |
| D164 | kelly_grant@grepp.co | Kelly | Grant |
| D165 | jerami_edwards@grepp.co | Jerami | Edwards |
📌 내 풀이 및 코드
SELECT d.ID, d.EMAIL, d.FIRST_NAME, d.LAST_NAME
FROM DEVELOPERS d
WHERE EXISTS (
SELECT 1
FROM SKILLCODES s
WHERE (d.SKILL_CODE & s.CODE) > 0
AND s.NAME IN ('Python', 'C#')
)
ORDER BY d.ID ASC;
- 처음 조건문을 쓸 때는 WHERE s.NAME = 'Python' OR s.NAME = 'C#' 이런 식으로 썼었는데, DEVELOPERS 테이블에 s.NAME 컬럼이 없고 SKILL_CODE라는 숫자 한 개만 있기 때문에, SKILLCODES 테이블과 연결이 필요했음.
- JOIN SKILLCODES s ON (d.SKILL_CODE & s.CODE) > 0 이렇게 써야 개발자의 SKILL_CODE 숫자 안에 s.CODE가 들어있는지 확인할 수 있는데, 이렇게 쓰면 같은 개발자가 두 줄 이상 나올 수 있기 때문에 정답은 1명인데 2명이 된 것처럼 보여서 오답.
- SELECT 1 : 어떤 값이 있는지만 보고 값 자체는 쓰지 않음. 1 대신 *, 9999, 'banana' 이런식으로 써도 다 가능함.
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** EXISTS 연산 **
- 이 안에 무언가 존재하면 TRUE, 없으면 FALSE라고 판단하는 조건문.
- 있냐 없냐만 판단하기 때문에 중복없이 조건 만족 여부만 확인할 때 매우 깔끔함.
WHERE EXISTS ( SELECT ... FROM ... WHERE ... )
'CODING TEST > MySQL' 카테고리의 다른 글
| Lv2 - 노션별 평균 역 사이 거리 조회하기 (0) | 2025.08.01 |
|---|---|
| Lv2 - 조건에 맞는 사원 정보 조회하기 (0) | 2025.08.01 |
| Lv2 - 업그레이드 된 아이템 구하기 (0) | 2025.07.30 |
| Lv2 - 자동차 평균 대여 기간 구하기 (0) | 2025.07.29 |
| Lv2 - ROOT 아이템 구하기 (0) | 2025.07.29 |
