ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] STRING 관련
    MySQL 2024. 9. 16. 20:40

    [SELECT 문에서 CASE-END : 특정 칼럼을 조건에 따라 다르게 출력]

    새로운 칼럼을 정의하는 것이므로 SELECT에 넣어줘야함!
     

    SELECT
        BOARD_ID,
        WRITER_ID,
        TITLE,
        PRICE,
        CASE
            WHEN STATUS = 'DONE' THEN '거래완료'
            WHEN STATUS = 'RESERVED' THEN '예약중'
            ELSE '판매중'
        END AS STATUS
        
    FROM USED_GOODS_BOARD
    WHERE DATE(CREATED_DATE) = '2022-10-5'
    ORDER BY BOARD_ID DESC

     

    SELECT
        loan_number,
        amount,
        CASE
            WHEN p>=2000 THEN 'A'
            WHEN p>=1500 THEN 'B'
            WHEN p>=1000 THEN 'C'
            ELSE 'F'
        END AS loan_grade
    FROM loan;
    SELECT
        HISTORY_ID,
        CAR_ID,
        DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE, 
        DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
        CASE 
            WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
            ELSE '단기 대여'
        END AS RENT_TYPE
    
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    WHERE YEAR(START_DATE) = '2022' AND MONTH(START_DATE) = '9'
    ORDER BY HISTORY_ID DESC

     


    [IN 절 사용 : 집합 내 존재성 확인]

     
    1. IN 특정 집합 내 원소

    SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    WHERE NAME IN ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
    ORDER BY ANIMAL_ID

     

    SELECT * FROM product 
    WHERE 카테고리 = '신발' OR 카테고리 = '가전' OR 카테고리 = '식품'
    
    SELECT * FROM product 
    WHERE 카테고리 IN ('신발', '가전, '식품')

     
    OR 여러개보다 IN 절 쓰는게 성능이 훨씬 좋음!
     
    2. IN 특정 테이블 내 칼럼값
     
    IN () 쓰면 괄호 안에 SELECT 또 사용할 수 있음!

    WITH IT AS (
        SELECT DISTINCT PARENT_ITEM_ID
        FROM ITEM_TREE
        WHERE PARENT_ITEM_ID IS NOT NULL
    )
    
    SELECT ITEM_ID, ITEM_NAME, RARITY
    FROM ITEM_INFO
    WHERE ITEM_ID NOT IN (SELECT PARENT_ITEM_ID FROM IT)
    ORDER BY ITEM_ID DESC

     


    [LIKE : 패턴 매칭]

     
    LIKE 연산자는 '%'랑 같이 사용됨

    WHERE OPTIONS = '%가죽시트%'

     
    위와 같이 % 랑 = 을 같이 쓰면 안됨!
    % 쓰면 무조건 LIKE랑 같이 써야함

    SELECT ANIMAL_ID, NAME
    FROM ANIMAL_INS
    WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
    ORDER BY NAME

     
    이때, 복수개의 특정 문자를 포함하는 데이터를 검색하기 위해서 OR연산자를 사용해야한다
    SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열%' OR [필드명] LIKE '%특정 문자열2%';
     
    뭔가 번거롭다. 특정 문자가 많아질수록 OR, 필드명, LIKE가 중복되기 때문이다

    SELECT CAR_TYPE, COUNT(*) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE OPTIONS LIKE '%가죽시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%통풍시트%'
    GROUP BY CAR_TYPE
    ORDER BY CAR_TYPE ASC

     
    이럴때는 아래의 REGEXP를 사용하면됨
     


    [REGEXP : 패턴매칭]
     
    여러개 LIKE 쓸때 복잡하므로 이를 해결하고자, REGEXP 연산자를 사용하도록 한다
     

    REGEXP 연산자는 LIKE보다 복잡한 패턴을 검색 할때 사용한다
     
    복수개의 특정 문자를 포함하는 데이터 검색 (특정 문자열을 '|' 를 기준으로 나눈다)
    SELECT [필드명] FROM [테이블명] WHERE [필드명] REGEXP '특정 문자열1|특정 문자열2'

    SELECT CAR_TYPE, COUNT(*) AS CARS
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
    GROUP BY CAR_TYPE
    ORDER BY CAR_TYPE ASC;

     
    이때 | 양옆에 공백을 놔두면 안되는게 그럼 진짜로 공백이 들어간 놈을 검색하기 때문이다 
     


    [NULL 조건]

    IS NULL
    IS NOT NULL
    SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, IFNULL(FREEZER_YN, 'N') AS FREEZER_YN
    FROM FOOD_WAREHOUSE
    WHERE ADDRESS LIKE "경기도%"
    ORDER BY WAREHOUSE_ID ASC;

     
    NULL이면 10으로 치고 평균구하기

    SELECT ROUND(AVG(IFNULL(LENGTH,10)),2) AS AVERAGE_LENGTH
    FROM FISH_INFO

     

    'MySQL' 카테고리의 다른 글

    [MySQL] 꿀팁 몇가지  (0) 2024.09.16
    [MySQL] DATE 관련  (0) 2024.09.16
    [MySQL] 쿼리 실행 순서  (0) 2024.09.16
    [MySQL] GROUP BY  (0) 2024.08.23
    [MySQL] 특정 칼럼이 최대인 레코드 조회  (0) 2024.08.18