inblog logo
|
silver
    SQL문제풀기

    [SQL문제풀기] 조건에 맞는 개발자 찾기

    silver's avatar
    silver
    Nov 25, 2024
    [SQL문제풀기] 조건에 맞는 개발자 찾기
     

    문제

    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/276034
     

    내가 작성한 매우매우 틀린 답

    SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPERS WHERE SKILL_CODE IN ( (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') + (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') ,(SELECT CODE FROM SKILLCODES WHERE NAME = 'C#') ,(SELECT CODE FROM SKILLCODES WHERE NAME = 'Python') ) ORDER BY ID;
    • IN 절의 사용: IN 절은 단일 값 목록을 비교하는 데 사용되며, 서브쿼리가 반환하는 값이 개별적으로 비교되어야 한다.
    • 비트 연산 사용: 스킬 코드가 비트 마스크로 표현되기 때문에, + 연산자가 아니라 비트 연산 (&)을 사용해야 한다.
     

    정답

    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;
     

    정답 해설

    1. & 연산자는 비트 단위의 AND 연산을 수행한다. 즉, 두 숫자의 각 비트를 비교하여 둘 다 1인 경우에만 1을 반환한다. 예를 들어, SKILL_CODE가 400 (이진수로 110010000)이고, CODE가 256 (이진수로 100000000)일 경우: 400 & 256의 결과는 256 (이진수 100000000)이 된다. 이는 두 코드가 비트에서 겹치는 부분이 있다는 것을 의미한다.
    1. 0 조건은 비트 AND 연산의 결과가 0이 아닌 경우를 체크한다. 즉, 두 코드가 겹치는 비트가 하나라도 존재한다면, 결과는 0보다 크고, 이는 해당 스킬이 포함되어 있다는 것을 의미한다.
     
    💡
    비트연산
    • AND 연산 (&): 두 비트가 모두 1일 때만 1을 반환한다.
    • OR 연산 (|): 두 비트 중 하나라도 1이면 1을 반환한다.
    • XOR 연산 (^): 두 비트가 다르면 1, 같으면 0을 반환한다.
    • NOT 연산 (~): 비트를 반전시킨다.
     

    ORACLE에서 적용하기

    SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPERS WHERE BITAND(SKILL_CODE, (SELECT CODE FROM SKILLCODES WHERE NAME = 'C#')) > 0 OR BITAND(SKILL_CODE, (SELECT CODE FROM SKILLCODES WHERE NAME = 'Python')) > 0 ORDER BY ID;
    💡
    BITAND 함수: Oracle에서는 비트 연산을 위해 BITAND 함수를 사용한다. 이 함수는 두 숫자의 비트 AND 연산을 수행한다.
     
    Share article

    silver

    RSS·Powered by Inblog