-
[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