back/Oracle Database

Oracle Database(Function)

devel0per 2022. 8. 23. 20:18

.BETWEEN ~ AND

: 하나의 컬럼의 값이 범위 내에 속하는지 알아보기 위한 연산자이다. 숫자형, 문자형, 날짜형에 사용가능하다.

 

.와일드 카드

- % : 문자가 없거나, 하나 이상의 문자에 어떤 문자가 와도 상관없다.

- _ : 하나의 문자에 어떤 값이 와도 상관없다.

. LIKE : 검색하려는 값을 정확히 모를 경우에도 검색 할 수 있도록 와일드 카드와 함께 사용하여 결과를 얻는다.

 

.NULL의 정의

빈 공간이 아님

미확정(해당 상황 없음), 알 수 없는(unknown)값을 의미

어떤 값인지 알 수 없지만 값은 존재함

? 혹은 oo(무한)을 의미

연산, 할당, 비교가 불가능

오라클에서는 컬럼에 NULL값이 저장되는 것을 허용한다.

 

IS NULL / IS NOT NULL

임의의 컬럼이 NULL인지 아닌지를 비교 / 검색 한다.

특정 컬럼값이 NULL값인지를 비교할 경우 IS 연산자를 사용한다.

 

Concatenation 연산자 사용

: Select 다음에 2개 이상의 컬럼이 올 경우 이들을 ' , ' 로 연결하지만 영어 문장 처럼 보이게 하기 위해 Concatenation 연산자( || )를 사용한다. 

 

DISTINCT

: 동일한 값들이 중복되어 출력되지 않도록 하기 위해 사용하는 키워드

 

Oracle 데이터 타입

: 데이터 베이스에 저장되는 데이터는 다양한 형식으로 표현됩니다.

 

데이터 타입 의미
CHAR(size) size 크기 고정 길이 문자 데이터 타입
최대 크기 : 2000 byte
최소 크기 : 1 byte
VARCHAR2(size) size 크기 가변길이 문자 데이터 타입
최대 크기 : 4000 byte
최소 크기 : 1 byte
NVARCHAR2(size) 국가별 문자 집합에 따른 size 크기의 문자
또는 바이트의 가변 길이 문자 데이터 타입
최대 크기 : 4000 byte
최소 크기 : 1byte
LONG 가변 길이의 문자형 데이터 타입 최대 크기는 2GB이다.
NUMBER(p,s) 정밀도(p)와 스케일(s)로 표현되는 숫자 데이터 타입
NUMBER(p) 정밀도(p)와 스케일(s)로 표현되는 숫자 데이터 타입
P : 1 ~ 38
S : -84 ~ 127
DATE 날짜 형식을 저장하기 위한 데이터 타입
ROWID 테이블내 행의 고유 주소를 가르키는 64byte 문자 타입
CLOB 대용량의 텍스트 데이터를 저장하기 위한 데이터 타입
최대 크기 : 4GB
BLOB 대용량의 텍스트 데이터를 저장하기 위한 데이터 타입
최대 크기 : 4GB
BFILE 대용량의 바이너리 데이터를 화일 형태로 저장하기
위한 데이터 타입
최대 크기 : 4GB
TIMESTAMP(n) DATE 데이터 타입의 확장된 형태
n : milli second 자릿수 최대 9자리 까지 표현
INTERVAL YEAR TO MONTH 년과 월을 이용하여 기간을 지정
INTERVAL DAY TO SECOND 일, 시, 분을 이용하여 시간을 지정
두 날짜 값의 정확한 차이를 표현하는데 사용
BINARY_FLOAT 32bit 부동 소수 4byte
BINARY_DOUBLE 64bit 부동 소수 8byte

 

ORDER BY 절

: 정렬은 크기 순서대로 나열하는 것을 의미한다.

  정렬 방식에는 두가지 방식이 있다.

  작은 값이 위에 출력되고 아래로 갈 수록 큰 값이 출력되는 오름차순 정렬과(ASC)

  큰 값이 위에 출력되고 아래로 갈 수록 작은 값이 출력되는 내림차순 정렬 방식이 있습니다.(DESC)

 

  ASC(오름차순) DESC(내림차순)
숫자 작은 값 부터 정렬 큰 값 부터 정렬
문자 사전 순서로 정렬 사전 반대 순서로 정렬
날짜 빠른 날짜 순서로 정렬 늦은 날짜 순서로 정렬
NULL 가장 마지막에 나옴 가장 먼저 나옴

   

 

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=nannayabyc&logNo=220142618110 

 

오라클 scott / tiger 연습문제

후배 교육겸 긁어모은 오라클 연습문제 2014 09 11 1. 사원의 번호, 이름, 급여, 부서 번호를 출력하여라. ...

blog.naver.com

 

 

 

 

 


 

○ 문제

 

 

※ 주의할 점

 

1. 커미션이 NULL인 사원들을 0으로 계산해야 한다.

 

 

 

[ 테스트 코드 및 결과 ]

select deptno 사원번호, sal 급여, nvl(comm, 0) 커미션, (nvl(comm, 0 )+ sal)*12 연봉
from emp
ORDER BY (nvl(comm, 0 )+sal)*12;

 

nvl 함수를 이용해서 굉장히 손쉽게 원하는 값을 출력할 수 있었다.

 


 

○ 문제

 

 

 

※ 주의할 점

 

1. 6개월이라는 시간을 더해줄 때 무슨 함수를 적절하게 써야할 지 생각해야한다.

 

 

 

[ 테스트 코드 및 결과 ]

 

select ename 이름, hiredate 입사일, add_months(hiredate, 6)"6개월후"
from emp;

이 문제도 add_months 함수를 통해서 hiredate(입사일)에 6개월을 더해 원하는 값을 출력하는 데 성공했다.

 


 

○ 문제

 

※ 주의할 점

1. 급여가 적은 것부터 출력해야 하므로 적절한 ORDER BY를 사용

2. 커미션이 없는 사원은 0이 아니라 'NO Commission' 이라는 말이 출력되어야 하므로 decode() 사용.

 

 

[ 테스트 코드 및 결과 ]

 

select ename 이름, sal 급여, decode(nvl(comm, 0), 0, 'No Commission', comm) 커미션
from emp
order by sal asc;

 

decode() 함수를 통해서 comm 컬럼에 존재하는 0의 값들을 'No Commission' 으로 출력되게 만들어서 원하는 값을 출력했다.

 


○ 문제

 

 

 

※ 주의할 점

1. decode 함수를 얼마나 센스 있게 사용하는게 관건.

 

 

 

[ 테스트 코드 및 결과 ]

 

select ename 이름, job 직무, sal 급여,
decode(job, 'CLERK', sal * 1.2, 'SALESMAN', sal * 1.15, 'ANALYST', sal * 1.1, 'MANAGER', sal * 1.05, sal) "인상 후의 급여"
from emp;

다소 복잡하다고 생각할 수 있지만, decode 함수의 단순한 형태를 숙지하고 실수하지 않게 천천히 작성하면 무난히 출력이 가능하다.