본문 바로가기

자바스프링웹공부(2024)/마이에스큐엘

2024.08.12. 단일행함수 - 2. - 변환함수, 제어흐름함수, 시스템정보함수.

반응형
select last_name, ifnull(commission_pct, 'No Commission')
-- (==)select last_name,  if(commission_pct is null, 'No Commission', commission_pct)
-- (==)select last_name,  if(commission_pct is not null, commission_pct, 'No Commission')
from employees;

 (1) 변환함수
- date_format(날짜, 형식) : 날짜를 형식에 맞게 출력함.

select now(), date_format(now(), '%Y/%M/%d') as Now;
select now(), date_format(now(), '%y_%M_%d %W %H:%i:%s') as now;
select employee_id, date_format(hire_date, '%Y-%M-%d %W') as "입사일" from employees;


- cast(값 as 데이터타입) : 값을 지정한 데이터타입으로 변환함.
- signed : 부호있는 정수형.

select cast('123' as signed), cast('-123' as signed);
select cast('2022@03@18' as date) date; -- 문자형을 날짜로 출력

문자형 날짜로 출력함.



(2) 제어흐름 함수 
- if(조건문, 참일때 반환값, 거짓일때 반환값) : 조건문이 참이면 두번째 인수, 거짓이면 세번째 인수가 반환됨.
select if(100>200, '참', '거짓');

- ifnull(인수1, 인수2) : 인수1이 null이 아니면 인수1을 반환하고,  인수1이 null이면 인수2가 반환됨.
                                    null 값을 실제값으로 변환해 주는 함수

select employee_id, last_name, salary, ifnull(commission_pct, 0) from employees;

select employee_id, last_name, salary, commission_pct, (12*salary)+(12*salary*ifnull(commission_pct,0)) as "연봉" from employees;
-- 산술식에 null 값이 포함되어 있는 경우 결과는 무조건 null이다. ifnull함수를 사용하여 null에는 0을 넣어서 결과유도함.


- nullif(인수1, 인수2) : 두 인수가 같으면 null 이 반환되고, 두 인수가 다르면 첫번째 인수값이 반환된다.

select nullif(100, 100), nullif(100, 200);
-- < 결과 >
-- nullif(100, 100), nullif(100, 200)
-- 	NULL, 			'100'


- case식 : SQL 구문

-- [문법]  case 비교값  when 값1 then 결과1
--  			when 값2 then 결과22
--			 ... ...
--  			else 기본값
--  	end              default  값  
       
select  employee_id, last_name, department_id,
	case department_id  	when 10 then '부서 10'
				when 50 then '부서 50'
        	            	when 100 then '부서 100'
            	        	when 150 then '부서 150'
                	    	when 200 then '부서 200'
				else '기타 부서'
	end as "부서 정보"
from employees;




 (3) 시스템정보함수 
- user() = current_user() = session_user() : 현재 사용자 정보를 반환함.
- database() = schema() : 현재 DB 정보 반환함.
- version() : 현재 MySQL 버전 정보를 반환함.

select user(), database(),  version();



-- <연습문제>
 1. employees 테이블로부터 사원들의 last_name과 commission_pct를 출력하되 커미션을 받는 사원은 자신의 커미션 비율을 출력하고, 커미션을 받지 않는 사원은 "No Commission"을 출력하는 구문을 작성하시오.

select last_name, ifnull(commission_pct, 'No Commission')
-- (==)select last_name,  if(commission_pct is null, 'No Commission', commission_pct)
-- (==)select last_name,  if(commission_pct is not null, commission_pct, 'No Commission')
from employees;


2. employees 테이블로부터 JOB_ID 값을 기반으로 모든 사원의 등급을 표시하는 query를 작성하시오.

select  employee_id, last_name, job_id, 
	case job_id when 'AD_PRES' then 'A'
				when 'ST_MAN' then 'B'
				when 'IT_PROG' then 'C'
				when 'SA_REP' then 'D'                    
				when 'ST_CLERK' then 'E'
				else '0'
	end as "grade"
from employees;

 

반응형