2026.01.21. 15:44
문제 설명
SKILLCODES테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다.SKILLCODES테이블의 구조는 다음과 같으며,NAME,CATEGORY,CODE는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다. 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.NAMETYPEUNIQUENULLABLENAMEVARCHAR(N)YNCATEGORYVARCHAR(N)NNCODEINTEGERYN
DEVELOPERS테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다.DEVELOPERS테이블의 구조는 다음과 같으며,ID,FIRST_NAME,LAST_NAME,SKILL_CODE는 각각 개발자의 ID, 이름, 성, 이메일, 스킬 코드를 의미합니다.SKILL_CODE컬럼은 INTEGER 타입이고, 2진수로 표현했을 때 각 bit는SKILLCODES테이블의 코드를 의미합니다.NAMETYPEUNIQUENULLABLEIDVARCHAR(N)YNFIRST_NAMEVARCHAR(N)NYLAST_NAMEVARCHAR(N)NYEMAILVARCHAR(N)YNSKILL_CODEINTEGERNN
예를 들어 어떤 개발자의
SKILL_CODE가 400 (=b'110010000')이라면, 이는SKILLCODES테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.문제
DEVELOPERS테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.결과는 ID를 기준으로 오름차순 정렬해 주세요.
# PYTHON이나 C# 보유자
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM
DEVELOPERS A
WHERE (A.SKILL_CODE &
(SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')
) > 0
OR (A.SKILL_CODE &
(SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')
) > 0
ORDER BY ID256, 1024를 그대로 비교해야하는데 비트마스크 연산을 이용해야 한다.