비트연산자 &
select distinct d.id, d.email, d.first_name, d.last_name
from developers d
join skillcodes s
on (d.skill_code & s.code) = s.code and s.name in('Python' , 'C#')
order by d.id;
# skill_code는 8452 같은 인티져인데 이를 비트 연산자를 쓰면 알아서 비트로 바꿈
# 8452 -> 110010000
# 이때 s.code들중에 100000000, 10000000, 10000 이런게 있으면 조건에 맞도록 설정
# SKILLCODES 테이블의 스킬코드들과 DEVELOPERS 들이 가진 SKILL_CODE 를 비트연산 한 값이
# SKILLCODES 테이블의 스킬코드들과 동일한 결과값만 가져오기
coalesce(a, b) → a가 null이면 b반환
case when then
select id,
case when size_of_colony <= 100 then 'LOW'
when size_of_colony <= 1000 then 'MEDIUM'
else 'HIGH'
end as size
from ecoli_data
order by id;
비트 연산
select count(*) as count
from ecoli_data
where (genotype & 2) = 0 and ((genotype & 1 ) > 0 or (genotype & 4) > 0);
🌟 비트와 이진수
비트: 정보의 최소 단위로, 0또는 1의 값을 가짐.
이진수: 여러 비트를 조합해 만든 숫자 표현.
8(십진수) → 1000(이진수)
15(십진수) → 1111(이진수)
🌟 비트 연산의 개념
& (비트 AND): 두 숫자의 대응되는 비트가 모두 1일 때, 결과가 1. 그렇지 않으면 0.
| (비트 OR): 두 숫자의 대응되는 비트 중 하나라도 1이면 결과가 1. 둘 다 0이면 0
^ (비트 XOR): 두 숫자의 대응되는 비트가 서로 다를 때 결과가 1. 같으면 0.
~ (비트 OR): 숫자의 모든 비트를 반전. 1은 0으로, 0은 1로.
<< (비트 OR): 비트를 왼쪽으로 이동시키고, 왼쪽에 0을 채움.
>> (비트 OR): 비트를 오른쪽으로 이동시키고, 왼쪽에 0을 채움.
rank() over(랭크할 데이터)
select rank() over(order by size desc)
from data;
데이터에 글씨 추가하기
SELECT CONCAT(MAX(LENGTH),'cm') AS MAX_LENGTH
FROM FISH_INFO;