CODING TEST/MySQL

Lv2 - 조건에 맞는 개발자 찾기

iamyuunzo 2025. 7. 30. 19:26

📌 문제 정보

- 문제 이름 : 프로그래머스 - (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  EMAIL  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  EMAIL  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 ... )