문제
MYSQL
1. 내가 작성한 정답
select distinct ID,EMAIL,FIRST_NAME,LAST_NAME
from DEVELOPERS d
join SKILLCODES s on d.SKILL_CODE & s.CODE
where s.name in ('C#','Python')
order by 1;비트 연산자 &를 사용하면 두 숫자의 같은 자리의 비트가 모두 1일 때만 1이 반환되는데
위의 on절에서 &를 사용하여 하나의 비트값이라도 겹치면 1이 출력이 되어 조인이 성립된다.
→ on (d.skill_code & s.code) = s.code으로 한정해 보다 명확하게 비교할 수 있다.
→ on (d.skill_code & s.code) <> 0
: <> 는 같지 않다
: 개발자의 skill_code에 s.code 비트가 하나라도 포함되어 있으면 해당 스킬이 있다고 판단
이
2. 이전에 작성한 정답1
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE
SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') > 0
OR SKILL_CODE & (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') > 0
ORDER BY ID;이전에 작성한 정답2
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;비트연산
- AND 연산 (
&): 두 비트가 모두 1일 때만 1을 반환한다.
- OR 연산 (
|): 두 비트 중 하나라도 1이면 1을 반환한다.
- XOR 연산 (
^): 두 비트가 다르면 1, 같으면 0을 반환한다.
- NOT 연산 (
~): 비트를 반전시킨다.
Share article