[TIL] sql 강의 3주차 수강 완료
1. SQL로 가공하기 (REPLACE, SUBSTRING, CONCAT)
replace 함수는 문자열 내에서 특정 부분을 다른 문자열로 교체할 때 사용됩니다.
REPLACE(string, substring, replacement)
string : 대상 문자열
substring (substr) : 교체할 부분 문자열
replacement : 교체할 새로운 문자열
ex)
SELECT REPLACE('Hello World', 'World', 'SQL');
substring 함수는 문자열의 일부를 추출할 때 사용됩니다. 시작 위치와 길이를 지정하여 문자열의 일부를 잘라냅니다.
SUBSTRING(string, start_position, length)
string: 대상 문자열
start_position: 추출을 시작할 위치 (1부터 시작)
length: 추출할 길이 (옵션, 생략하면 끝까지 추출)
ex)
SELECT SUBSTRING('Hello World', 7, 5);
concat 함수는 여러 개의 문자열을 하나로 합칠 때 사용됩니다.
CONCAT(string1, string2, ...)
ec)
SELECT CONCAT('Hello', ' ', 'World');
2. 조건에 따라 포맷을 다르게 변경해야한다면 (IF, CASE)
IF 함수는 조건에 따라 결과를 반환하는 함수로, IF 함수는 단일 조건을 평가하여 결과를 반환하는 간단한 형태입니다.
IF(condition, true_result, false_result)
condition: 평가할 조건
true_result: 조건이 참일 때 반환할 값
false_result: 조건이 거짓일 때 반환할 값
ex)
SELECT order_id,
delivery_time,
IF(delivery_time > 30, 'Late', 'On-time') AS delivery_status
FROM food_orders;
만약 delivery_time이 30분 이상이면 "Late"를 반환하고, 그렇지 않으면 "On-time"을 반환합니다.
IF 함수는 단일 조건을 처리할 때 유용합니다.
ELSE를 사용하지 않고 두 가지 결과를 반환합니다.
CASE 문은 여러 조건을 평가하고, 그 조건에 맞는 값을 반환하는 기능을 가진 문법입니다.
SQL에서 조건문을 사용할 때 IF보다 더 복잡한 조건을 처리할 수 있습니다.
CASE는 검색 CASE와 단순 CASE 두 가지 형태가 있습니다.
단순 CASE 문은 특정 표현식을 평가하여, 그 값에 따라 다른 값을 반환하는 방식입니다.
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
검색 CASE 문은 여러 조건을 평가하여 결과를 반환하는 방식으로,
여러 WHEN 절에 다양한 조건을 사용할 수 있습니다. 이 방식은 복잡한 조건을 다룰 때 매우 유용합니다.
ex)
SELECT order_id,
delivery_time,
CASE
WHEN delivery_time > 30 THEN 'Late'
WHEN delivery_time BETWEEN 20 AND 30 THEN 'Slightly late'
ELSE 'On-time'
END AS delivery_status
FROM food_orders;
delivery_time이 30분 초과일 경우 'Late'를 반환하고,
20분에서 30분 사이이면 'Slightly late'를 반환,
그 외의 경우에는 'On-time'을 반환합니다.
숙제
다음 조건으로 배달시간이 늦었는지 판단하는 값을 만들어주세요.
주중: 25분 이상
주말: 30분 이상
SELECT order_id,
restaurant_name,
day_of_the_week,
delivery_time,
CASE
WHEN day_of_the_week = 'Weekday' AND delivery_time >= 25 THEN 'late'
WHEN day_of_the_week = 'Weekend' AND delivery_time >= 30 THEN 'late'
ELSE 'on-time'
END AS "지연여부"
FROM food_orders;