안녕하세요 이승혁 입니다.
이번 시간은 단일행 함수 마지막 시간이 될 것 같습니다.
다음 포스팅에서는 복수행 함수에 대해 다루겠습니다.
※ 복습
단일행 함수
문자 함수
length - 데이터의 길이 length ( col )
lpad & rpad - 데이터 좌, 우 공백 채우기 lpad & rad ( '출력할 문자 / 칼럼 ', '칸 개수', '채울 문자')
trim & rtrim & ltrim - 데이터 좌, 우, 좌우 공백 제거 trim( col ), rtrim( col , ' 문자, 문자 ' )
replace - 특정 값 다른 값으로 대체 replace ( col , '문자' , '문자' )
concat - 두 데이터를 연결해서 출력 concat( col, col)
숫자 함수
round - 반올림 round( num, 반올림할 위치 지정 ) , 1의 자리 : -1 , 소수점 첫째 : 0
trunc - 버림 trunc( num, 버림할 위치 지정 ) , 1의 자리 : -1 , 소수점 첫째 : 0
mod - 나머지 mod( 피제수, 제수 )
power - 지수 함수 power( 상수, 지수 )
log - 로그 함수 log( 밑, 진수 )
ln - 밑수가 자연 상수(e)인 로그 함수 ln(exp(진수))
날짜 함수
month_between - 날짜 - 날짜의 개월 수 month_between( date, date )
add_months - 날짜 + 개월수 add_months( date, num )
next_day - 특정 날짜에서 가장 가까운 특정 요일 next_day( date, '요일')
last_day - 특정 날짜의 말일 last_day( date )
변환 함수
to_char - 문자형 변환 to_char( num or date , '요일의 형식 - yyyyy, year, mon, mm, day, dy, dd, d )
to_number - 숫자형 변환 to_number( char or date )
to_date - 날짜형 변환 to_date ( char or num )
※ 일반 함수
1. nvl 함수
2. decode 함수
3. case 문
ㆍ 단일행함수 - 일반함수 nvl
null값을 처리하는 함수
null값 대신 다른 값을 출력하는 함수
select ename,nvl(to_char(mgr),'no manager')
from emp;
null(칼럼,대신할값)
실습 1. nvl 사용해보기, null 대신 0 뽑기
select ename,nvl(comm,0) nvl
from emp;
실습 2. nvl - 숫자형 데이터에 문자형 값 출력해보기. mgr이 null인 사원은 'no manager' 출력하기
select ename,nvl(to_char(mgr),'no manager')
from emp;
nvl 함수를 사용할 때는 null을 체크할 칼럼의 데이터유형과, 대체할 값의 유형이 같아야 합니다.
mgr = 숫자형 데이터
'no manager' = 문자형 데이터
따라서 mgr을 to_char함수를 사용해 문자형으로 변경해 사용합니다.
ㆍ 단일행함수 - 일반함수 docode
SQL로 if문을 구현하는 함수입니다.
if문이란 조건을 사용할 수 있게 해주는 함수입니다.
if(a>10) 처럼 조건을 부여해서 해당 조건에 충족할 때, 아닐 때 수행할 코드를 나누어 작성합니다.
decode(데이터,조건,맞을때,아닐때)
실습 3. decode 사용해보기, 부서번호가 10이면 보너스 5000을 아니면 0을 출력해보기
select ename,deptno,decode(deptno,10,5000,0) as bonus
from emp;
실습 4. decode 사용해보기 2, 조건 2개를 사용 부서번호 10이면 5000, 20이면 4000, 아니면 0 보너스를 출력해보기
select ename,deptno,decode(deptno,10,5000,20,4000,0) as bonus
from emp;
실습 4처럼 조건을 하나씩 추가해 갈 수 있습니다.
※ decode 단점 !
등호비교(=) 만 가능합니다. 따라서 10보다 크다, 작다의 비교는 수행할 수 없습니다.
ㆍ 단일행함수 - 일반함수 case 문
등호비교가 가능하게 해주는 함수
case when 데이터 >= 비교값 and when 데이터 >= 비교값 .... esle 아닐시값 end
실습 5. 나이가 30 이상이면 5000, 26이상이면 4000, 아니면 0 보너스 출력해보기
select replace(ename,substr(ename,-2,1),'*') ename, case when age>=30 then 5000
when age>=26 then 4000
else 0 end bonus
from emp11;
--가독성을 위한 case문 작성법
※ 실습 데이터
1. 테이블 생성
create table skin(cusno number(10),
gender varchar2(10),
age varchar2(10),
job varchar2(10),
marry varchar2(10),
car varchar2(10),
buy_yn varchar2(10));
2. 데이터 로드
좌측 테이블 - SKIN 테이블 우클릭 - 데이터 임포트 - 파일 : 찾아보기 - skin.csv 로드 - 계속 다음 클릭 - 임포트 확인
실습 6. case 문 사용해보기, 고객 등급 나누어보기. 직업과 결혼을 했으면 A, 결혼만 했으면 B, 직업만 있으면 C, 둘다 없으면 D 등급으로 고객을 나누어 쿠폰을 발급할 대상을 파악해보기~
select cusno, marry, job, case when ( marry = 'YES' and job ='YES' ) then 'A'
when ( marry = 'YES' and job = 'NO' ) then 'B'
when ( marry = 'NO' and job = 'YES' ) then 'C'
else 'D' end 등급
from skin;
등급 글자를 더블클릭하면 order 절을 사용하지 않아도 정렬을 할 수 있습니다.
오늘 포스팅은 여기서 마치겠습니다.
다음 포스팅에서는 여러개의 행을 받아 하나의 행만을 출력하는 복수행 함수에 대해 실습을 진행하겠습니다.
읽어주셔서 감사합니다.
'프로그래밍 > SQL' 카테고리의 다른 글
SQL-12) JOIN 문법 -2 , ansi join : sqld, mysql, sql 자격증,DB 손해보험 (0) | 2020.10.29 |
---|---|
SQL-11) JOIN 문법 - 1 (오라클 조인 문법) (0) | 2020.10.28 |
SQL-10) 데이터 분석 함수 (0) | 2020.10.27 |
SQL-9) group by, having , 함수(function) - 5 (0) | 2020.10.27 |
SQL-7) 함수(function) - 3 (0) | 2020.10.25 |
SQL-6) 함수(function) - 2 (0) | 2020.10.23 |
SQL-5) SQL Developer install (0) | 2020.10.23 |
SQL-4) Order 절, 함수(function) (0) | 2020.10.22 |