[SQL] 조건에 맞는 개발자 찾기

Ray·2025년 6월 10일

SQL

목록 보기
27/39

🔎 문제설명

  • 출처: 프로그래머스
  • 사용언어(RDBMS): SQL(MySQL)
  • 문제:

    DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요. 결과는 ID를 기준으로 오름차순 정렬해 주세요.




✅ 제출답안

# 풀이1 - 조인 후 조건을 걸어줌
SELECT DISTINCT(D.ID), D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS AS D JOIN SKILLCODES AS S 
    ON D.SKILL_CODE & S.CODE
WHERE S.NAME IN ('PYTHON', 'C#')
ORDER BY D.ID;

# 풀이2 - where문에서 조건을 걸어줌
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE SKILL_CODE & (SELECT SUM(CODE)
			             FROM SKILLCODES
			             WHERE NAME IN ('Python', 'C#'))
ORDER BY ID;

# 풀이3 - 조건을 걸어준 쿼리를 조인함
SELECT DISTINCT(D.ID), D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS AS D JOIN (SELECT CODE
						   FROM SKILLCODES
						   WHERE NAME IN ('PYTHON','C#')) AS S
			               ON D.SKILL_CODE & S.CODE 
ORDER BY D.ID



🚀 풀이기록

처음 이 문제를 접했을 때, code컬럼을 이진수로 변환하려는 시도를 했었다. 이후 &연산을 사용한 비트연산으로 문제를 풀어야 된다는 사실을 알게 되었고, 위와 같이 3가지 풀이법을 사용해 해결했다.
여기서 주의할 점은 풀이2에서는 Python과 C#에 해당하는 코드를 이미 합쳐주었기 때문에 하나의 값으로 결과가 나온다. 하지만 풀이1풀이3WHERE문에서 Python과 C#에 해당하는 튜플이 두 줄로 나온다. 따라서 JOIN 후에 같은 행이 중복으로 나타나는 걸 방지하기 위해(개발자가 Python과 C#스킬을 모두 가지는 경우) SELECT문에서 DISTINCT를 사용해주어야 한다.

추가적으로, 문제를 풀면서 JOIN의 ON절에 꼭 = 연산자뿐만 아니라 다양한 비교연산자(>,<,<=,>=), BETWEEN, LIKE, IN등 여러 연산자가 사용가능하다는 사실을 알게 되었다.

profile
미래의 독자인 나를 위해 글을 씁니다.

0개의 댓글