티스토리 뷰

728x90

비트연산자를 활용해 해결하는 문제입니다.

 

[문제]

SKILLCODES 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다. SKILLCODES 테이블의 구조는 다음과 같으며, NAME, CATEGORY, CODE는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다. 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.

NAME VARCHAR(N) Y N
CATEGORY VARCHAR(N) N N
CODE INTEGER Y N

 

DEVELOPERS 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다. DEVELOPERS 테이블의 구조는 다음과 같으며, IDFIRST_NAMELAST_NAMEEMAILSKILL_CODE는 각각 개발자의 ID, 이름, 성, 이메일, 스킬 코드를 의미합니다. SKILL_CODE 컬럼은 INTEGER 타입이고, 2진수로 표현했을 때 각 bit는 SKILLCODES 테이블의 코드를 의미합니다.

ID VARCHAR(N) Y N
FIRST_NAME VARCHAR(N) N Y
LAST_NAME VARCHAR(N) N Y
EMAIL VARCHAR(N) Y N
SKILL_CODE INTEGER N N

 

예를 들어 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.

 

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

 

결과는 ID를 기준으로 오름차순 정렬해 주세요.


[정답]

select a.id, a.email, a.first_name, a.last_name from developers as a
where a.skill_code & (select code from skillcodes where name in ('Python')) or 
    a.skill_code & (select code from skillcodeswhere name in ('C#'))
order by id asc;


[간단한 풀이]

1. 서브쿼리로 python과 c#의 skil code를 알아낸다.

2. 비트 연산자 & 를 이용해서 해당 스킬을 갖고있는 개발자를 찾아낸다.

3. 아이디 순으로 오름차순 정렬한다.

 

* 비트연산자 : https://www.tcpschool.com/c/c_operator_bitwise

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함