본문 바로가기
SQL/SQL 스터디

논리 연산자 파헤치기 - 문과생 SQL 독학 시리즈7

by davi_kr 2023. 4. 30.

목차

    반응형

    "Everything is available basically for free. You can learn anything you want for free." - Elon Musk의 인터뷰 중

    머스크의 말처럼 모두 무료로 접할 수 있고 무엇이든 할 수 있으니..

    무료로 접할 수 있는 정보들을 제게 맞게 최적화해서 정리해보려고 합니다.

     

    이 글에선 논리 연산자에 대해 자세히 알아보겠습니다.

    아래는 예시로 사용할 products 테이블입니다.

     

    product_id product_name price quantity category
    1 Apple 1.50 10 Fruit
    2 Banana 0.80 30 Fruit
    3 Orange 1.20 20 Fruit
    4 Pear 2.00 15 Fruit
    5 Carrot 0.70 50 Vegetable

     

    1. AND 연산자

    SELECT * 
    FROM products
    WHERE price >= 1.00 AND quantity >= 20;

     

    해석 > products 테이블에서 price가 1.00 이상이고 quantity가 20 이상인 모든 값을 조회해줘

    결과)

    product_id product_name price quantity category
    3 Orange 1.20 20 Fruit

     

    2. OR 연산자

    SELECT * 
    FROM products
    WHERE price >= 1.00 OR quantity >= 20;

     

    해석 > products 테이블에서 price가 1.00 이상이거나 quantity가 20 이상인 모든 값을 조회해줘

    결과)

    product_id product_name price quantity category
    1 Apple 1.50 10 Fruit
    2 Banana 0.80 30 Fruit
    3 Orange 1.20 20 Fruit
    4 Pear 2.00 15 Fruit
    5 Carrot 0.70 50 Vegetable

     

    3. NOT 연산자

    SELECT * 
    FROM products
    WHERE NOT category = 'Fruit';
    
    -- 같은 표현 (!= 사용)
    SELECT * 
    FROM products
    WHERE category != 'Fruit';
    
    -- 같은 표현 (<> 사용)
    SELECT * 
    FROM products
    WHERE category <> 'Fruit';

     

    해석 > products 테이블에서 category가 Fruit이 아닌 것만 조회해줘

    결과)

    product_id product_name price quantity category
    5 Carrot 0.70 50 Vegetable

     

    between A and B를 많이 사용했었는데 사이에 해당하지 않는 나머지 값을 어떻게 구하지 항상 헤멨던 기억이 나네요.

    NOT 만 붙여주면 아주 간단히 해결됩니다.

    NOT between A and B > A와 B 사이에 값이 없음

    SELECT * 
    FROM products
    WHERE price NOT BETWEEN 1.00 AND 1.50;

    해석 > products 테이블에서 price가 1.00과 1.50 사이에 없는 데이터들만 조회해줘

    결과)

    product_id product_name price quantity category
    2 Banana 0.80 30 Fruit
    4 Pear 2.00 15 Fruit
    5 Carrot 0.70 50 Vegetable

     

    4. 주의할 점

    논리 연산자를 사용할 때 주의할 점은 우선순위입니다. AND 연산자는 OR 연산자보다 우선순위가 높습니다. 따라서 조건들이 섞여 있을 때, 괄호를 사용해 명확한 우선순위를 지정해주는 것이 좋습니다.

    괄호가 생략되는 경우, OR로 묶어주는 지점이 애매해지면서 결과가 이상하게 나올 수 있습니다.

    그래서 OR를 사용하는 경우, 의도가 정확히 반영될 수 있도록 꼭 괄호를 활용해야 합니다.

    SELECT * 
    FROM products
    WHERE (price >= 1.00 AND quantity >= 20) OR category = 'Vegetable';

     

    해석 > products 테이블에서 price가 1.00 이상이고 quantity가 20 이상이거나 category가 Vegetable인 값들을 모두 조회해줘

    결과)

    product_id product_name price quantity category
    3 Orange 1.20 20 Fruit
    5 Carrot 0.70 50 Vegetable

     

    5. 참고 문헌

    통계 교육원 SQL 강의: 데이터 분석을 위한 SQL 입문(2023) - https://sti.kostat.go.kr/coresti/site/main.do

    부스트코스 SQL 강의: 기초 데이터 분석을 위한 핵심 SQL - https://www.boostcourse.org/

    반응형

    댓글