문제 출저
https://school.programmers.co.kr/learn/courses/30/lessons/276034
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
개발자 정보를 담은 테이블인 DEVELOPERS와 프로그래밍 언어에 대한 정보를 담은 테이블인 SKILLCODES가 주어집니다. Python, C# 둘 중 하나를 보유한 개발자의 ID, EMAIL, FIRST_NAME, LAST_NAME을 ID 순으로 조회해야 합니다.
먼저 DEVELOPER의 SKILL_CODE와 SKILLCODES의 CODE를 조인합니다.
조건절인 WHERE문을 사용하여 SKILLCODES의 NAME이 Python, C# 인 것을 찾습니다.
이 때, Python, C#을 모두 보유한 개발자는 두 번 조회하므로 DISTINCT를 사용하여 중복을 줄입니다.
SQL
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 > 0
WHERE
S.NAME IN ('Python', 'C#')
ORDER BY
D.ID
# Python, C# 둘 다 가진 개발자는 두 번 나오므로 DISTINCT를 사용하여 중복을 제거한다.
# 다른 풀이
# SELECT DISTINCT B.ID, B.EMAIL, B.FIRST_NAME, B.LAST_NAME
# FROM SKILLCODES A
# JOIN DEVELOPERS B ON (A.CODE & B.SKILL_CODE) > 0
# WHERE A.NAME = 'Python' OR A.NAME = 'C#'
# ORDER BY B.ID;
# SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
# FROM DEVELOPERS
# WHERE SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
# OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
# ORDER BY ID;