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

szlee·2024년 10월 15일
0

MySQL

목록 보기
1/16

조건에 맞는 개발자 찾기

어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.
이를 바탕으로 조건에 맞는 개발자 정보 조회.

SKILL_CODE가 CODE를 포함하고 있는지 알기 위해서, 핵심 아이디어는 비트 연산자이다.
비트 연사자를 사용하면 2진수로 변환할 필요 없이 내부적으로 변환하여 비교한다.

비트 연산자

&

대응되는 비트가 모두 1이면 1을 반환함. (AND 연산)

|

대응되는 비트 중에서 하나라도 1이면 1을 반환함. (OR 연산)

^

대응되는 비트가 서로 다르면 1을 반환함. (XOR 연산)

~

비트를 1이면 0으로, 0이면 1로 반전시킴. (NOT 연산)

<<

지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산)

>>

부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)

400 & 256 => (b'110010000') & (b'100000000')
10진수 & 10진수 = 결과 10진수로 반환.
내부적으로 2진수로 바꿔서 처리.
각 자릿수를 비교해서 공통으로 1인 것만 1을 반환한다.
즉, 결과는 b'100000000'이므로 256에 해당하는 코드를 포함한다고 볼 수 있다.

select ID, EMAIL, FIRST_NAME, LAST_NAME
from DEVELOPERS D
where 
SKILL_CODE & (select CODE from SKILLCODES where NAME = "Python") 
or SKILL_CODE & (select CODE from SKILLCODES where NAME = "C#") 
order by ID


MySQL 연산자

profile
🌱

0개의 댓글