본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.02.14 사전캠프 TIL - SQL 조건문

by pandastic 2025. 2. 14.
반응형

 

목차

     

    5. SQL 조건문

     

    논리연산자 의미 예시
    AND 그리고 age>20 and gender=’female’ → 나이가 20세 이상이고, 여성
    OR 또는 age>20 or gender=’female’ → 나이가 20세 이상이거나, 여성
    NOT 아닌 not gender=’female’ → 여성이 아닌

     

     

     

    * AND

      - 두 조건이 모두 참일 때 사용.

    SELECT *
    FROM students
    WHERE age > 20 AND name = 'Alice';

     

    * OR

      - 두 조건 중 하나만 참이면 사용.

    SELECT *
    FROM students
    WHERE age > 20 OR name = 'Bob';

     

    * NOT

      - 조건이 거짓일 때 사용.

    SELECT *
    FROM students
    WHERE NOT age > 20;

     

     

    * 비교연산자

    비교연산자 의미 예시
    = 같다 age=21
    gender=’female’
    <>  같지 않다 (다르다) age<>21
    gender<>’female’
    크다 age>21
    >= 크거나 같다 age>=21
    작다 age<21
    <= 작거나 같다 age<=21

     

     

    BETWEEN A AND B

       - A와  B 사이

    -- 나이가 21과 23 사이인 고객의 전체 데이터 조회
    SELECT *
    FROM customers
    WHERE age between 21 and 23

     

     

    * IN

      - '포함' 하는 조건.

    -- 나이가 21, 25, 27인 고객의 전체 데이터 조회
    SELECT *
    FROM customers
    WHERE age in (21, 25, 27)

     

     

    * LIKE

      - 비슷한 값을 조건으로 설정.

     

    1. 특정한 문자로 시작하는 경우

         Ex) LIKE ‘시작문자%’ → name LIKE '김%'

    SELECT *
    FROM customers
    WHERE name LIKE '김%'

     

     

    2. 특정한 문자를 포함하는 경우

        Ex) LIKE '%포함문자%' → restaurant_name LIKE '%next%'

    SELECT *
    FROM customers
    WHERE restaurant_name LIKE '%next%'

     

     

    3. 특정한 문자로 끝나는 경우

        Ex) LIKE '%끝나는문자' → name LIKE '%임'

    SELECT *
    FROM customers
    WHERE name LIKE '%임'

     

     

    * IF문

    SELECT 컬럼명,
           IF(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
    FROM 테이블명
    WHERE 조건

     

     

    예시)

    select restaurant_name,
           cuisine_type "원래 음식 타입",
           if(cuisine_type='Korean', '한식', '기타') "음식 타입"
    from food_orders

     

     

    * CASE 문

    SELECT 컬럼명,
    	case when 조건1 then 값(수식)1
    	when 조건2 then 값(수식)2
    	else 값(수식)3
    	end
    FROM 테이블명
    WHERE 조건

     

     - 조건에 부합하지 않는 경우가 없을 때에는 ELSE를 생략해도 됨.

     

    예시)

    SELECT CASE WHEN cuisine_type='Korean' THEN '한식'
                WHEN cuisine_type IN ('Japanese', 'Chinese') THEN '아시아'
                ELSE '기타' END "음식 타입",
                cuisine_type
    FROM food_orders

     

     

    6. 문자 포맷이 다를 때 SQL로 가공하기

    * REPLACE(문자 변경)

    SELECT 컬럼,
    REPLACE(바꿀 컬럼, 현재 값, 바꿀 값)
    FROM 테이블
    WHERE 조건

     

    예시)

    SELECT restaurant_name "원래 상점명",
           REPLACE(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
    FROM food_orders
    WHERE restaurant_name LIKE '%Blue Ribbon%'

    - Blue Ribbon 이라는 말이 들어간 상점명들이 모두 Pink Ribbon으로 바뀌게 된다.

     

     

    * SUBSTR(문자 자르기)

    SELECT 컬럼,
    	   substr(조회 할 컬럼, 시작 위치, 글자 수)
    FROM 테이블
    WHERE 조건

    - SUBSTRING() 이라고 써도 무방하다.

     

    예시)

    SELECT addr "원래 주소",
           SUBSTR(addr, 1, 2) "시도"
    FROM food_orders
    WHERE addr LIKE '%서울특별시%'

     

     

     

    * CONCAT(문자 합치기)

    SELECT 컬럼,
           concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
    FROM 테이블
    WHERE 조건

     

    예시)

    SELECT restaurant_name "원래 이름",   
           addr "원래 주소",
           CONCAT('[', SUBSTRING(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
    FROM food_orders
    WHERE addr LIKE '%서울%'

     

     

    7. Data Type 오류 발생 시 해결 방법

    -- 숫자로 변경
    cast(if(rating='Not given', '1', rating) as decimal) 
    
    -- 문자로 변경
    concat(restaurant_name, '-', cast(order_id as char))

     - 숫자형 데이터 타입에 문자형 데이터를 입력하는 등의 이유로 데이터 타입 오류가 생길 수 있음.

     

     

     

    8. Subquery문

    • 여러 번의 연산을 수행해야 할 때
    • 조건문에 연산 결과를 사용해야할 때
    • 조건에 Query 결과를 사용하고 싶을 때

    Subquery문은 위와 같은 경우에 주로 사용한다.

    조금 더 간단하고 보기 쉽게 쿼리문을 작성할 수 있다는 장점이 있다.

     

    select column1, special_column
    from
    ( /* subquery */
    select column1, column2 special_column
    from table1
    ) a

     - Subquery문 실행 → Mainquery 문 실행 순서로 진행된다.

     

    * Subquery의 종류

    • 중첩 서브쿼리(Nested Subquery)
      • WHERE문에 나타나는 서브쿼리.
    • 인라인 뷰(Inline View)
      • FROM문에 나타나는 서브쿼리.
      • FROM절에서 사용되는 경우 무조건 별칭을 지정해주어야함!!
    • 스칼라 서브쿼리(Scalar Subquery)
      • SELECT 문에 나타나는 서브쿼리.
      • 다른 테이블에서 값을 가져올 때 사용됨.

     

    (참고한 블로그)

     

    [MYSQL] 📚 서브쿼리 개념 & 문법 💯 정리

    서브쿼리(Subquery) 서브쿼리(subquery)란 다른 쿼리 내부에 포함되어 있는 SELETE 문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라고 부르며, 서브쿼리는 내부쿼리(inner query)라

    inpa.tistory.com

     

     

    예시)

    SELECT price/quantity
    FROM
    (
    SELECT price, quantity
    FROM food_orders
    ) a

     

    반응형