1. 소개
데이터베이스를 다루다 보면 다양한 조건에 따라 데이터를 처리하거나 출력해야 하는 상황이 자주 발생합니다. MySQL은 이러한 상황에 대응하기 위해 여러 가지 조건문을 제공합니다. 이번 글에서는 MySQL의 대표적인 조건문인 IF
, CASE
, IFNULL
, NULLIF
의 사용법과 활용 예시를 통해 그 특징을 자세히 알아보겠습니다.
2. IF 문
2.1 기본 구조와 사용법
IF
문은 주어진 조건이 참일 경우 특정 값을 반환하고, 거짓일 경우 다른 값을 반환하는 단순한 조건문입니다.
아래는 MySQL Documents에 나와 있는 조건문의 기본 구조와 사용법입니다.
SELECT IF(조건식, 참일 때의 값, 거짓일 때의 값);
2.2 예제
SELECT IF(10 > 5, '크다', '작다') AS result;
위 예제에서는 10이 5보다 크기 때문에 '크다'라는 결과를 반환합니다.
2.3 실제 활용 예시
-- 테이블 생성
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
);
-- 데이터 삽입
INSERT INTO users (name, age) VALUES
('김철수', 25),
('이영희', 17),
('박민수', 30),
('정지은', 15);
-- IF 문을 사용한 쿼리
SELECT name,
IF(age >= 18, '성인', '미성년자') AS age_group
FROM users;
- Table 전체 조회 결과
- IF문을 사용한 쿼리 결과
위 쿼리는 users
테이블에서 각 사용자의 이름과 나이에 따라 '성인' 또는 '미성년자'로 분류합니다.
3. CASE 문
3.1 기본 구조와 사용법
CASE
문은 더 복잡한 조건 처리가 가능하며, SQL의 다중 분기 처리를 담당합니다. IF
문보다 더욱 유연하게 다양한 조건을 처리할 수 있습니다.
SELECT CASE 조건
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
ELSE 기본값
END AS 컬럼명
FROM 테이블명;
SELECT CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본값
END AS 컬럼명
FROM 테이블명;
3.2 예제
-- 테이블 생성
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
score INT NOT NULL
);
-- 데이터 삽입
INSERT INTO students (name, score) VALUES
('김철수', 95),
('이영희', 85),
('박민수', 75),
('정지은', 65);
-- CASE 문을 사용한 쿼리
SELECT name,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'F'
END AS grade
FROM students;
- 원본 데이터
- CASE 문을 사용한 쿼리
- 위 예제에서는 학생들의 점수에 따라 학점을 부여합니다.
3.3 실제 활용 예시
-- 테이블 생성
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
category_id INT NOT NULL
);
-- 데이터 삽입
INSERT INTO products (product_name, category_id) VALUES
('스마트폰', 1),
('티셔츠', 2),
('사과', 3),
('노트북', 1),
('청바지', 2),
('우유', 3),
('책상', 4);
-- CASE 문을 사용한 쿼리
SELECT product_name,
CASE category_id
WHEN 1 THEN '전자 제품'
WHEN 2 THEN '의류'
WHEN 3 THEN '식료품'
ELSE '기타'
END AS category_name
FROM products;
- 원본 데이터
- CASE 문을 사용한 쿼리
products
테이블에서 category_id
에 따라 제품 카테고리를 한글로 변환하는 예시입니다.
4. IFNULL 함수
4.1 기본 구조와 사용법
IFNULL
함수는 지정한 컬럼이나 표현식의 값이 NULL
일 경우 대체할 값을 지정하는 데 사용됩니다.
SELECT IFNULL(컬럼명, 대체값) AS 컬럼명
FROM 테이블명;
4.2 예제
-- 테이블 생성
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
phone VARCHAR(20)
);
-- 데이터 삽입
INSERT INTO customers (name, phone) VALUES
('김철수', '010-1234-5678'),
('이영희', NULL),
('박민수', '010-9876-5432'),
('정지은', NULL);
-- IFNULL 함수를 사용한 쿼리
SELECT name,
IFNULL(phone, '미등록') AS phone_number
FROM customers;
- 원본 데이터
- IFNULL 함수를 사용한 쿼리
위 예제는 phone
컬럼이 NULL
일 경우 '미등록'이라는 값을 반환합니다.
5. NULLIF 함수
5.1 기본 구조와 사용법
NULLIF
함수는 두 개의 값을 비교하여 같으면 NULL
을 반환하고, 다르면 첫 번째 값을 반환하는 함수입니다.
SELECT NULLIF(표현식1, 표현식2) AS 결과
FROM 테이블명;
5.2 예제
-- 테이블 생성
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
discount_price DECIMAL(10, 2)
);
-- 데이터 삽입
INSERT INTO products (name, price, discount_price) VALUES
('노트북', 1000000, 900000),
('스마트폰', 800000, 750000),
('이어폰', 200000, 0),
('태블릿', 500000, 450000);
-- NULLIF 함수를 사용한 쿼리
SELECT name,
NULLIF(discount_price, 0) AS actual_discount
FROM products;
- 원본 데이터
- NULLIF 함수를 사용한 쿼리
discount_price
가 0일 경우 NULL
을 반환하고, 0이 아닌 경우 실제 할인 가격을 반환합니다.
6. 활용 사례 비교: IF vs CASE
IF
와 CASE
는 모두 MySQL에서 조건에 따라 다른 값을 반환하는 중요한 조건문입니다. 두 구문의 특징과 필요성을 자세히 살펴보겠습니다.
- IF 문:
- 특징: 단순한 이진 조건(참/거짓)에 따라 값을 반환합니다.
- 구조: IF(조건, 참일 때 값, 거짓일 때 값)
- 필요성:
- 간단한 조건 처리에 적합합니다.
- 코드가 간결하여 가독성이 좋습니다.
- 성능 면에서 단순 조건 처리 시 CASE보다 약간 우수할 수 있습니다.
- CASE 문:
- 특징: 다중 조건을 처리할 수 있으며, 더 복잡한 로직을 구현할 수 있습니다.
- 구조:
- 단순 CASE: CASE 값 WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 기본결과 END
- 검색 CASE: CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 기본결과 END
- 필요성:
- 여러 조건을 순차적으로 평가해야 할 때 유용합니다.
- 복잡한 비즈니스 로직을 SQL 내에서 직접 구현할 수 있습니다.
- 다양한 조건에 따른 결과를 한 번에 처리할 수 있어 코드의 중복을 줄일 수 있습니다.
선택 기준:
- 단순한 이진 조건: IF 문을 사용하는 것이 간결하고 직관적입니다.
- 복잡한 다중 조건: CASE 문을 사용하면 더 명확하고 확장 가능한 코드를 작성할 수 있습니다.
- 성능: 대부분의 경우 큰 차이가 없지만, 대량의 데이터를 처리할 때는 실제 성능 테스트를 통해 선택하는 것이 좋습니다.
다음은 동일한 기능을 하는 IF와 CASE 문의 예시입니다. 이를 통해 두 구문의 차이점을 명확히 이해할 수 있습니다.
6.1 IF 문
SELECT name,
IF(gender = 'M', '남성', '여성') AS gender_desc
FROM users;
6.2 CASE 문
SELECT name,
CASE gender
WHEN 'M' THEN '남성'
ELSE '여성'
END AS gender_desc
FROM users;
7. 결론
이번 글에서는 MySQL의 조건문인 IF
, CASE
, IFNULL
, NULLIF
의 사용법과 활용 방법을 자세히 살펴보았습니다. 각 조건문은 특정 상황에서 효과적으로 데이터를 처리하는 데 도움이 됩니다. 다양한 실무 상황에서 이러한 조건문을 적절히 활용하여 더욱 효율적인 SQL 쿼리를 작성해 보시기 바랍니다.
'DataBase' 카테고리의 다른 글
MySQL의 `NOW()`와 `SYSDATE()` 차이점 완벽 정리 (0) | 2024.12.31 |
---|---|
MySQL 프로시저에서 예외 처리 (2) | 2024.12.09 |
MySQL에서의 예외 처리: 저장 프로시저 vs 프로그램 단의 예외 처리 (0) | 2024.12.02 |
효율적인 데이터베이스 관리를 위한 MySQL 이벤트 사용법 (1) | 2024.11.07 |
MSSQL의 FORMAT 함수 가이드: 사용법, 대체 방법, 실전 사례 (2) | 2024.11.04 |