Database/Oracle SQL2: 16개의 글
Conditional INSERT ALLConditional INSERT ALL을 사용하면 특정 조건에 맞는 행만 원하는 테이블에 입력할 수 있다.서브쿼리로의 결과 행을 WHEN ... THEN절에서 체크한 후 조건에 맞는 절에 기술된 테이블에 INSERT 작업을 수행한다.-- Conditional INSERT ALL SyntaxINSERT ALLWHEN 조건절1 THEN INTO [테이블1] VALUES (컬럼1,컬럼2,...)WHEN 조건절2 THEN INTO [테이블2] VALUES (컬럼1,컬럼2,...)........ELSE INTO [테이블3] VALUES (컬럼1,컬럼2,...) Subquery; 직접 실습을 하면서 이해해보자. 아래는 부서별로 연봉인상율을 다르게 하여 각각의 테이블에 입력하..
Unconditional INSERT ALLUnconditional INSERT ALL은 하나의 INSERT문으로 여러 개의 테이블에 데이터를 입력할 수 있다.INTO 절과 VALUES 절에 기술한 컬럼의 개수와 데이터 타입은 동일해야 한다.-- Unconditional INSERT ALL SyntaxINSERT ALL [INTO 테이블1 VALUES (컬럼1,컬럼2,...)] [INTO 테이블2 VALUES (컬럼1,컬럼2,...)] .......Subquery; 직접 실습을 하면서 이해해보자. 아래 예제는 emp 테이블의 데이터를 emp_ename테이블과 emp_deptno 테이블에 INSERT ALL을 사용하여 동시에 INSERT 하는 예제이다.-- scott 계정에서 emp 테이블을 이용하여 실습..
하위에서 상위로 누적 합계 구하기아래는 현재행을 시작점으로 하위에서 상위로 누적합계를 구하는 예제이다.[그림] 계산예시SELECT empno , LEVEL lv , LPAD(' ', (LEVEL-1)*2, ' ') || ename AS ename , sal , (SELECT SUM(sal) FROM emp START WITH empno = a.empno CONNECT BY PRIOR empno = mgr ) sum_sal FROM emp a START WITH mgr IS NULL CONNECT BY PRIOR empno = mgr; EMPNO LV ENAME SAL SUM_SAL------- ---------- -------------------- ---------- ---------- 7839 1 K..
Oracle10g 부터 CONNECT BY 절에서 제공하는 CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, CONNECT_BY_ISLEAF 기능에 대해서 알아보자CONNECT_BY_ROOT계층구조 쿼리에서 LEVEL이 0인 최상위 로우의 정보를 얻어 올 수 있다.SELECT LPAD(' ', 4*(LEVEL-1)) || ename ename, empno,CONNECT_BY_ROOT empno "Root empno", level FROM emp START WITH job='PRESIDENT'CONNECT BY PRIOR empno=mgr; ENAME EMPNO Root empno LEVEL------------------ ------- ----------- -------KING 7839..
계층구조 쿼리란?오라클 데이터베이스 scott 유저의 emp 테이블을 보면 empno와 mgr컬럼이 있으며, mgr 컬럼 데이터는 해당 사원의 관리자의 empno를 의미 한다.예를 들어서 아래의 데이터를 보면EMPNO ENAME SAL MGR------ ------- ------ ------ 7369 SMITH 800 7902 7902 FORD 3000 7566 - empno 7369사원의 관리자는 7902의 empno를 가진 사원이며- empno 7902사원의 관리자는 7566의 empno를 가진 사원이다.이런 상위 계층과 하위계층의 관계를 오라클에서는 START WITH와 CONNECT BY를 이용해서 쉽게 조회 할 수 있다.계층구조 쿼리 SynctaxSTART WITH- 계층 질의의 루트(부모행)로..
GROUPING SETS- GROUPING SETS 함수는 GROUP BY의 확장된 형태로 하나의 GROUP BY절에 여러개의 그룹 조건을 기술할 수 있다.- GROUPING SETS 함수의 결과는 각 그룹 조건에 대해 별도로 GROUP BY한 결과를 UNION ALL한 결과와 동일하다.- GROUPING SETS 함수를 사용하면 UNION ALL등을 사용하여 복잡하게 SQL문장을 작성했던 것을 간단하게 한 문장으로 해결 할 수 있다.아래는 GROUPING SETS함수와 GROUP BY, UNION ALL을 이용하여 동일한 결과를 출력하는 예제이다.-- GROUPING SETS 예제SELECT deptno, job, SUM(sal) FROM emp GROUP BY GROUPING SETS(deptno, ..
CUBE operatorCUBE 강좌를 보기 전에 바로 전에 있는 ROLLUP 강좌를 꼭 보기 바란다.ROLLUP 예제 SQL> SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY ROLLUP(b.dname, a.job); DNAME JOB SAL EMP_COUNT ---------- ---------- ---------- ---------- ACCOUNTING CLERK 1300 1 ACCOUNTING MANAGER 2450 1 ACCOUNTING PRESIDENT 5000 1 ACCOUNTING 8750 3 --> ACCOUNTING 부서의 급..
GROUPING과 GROUPING_IDGROUPING (컬럼)- GROUPING 함수는 ROLLUP, CUBE에 모두 사용할 수 있다.- GROUPING 함수는 해당 컬럼의 Row가 GROUP BY에 의해서 산출된 Row인 경우에는 0을 반환하고, ROLLUP이나 CUBE에 의해서 산출된 Row인 경우에는 1을 반환하게 된다.- 따라서 해당 Row가 결과집합에 의해 산출된 Data 인지, ROLLUP이나 CUBE에 의해서 산출된 Data 인지를 알 수 있도록 지원하는 함수이다.GROUPING_ID(컬럼a, 컬럼b[, …])- GROUPING(컬럼a)||GROUPING(컬럼b)의 값을 2진수에서 10진수로 변환한 값이다.아래는 GROUPING과 GROUPING_ID의 예제이다.SELECT deptno , ..
ROLLUP operatorROLLUP구문은 GROUP BY 절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진 집합 결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행 한다.SELECT절에 ROLLUP을 사용함으로써 보통의 SELECT된 데이터와 그 데이터의 총계를 구할 수 있다. 간단 예제 -- 먼저 GROUP BY를 사용해서 직업별로 급여 합계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY job; JOB SUM(SAL) ---------- ---------- ANALYST 600 CLERK 3200 MANAGER 33925 PRESIDENT 5000 SALESMAN 4000 -- ROLLUP을 사용해서 직업별로 급여 합계와 총계를..
Rollup과 Cube는?- GROUP BY 구문의 결과에 소계 및 합계 정보를 추가로 나타내 주는 함수- 복잡한 과정 없이 간단한 구문만으로 소계 정보를 쉽게 구할 수 있다.- Rollup : 단계별 소계- Cube : 모든 경우의 수에 대한 소계Rollup 기본예제Rollup 예제 1아래는 부서별 급여합계와 전체 합계를 조회하는 예제이다.SELECT deptno , SUM(sal) s_sal FROM emp GROUP BY ROLLUP(deptno); -- ROLLUP 연산으로 29025 출력 DEPTNO S_SAL------- ---------- 10 8750 20 10875 30 9400 29025 아래는 UNION ALL을 이용하여 위 ROLLUP 예제와 동일한 결과를 조회하는 예제이다.SELE..