1. CASE 문은 조건문처럼 생각하기
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본결과
END
CASE WHEN은 SQL에서 조건문처럼 자주 쓸 수 있다. 값을 분류하거나 특정 기준에 따라 다른 문자열을 출력할 때 유용하다.
여기서 꼭 기억할 점은 WHEN에서 비교할 때 ==가 아니라 =를 쓴다는 것이다.
2. NULL 비교는 =가 아니라 IS NULL
SQL에서는 NULL을 일반 값처럼 =로 비교하면 안 된다.
WHERE name IS NULL
WHERE name IS NOT NULL
이 부분은 생각보다 자주 틀렸다.
3. IFNULL로 NULL 대체하기
IFNULL(length, 10)
어떤 값이 NULL일 때 기본값으로 대체하고 싶으면 IFNULL을 사용한다.
4. SELECT 별칭은 WHERE 절에서 바로 못쓴다.
SQL은 실행 순서가 우리 눈으로 읽는 순서와 사뭇 다르다. 대충 보면 이런 흐름이다.
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
그래서 SELECT에서 AS로 만든 별칭은 같은 쿼리의 WHERE에서 바로 사용할 수 없다.
5. LIMIT 1은 하나만 뽑고 싶을 때
SELECT *
FROM table_name
ORDER BY created_at DESC
LIMIT 1;
가장 위 한줄만 보고 싶을 때 자주 쓴다.
6. LIKE는 부분 문자열 탐색
WHERE address LIKE '%경기도%'
문자열 전체가 아니라 일부만 포함되는 보고 싶을 때는 LIKE를 쓴다.
7. 날짜/시간 관련 함수
시간만 뽑기
HOUR(date_column)
날짜 형식 바꾸기
DATE_FORMAT(date_column, '%Y-%m-%d')
8. 숫자 관련 함수
ROUND는 반올림
ROUND(score,2)
TRUNCATE는 지정한 자리 아래를 버림
TRUNCATE(14500, -4)
결과는 10000
9.IN은 서브쿼리와 같이 자주 쓰임
WHERE user_id IN (SELECT user_id FROM ...)
서브쿼리 결과 집합에 포함되는지 볼 때 굉장히 자주 쓰임
마무리
SQL은 문법 자체보다도 기본 비교 방식과 실행 순서를 정확히 이해하는 게 더 중요하다고 느꼈다.
특히 아래 네 가지는 계속 기억해야 한다.
- CASE WHEN에서 = 사용
- NULL 비교는 IS NULL
- AS 별칭은 WHERE에서 바로 사용 불가
- 일부 문자열 검색은 LIKE