1. IF문과 CASE문, 서브쿼리
IF / CASE 문
•
IF는 보통 MySQL에서 사용되고, CASE는 모든 RDBMS에서 사용 가능해요.
•
조건에 따라 컬럼 값을 바꾸거나, 조건별 다른 계산을 하려고 할 때 사용합니다.
예시
SELECT name,
IF(score >= 60, 'Pass', 'Fail') AS result
FROM students;
-- 또는 CASE로 같은 표현
SELECT name,
CASE
WHEN score >= 60 THEN 'Pass'
ELSE 'Fail'
END AS result
FROM students;
SQL
복사
헷갈릴 때 팁
•
IF = 간단한 조건일 때, CASE = 복잡하거나 여러 조건일 때
•
코딩하듯이 "조건별 결과값을 나눈다" 라고 생각하세요.
서브쿼리 vs WITH 문 (공통 테이블 표현식)
항목 | 서브쿼리 | WITH 문 (CTE) |
위치 | SELECT, FROM, WHERE 절 안에 바로 씀 | 쿼리의 맨 위에 작성 |
재사용 | 안됨 | 여러 번 참조 가능 |
가독성 | 복잡해지기 쉬움 | 가독성이 좋고 유지보수에 유리 |
사용 예 | 간단한 조건에 자주 사용 | 복잡한 로직 처리 시 선호 |
상황 | 추천 도구 | 이유 |
쿼리가 길고, 중간 계산을 나눠서 작성하고 싶을 때 | WITH 문 | 각 단계를 이름 붙여 관리 가능, 가독성↑ |
같은 쿼리를 여러 번 써야 할 때 | WITH 문 | 중복 제거, 재사용성↑ |
쿼리가 짧고 단순한 조건만 필요할 때 | 서브쿼리 | 간결하게 처리, 오히려 WITH보다 짧고 명확 |
성능 최적화가 중요할 때 | 상황에 따라 다름 | 어떤 RDBMS에서는 서브쿼리가 더 빠를 수도 있음 (즉, DB 엔진마다 다름) |
예시
•
서브쿼리
SELECT name
FROM students
WHERE score > (
SELECT AVG(score) FROM students
);
SQL
복사
•
WITH 문
WITH avg_score AS (
SELECT AVG(score) AS avg FROM students
)
SELECT name
FROM students, avg_score
WHERE score > avg;
SQL
복사
실무에서는?
•
복잡한 로직이면 WITH 문 선호 (가독성, 유지보수 측면)
•
단순한 조건만 있는 경우엔 서브쿼리도 많이 씁니다.
WITH 문과 서브쿼리는 "상황에 맞는 선택”이 필요하다!
실무에서는 복잡한 로직이나 재사용이 필요한 경우 WITH 문을 자주 사용하는 편이지만,
간단한 조건 필터링이나 단일 조회에는 서브쿼리로도 충분히 처리합니다.
두 방법 중 절대적으로 더 좋은 것은 없으며, 상황에 맞게 선택하는 것이 중요합니다.