https://school.programmers.co.kr/learn/courses/30/lessons/276035
비트 연산자는 데이터를 비트(bit) 단위로 연산하는 연산자이다.
SQL에서도 비트 연산자를 지원하며, 주로 정수형 데이터에 대해 비트 단위로 AND, OR, XOR, NOT 등의 연산을 수행함.
비트 연산은 이진수로 표현된 데이터의 각 비트를 직접 조작하는 데 사용됨.
AND (&):
1일 때만 1을 반환5 & 3 → 0101 & 0011 = 0001 (결과: 1)OR (|):
1이면 1을 반환5 | 3 → 0101 | 0011 = 0111 (결과: 7)XOR (^):
1을 반환5 ^ 3 → 0101 ^ 0011 = 0110 (결과: 6)NOT (~):
0은 1로, 1은 0으로)~5 → ~0101 = 1010 (결과: -6, 부호 비트가 반전되기 때문)시프트 연산자 (MySQL 등 일부 DBMS에서 지원):
<< (왼쪽 시프트): 비트를 왼쪽으로 이동 (예: 5 << 1 → 1010, 결과: 10)>> (오른쪽 시프트): 비트를 오른쪽으로 이동 (예: 5 >> 1 → 0010, 결과: 2)플래그(Flag) 처리:
1, 쓰기: 2, 실행: 4 등)데이터 압축:
성능 최적화:
&)SELECT 5 & 3; -- 결과: 1
5는 이진수로 0101, 3은 00110001 (십진수로 1)|)SELECT 5 | 3; -- 결과: 7
5는 이진수로 0101, 3은 00110111 (십진수로 7)^)SELECT 5 ^ 3; -- 결과: 6
5는 이진수로 0101, 3은 00110110 (십진수로 6)~)SELECT ~5; -- 결과: -6
5는 이진수로 0101입니다.1010 (십진수로 -6, 부호 비트가 반전되기 때문)데이터 타입:
INT, BIGINT 등)에 적용됨.DBMS별 차이:
BITAND 함수를 사용<<, >>)는 MySQL에서만 지원됨.성능:
| 기능 | MySQL | Oracle | MS SQL Server |
|---|---|---|---|
| AND 연산 | & | BITAND() | & |
| OR 연산 | ` | ` | ` |
| XOR 연산 | ^ | ^ | ^ |
| NOT 연산 | ~ | ~ | ~ |
| 시프트 연산 | <<, >> | 미지원 | 미지원 |
MySQL, MS SQL SERVER 기준 풀이SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM (
SELECT CODE FROM SKILLCODES WHERE CATEGORY = 'Front End'
) S
INNER JOIN DEVELOPERS D
ON (S.CODE & D.SKILL_CODE) = S.CODE
WHERE S.CATEGORY = 'Front End'
ORDER BY D.ID ASC;
ORACLE 기준 풀이 >> BITAND 만 달라짐SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM (
SELECT CODE FROM SKILLCODES WHERE CATEGORY = 'Front End'
) S
INNER JOIN DEVELOPERS D
ON BITAND(S.CODE, D.SKILL_CODE) = S.CODE
ORDER BY D.ID ASC;