SQL

[SQL 쿼리테스트] 프로그래머스 Level1 복습

지구(Jigoo) 2025. 11. 22. 17:25

Level1 31문제 한 번에 다 풀기

 

문제별 복기사항

*우선순위: JOIN 복습

[SQL 비트연산 정리]

SQL 에서 비트연산은 사용자에게 권한을 부여하고 특정 사용자의 권한 확인시에 자주 사용됨 

ex) 읽기(1₁₀, 001₂), 쓰기(2₁₀, 010₂ ), 삭제(4₁₀ , 100₂) 권한 중 읽기, 쓰기 권한만 가지면 3₁₀(011₂)으로 입력

 

해당 사용자(3₁₀, 011₂) 에게 쓰기(2₁₀, 010₂) 권한이 있는지 확인할 때는 

쓰기에 해당하는 2₁₀플래그(Flag)사용자의 권한3₁₀과 AND 비트 연산(&)을 수행함

 

3 & 2 = 011 & 010 = 010 = 2 > 0 이므로 이 사용자쓰기 권한있다 라고 판단함

 

'권한이 있다'를 판단할 때 비트연산 = 플래그 대신 비트연산 > 0 을 사용하는 이유는 범용성(일반성) 때문임

여러 권한(플래그) 중 하나라도 가지고 있는가? 를 판단할 때는 비트연산 = 플래그(검증하려는 여러 플래그의 합계 값) 수식을 사용하면 특정 권한을 가지고 있더라도 가지고 있지 않다고 판단하기 때문에 비트연산 > 0 을 사용해야 함

→ 상세 설명은 Gemini 발췌

 

 

 

→ 결론: [특정 형질을 가지는 대장균 찾기] 의 쿼리는 2가지 버전으로 작성할 수 있음

① 형질을 이진수로 변환(CONV, BIN) 후 LIKE 로 문자열 비교

# 이진수 변환 (BIN, CONV)
SELECT COUNT(*) AS "COUNT"
FROM ECOLI_DATA
WHERE BIN(GENOTYPE) = "1" OR BIN(GENOTYPE) LIKE "%001" OR BIN(GENOTYPE) LIKE "%100" OR BIN(GENOTYPE) LIKE "%101";

 

② AND 비트 연산 

# 비트연산
SELECT COUNT(*) AS "COUNT"
FROM ECOLI_DATA
WHERE (GENOTYPE&2=0) AND (GENOTYPE&5>0);

 

'SQL' 카테고리의 다른 글

[SQL 쿼리테스트] 6일차  (0) 2025.08.22
[SQL 쿼리테스트] 5일차  (2) 2025.07.15
[SQL 쿼리테스트] 4일차  (0) 2025.06.09
[SQL 쿼리테스트] 3일차  (0) 2025.06.08
[SQL 쿼리테스트] 2일차  (4) 2025.06.06