MySQL에서 CASE 문을 사용하는 방법은?
_____A1: CASE 문은 MySQL에서 조건에 따라 값을 다르게 반환할 때 사용하는 표현식입니다. 주로 SELECT 문 내에서 조건별로 다른 값을 출력하거나, UPDATE 문에서 조건별로 다른 값을 설정할 때 사용됩니다.
---
Q2: MySQL에서 CASE 문 기본 문법은 어떻게 되나요?
A2: 기본 CASE 문법은 다음과 같습니다:
```sql
CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 기본결과
END
```
또는 표현식 기반으로 사용할 수도 있습니다:
```sql
CASE 표현식
WHEN 값1 THEN 결과1
WHEN 값2 THEN 결과2
...
ELSE 기본결과
END
```
---
Q3: SELECT 문에서 CASE 문을 사용하는 예시는?
A3:
```sql
SELECT
employee_id,
salary,
CASE
WHEN salary >= 100000 THEN 'High'
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
```
이 예시는 급여를 기준으로 'High', 'Medium', 'Low' 등급을 매기는 방법입니다.
---
Q4: UPDATE 문에서 CASE 문을 사용하는 방법은?
A4: UPDATE 문에서도 CASE 문을 활용하여 조건별로 필드 값을 변경할 수 있습니다.
```sql
UPDATE employees
SET salary = CASE
WHEN performance = 'Excellent' THEN salary * 1.2
ELSE salary
END;
```
이 예시는 평가 등급에 따라 급여를 차등 인상합니다.
---
Q5: MySQL에서 CASE 문과 IF 함수의 차이는 무엇인가요?
A5: CASE 문은 여러 조건을 순차적으로 검사할 때 적합하며, 가독성이 높습니다.
IF 함수는 단순한 조건문으로, 두 가지 경우(참/거짓)에 대해 처리할 때 주로 사용됩니다.
예:
```sql
SELECT IF(salary > 50000, 'High', 'Low') FROM employees;
```
---
Q6: CASE 문에서 ELSE는 꼭 써야 하나요?
A6: ELSE 절은 선택사항입니다. 없으면 모든 WHEN 조건에 맞지 않을 때 NULL을 반환합니다. 기본값을 명시하려면 ELSE를 사용하는 것이 좋습니다.
---
Q7: CASE 문 내에서 중첩해서 사용할 수 있나요?
A7: 네, CASE 문 내에 또 다른 CASE 문을 중첩해서 사용할 수 있습니다.
예:
```sql
CASE WHEN condition1 THEN
CASE WHEN condition2 THEN result2 ELSE result3 END
ELSE result1 END
```
---
Q8: CASE 문을 GROUP BY 절이나 ORDER BY 절에도 사용할 수 있나요?
A8: 네, CASE 문을 이용해 그룹핑하거나 정렬 기준을 동적으로 변경할 수 있습니다.
예:
```sql
SELECT employee_id, department,
CASE WHEN department = 'Sales' THEN 1 ELSE 2 END AS dept_order
FROM employees
ORDER BY dept_order;
```
---
Q9: CASE 문으로 숫자나 날짜 값을 반환할 수도 있나요?
A9: 네, CASE 문은 문자열뿐 아니라 숫자, 날짜, NULL 등 다양한 데이터 타입을 반환할 수 있습니다.
---
Q10: CASE 문에 잘못된 구문을 쓰면 어떤 오류가 발생하나요?
A10: WHEN 절에 비교할 조건이 없거나 END를 빼먹으면 구문 오류(Syntax error)가 발생합니다. 항상 CASE가 시작되면 END로 마무리해야 합니다.
SQL 쿼리 내에서 조건부 로직을 구현할 수 있도록 해주며, 주로 `SELECT`, `UPDATE`, `DELETE` 문에서 사용됩니다.
`CASE` 문은 두 가지 형식으로 사용할 수 있습니다: 간단한 `CASE` 문과 검색 `CASE` 문. 1. 간단한 CASE 문간단한 `CASE` 문은 특정 열의 값에 따라 다른 결과를 반환합니다.
기본적인 구조는 다음과 같습니다:```sqlCASE column_name WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_resultEND```예를 들어, 직원의 직급에 따라 급여 등급을 반환하는 쿼리는 다음과 같습니다:```sqlSELECT employee_id, employee_name, CASE job_title WHEN 'Manager' THEN 'Level 1' WHEN 'Team Lead' THEN 'Level 2' WHEN 'Developer' THEN 'Level 3' ELSE 'Level 4' END AS salary_gradeFROM employees;```
2. 검색 CASE 문검색 `CASE` 문은 조건을 기반으로 결과를 반환합니다.
이 경우, 각 조건은 `WHEN` 절에서 평가됩니다.
기본적인 구조는 다음과 같습니다:```sqlCASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_resultEND```예를 들어, 학생의 점수에 따라 학점을 반환하는 쿼리는 다음과 같습니다:```sqlSELECT student_id, student_name, score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' WHEN score >= 60 THEN 'D' ELSE 'F' END AS gradeFROM students;```
3. `CASE` 문을 사용하는 다양한 예시
3.1. 데이터 집계와 함께 사용`CASE` 문은 집계 함수와 함께 사용하여 특정 조건을 만족하는 데이터의 수를 계산할 수 있습니다.
예를 들어, 각 직급별 직원 수를 세는 쿼리는 다음과 같습니다:```sqlSELECT job_title, COUNT(CASE WHEN gender = 'M' THEN 1 END) AS male_count, COUNT(CASE WHEN gender = 'F' THEN 1 END) AS female_countFROM employeesGROUP BY job_title;```
3.2. `ORDER BY` 절에서 사용`CASE` 문은 `ORDER BY` 절에서도 사용되어 정렬 기준을 동적으로 설정할 수 있습니다.
예를 들어, 직급에 따라 직원 목록을 정렬하는 쿼리는 다음과 같습니다:```sqlSELECT employee_id, employee_name, job_titleFROM employeesORDER BY CASE job_title WHEN 'Manager' THEN 1 WHEN 'Team Lead' THEN 2 WHEN 'Developer' THEN 3 ELSE 4 END;```
4. 주의사항- `CASE` 문은 반드시 `END` 키워드로 종료해야 합니다.
- `CASE` 문 내의 조건은 순차적으로 평가되며, 첫 번째로 참인 조건의 결과가 반환됩니다.
- `ELSE` 절은 선택 사항이며, 모든 조건이 거짓일 경우 반환할 기본값을 지정합니다.
- `CASE` 문은 NULL 값을 처리할 수 있으며, NULL 값에 대한 조건을 명시적으로 처리할 수 있습니다.
5.MySQL에서 `CASE` 문은 데이터베이스 쿼리에서 조건부 로직을 구현하는 데 매우 유용한 도구입니다.
이를 통해 복잡한 데이터 집계, 정렬 및 변환 작업을 간단하게 수행할 수 있습니다.
다양한 상황에서 활용할 수 있는 `CASE` 문을 잘 이해하고 활용하면 SQL 쿼리의 유연성과 가독성을 높일 수 있습니다.
작성자:
김도현 [비회원]
| 작성일자: 1년 전
2024-09-06 13:11:09
조회수: 321 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 321 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.