SQL에서 제어 흐름 함수는 조건에 따라 다르게 결과를 반환하거나 처리할 수 있도록 하는 기능을 제공합니다. 이는 조건부 연산과 값 대체에 유용하게 사용됩니다.
1. IF() 함수
함수 | 설명 | 예시 | 결과 예시 |
---|
IF() | 조건이 참일 때 첫 번째 값을, 거짓일 때 두 번째 값을 반환 | SELECT IF(1 = 2, '참', '거짓'); | '거짓' |
| | SELECT ename, sal, IF(sal < 2000, '적음', '많음') FROM emp; | '적음' or '많음' |
예제
SELECT ename, sal, IF(sal < 2000, '적음', '많음') FROM emp;
2. IFNULL() 함수
함수 | 설명 | 예시 | 결과 예시 |
---|
IFNULL() | 첫 번째 값이 NULL 일 경우 두 번째 값을 반환 | SELECT IFNULL(comm, 0) FROM emp; | 0 (NULL일 경우) |
예제
SELECT sal, comm, sal * 12 + IFNULL(comm, 0) FROM emp;
3. CASE 문
구문 | 설명 | 예시 | 결과 예시 |
---|
CASE | 여러 조건을 평가하여 맞는 결과 반환 | SELECT CASE WHEN deptno = 10 THEN '관리' ELSE '직원' END AS 직책명 FROM emp; | '관리' 또는 '직원' |
예제
SELECT empno, ename, deptno, sal AS '현재급여',
CASE deptno
WHEN 10 THEN sal * 1.1
WHEN 20 THEN sal * 1.2
ELSE sal
END AS '인상급여'
FROM emp;
empno | ename | deptno | 현재급여 | 인상급여 |
---|
7369 | SMITH | 20 | 800.00 | 960.00 |
7499 | ALLEN | 30 | 1600.00 | 1600.00 |
4. DECODE_ORACLE() 함수
DECODE_ORACLE() 함수는 조건에 따라 값을 반환하는 함수로, Oracle의 DECODE와 유사합니다. 값이 지정된 조건과 일치할 경우 해당 결과를 반환하고, 그렇지 않으면 기본값을 반환합니다.
함수 | 설명 | 예시 | 결과 예시 |
---|
DECODE_ORACLE() | 주어진 조건에 따라 다른 값을 반환 | SELECT DECODE_ORACLE(job, 'ANALYST', '분석가', 'CLERK', '서기', '매니저', '기타') FROM emp; | '분석가' , '서기' , '매니저' , '기타' |
예제
SELECT empno, ename,
DECODE_ORACLE(job, 'ANALYST', '분석가', 'CLERK', '서기', 'MANAGER', '매니저', 'SALESMAN', '영업사원', '직책 미정') AS 직책명
FROM emp;
SQL 스크립트 작성 및 실행
SQL 스크립트는 여러 SQL 문을 한 번에 실행할 수 있도록 외부 파일에 저장한 것입니다. 이를 통해 반복되는 작업을 자동화할 수 있습니다. .sql
확장자로 저장하며, 데이터 삽입, 업데이트, 삭제와 같은 작업을 포함할 수 있습니다.
SOURCE /path/to/your_script.sql;
SOURCE C:/MariaDB/ex03.sql;
SOURCE /Users/your_name/MariaDB/ex03.sql;
스크립트 예제 (ex03.sql)
SELECT ename, sal,
CASE job
WHEN 'ANALYST' THEN '조사'
WHEN 'CLERK' THEN '사원'
WHEN 'MANAGER' THEN '관리'
WHEN 'PRESIDENT' THEN '대표'
ELSE '영업'
END AS '한글명 표시'
FROM emp
WHERE deptno = 30;
예제 2: 급여 인상률 계산
SELECT empno, ename, job, sal AS '현재급여',
CASE
WHEN job = 'ANALYST' THEN sal * 1.1
WHEN job = 'CLERK' THEN sal * 1.5
WHEN job = 'MANAGER' THEN sal * 1.2
WHEN job = 'SALESMAN' THEN sal * 1.3
ELSE sal
END AS '인상급여'
FROM emp;
empno | ename | job | 현재급여 | 인상급여 |
---|
7369 | SMITH | CLERK | 800.00 | 1200.00 |
7566 | JONES | MANAGER | 2975.00 | 3570.00 |
이와 같이 제어 흐름 함수와 스크립트 작성 방법을 활용하면 SQL에서 복잡한 조건 평가 및 자동화된 데이터 작업을 쉽게 처리할 수 있습니다.