오라클 공부

오라클 금요일 숙제~

함수

문자함수

숫자함수

날짜처리함수

변환함수

to_char 란 무엇인가요

to_date는 무엇인가요

to_date는 무엇인가요

Sysdate 는 무엇인가요

MONTHS_BETWEEN 은 무엇인가요

NEXT_DAT 는 무엇인가요

LAST_DAT는 무엇인가요

ADD_MONTHS는 무엇인가요

예문

예문

예문

예문

예문

예문

예문

예문

개념

개념

개념

개념

개념

개념

개념

concat

개념 : 연결연산자

예문 : select ename || job from emp

instr

concat 과 동일하 표현은 || 가 있습니다

개념 : 문자의 위치를 리턴하는 함수

예문: select instr(ename,'a',1,1) from emp

substr

개념 :문자를 갯수만큼 추출하는 함수

예문 : select substr(ename,1,2) from emp

replace

개념 :문자를 대체하는 함수

예문 :select replace ('100-001','0','*') from dual;

lpad

개념 : 문자의 자리를 고정시킨 후 왼쪽부터 채우다

예문 : select lpad('abcd',10,'*') from dual

rpad

개념 : 문자의 자리를 고정시킨 후 오른쪽부터 채우다

예문 : select rpad('abcd',10,'*') from dual

floor

개념: 소수점 버리기

예문: select floor(1.234) from dual

round

개념: 소수점 특정 자릿수에서 반올림

예문: select round(1.234,2) from dual

trunc

개념: 소수점 특정 자릿수에서 버리기

예문 : select trunc(12.3456,2) from dual

Group by/rollup

부서와,직업별 부서번호, 직무,연봉의 합계를 구해주세요

select deptno,job,sum(sal) from emp group by deptno,job order by deptno asc;

부서별 급여의 합과 전체 급여의 합 rollup

select deptno,job,sum(sal) from emp group by rollup(deptno,job)

만약 전체 급여 합만 출력하고 싶다면

select deptno,job,sum(sal) from emp group by rollup((deptno,job))

부서별 급여 합만 출력

select deptno,job,sum(sal) from emp group by deptno,rollup(job)

rollup 3개를 준경우

select deptno,job,ename,sum(sal) from emp group by rollup(deptno,(job,ename))

select deptno,job,ename,sum(sal) from emp group by deptno,rollup((job,ename));

이 친구는 부서별 총 합계를 마지막에 구해주다

마지막 합계를 구해주지 않는다

오라클 Grouping() 과 Grouping_id() group by rollup

개념 : Grouping은 2진수로 값이 있으면(컬럼값이 null 포함) 0, 더이상 그룹핑할게 없다(null) = 소계 일때 1 을 반환합니다

개념 :grouping_id() 는 인자값이 소계일때 그것들을 나열하여 2진수를 10진수로 변환

grouping_id(A,B) A와 B는 컬럼 명

click to edit

grouping_id(1,A,B)

click to edit

1,A,B 포맷으로 계속 가다 가장 먼저 빠그라 지는건 B =(null)소계, 1은 A,B 포맷이 전부 빠그라 지면 A=(null) 소계 B=(null) 소계 되면 1 컬럼이 (null) 컬럼 값에서 (null) 소계로 바뀜

데이터

데이터 크기 바꾸기

ALTER TABLE [테이블명] MODIFY ([컬럼명] VARCHAR2(2000))

날짜 포맷

파라미터 보기

select * from nls_session_parameters;

날짜 포맷 바꾸기

ALTER SESSION SET NLS_DATE_FORMAT = 'rrrr/mm/dd';

1/4 분기 설정

SELECT TO_CHAR(HIREDATE,'Q'). HIREDATE FROM EMP;

오라클 CASE WHEN

count(*) over() :전체행 카운트

count(*) over (partition by 컬럼)

그룹단위로 나누어 카운트

날짜 빼는 방법

날짜 포맷을 mm/dd 로 한다 연도는 사용안할거임

종료일 - 시작일 하면 몇일 남았는지 알 수 있따

문자형식

substr(자를컬럼,보이고싶은것의 숫자,몇번째까지 보이고 싶은지)

집계함수

max

click to edit

select max(nvl(sum(decode(부서번호,10,연봉)),0)) as 부서번호10,

max(nvl(sum(decode(부서번호,20,연봉)),0)) as 부서번호20,

max(nvl(sum(decode(부서번호,30,연봉)),0)) as 부서번호30

from 사용자정보

group by 부서번호

max가 없다면 부서별로 출력되기 때문에 층이 나눠진다

CONNECT BY LEVEL

연속된 숫자의 나열에 사용됩니다

select level as num from dual connect by level <=10

sum(case when then decode() end) over(order by rows between unbounded preceding and current row)

select deptno,job,sum(sal) from emp group by rollup(deptno,job)

deptno기준으로 job 이 출력된다 , 연봉은 deptno와 job에 해당하는 연봉이 출력된다

job이 더이상 부서에 없다면 job은 null 이 되고 부서의 연봉 누적합계가 출력된다