Oracle Database(Function)
.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 함수의 단순한 형태를 숙지하고 실수하지 않게 천천히 작성하면 무난히 출력이 가능하다.