티스토리 뷰
비트연산자를 활용해 해결하는 문제입니다.
[문제]
SKILLCODES 테이블은 개발자들이 사용하는 프로그래밍 언어에 대한 정보를 담은 테이블입니다. SKILLCODES 테이블의 구조는 다음과 같으며, NAME, CATEGORY, CODE는 각각 스킬의 이름, 스킬의 범주, 스킬의 코드를 의미합니다. 스킬의 코드는 2진수로 표현했을 때 각 bit로 구분될 수 있도록 2의 제곱수로 구성되어 있습니다.
NAME | VARCHAR(N) | Y | N |
CATEGORY | VARCHAR(N) | N | N |
CODE | INTEGER | Y | N |
DEVELOPERS 테이블은 개발자들의 프로그래밍 스킬 정보를 담은 테이블입니다. DEVELOPERS 테이블의 구조는 다음과 같으며, ID, FIRST_NAME, LAST_NAME, EMAIL, SKILL_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 |
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
- Total
- Today
- Yesterday
- MySQL
- 백엔드 개발
- 백준
- 리눅스
- 혼공
- Process
- 해커톤
- 혼공단 SQL
- JavaScript
- JS
- 혼공단
- 공룡책
- 개발일지
- nodejs
- AWS
- 프로젝트
- Linux
- Signal
- SQL
- 스페인
- 개발
- 자바스크립트
- 혼공단 9기
- 혼공학습단
- 교환학생
- googleapis
- C++
- 스페인 교환학생
- 운영체제
- 깃 예제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |