본문 바로가기

ORACLE/SQL26

[ORACLE] LEAD LAG 앞뒤 데이터 출력 :: 마이자몽 ORACLE 앞뒤 데이터 출력 ORACLE SCOTT 계정 EMP테이블을 이용해서 사원 번호로 정렬된 데이터에서 앞 뒤 급여와 함께 출력하시오. JOIN 풀이 앞뒤 데이터를 출력하기 위해서 어떻게 쿼리를 작성해야할까요? 분석함수를 사용하지 않고 결과를 출력하기 위해서는 3개의 테이블을 조인하는 방법이 있습니다. 같은 테이블에 ROWNUM 값을 변경하여 3개의 테이블을 조인시켜 값을 얻을 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 SELECT EMPNO ,ENAME ,PREV.SAL AS PREV ,CURR.SAL AS CURR ,NEXT.SAL AS NEXT FROM ( SELE.. 2020. 4. 4.
[Oracle] 누적 합계 구하기, WINDOWING 행 기준 범위 연산 :: 마이자몽 누적 합계 구하기 EMP테이블에서 사원의 정보와 부서번호로 정렬되어 있을때 급여의 누적합계도 같이 출력해라. ORACLE SCOTT 계정으로 실습을 진행합니다. 1 2 3 4 5 6 7 8 9 10 SELECT DEPTNO ,EMPNO ,ENAME ,SAL ,SUM(SAL) OVER( ORDER BY DEPTNO ROWS UNBOUNDED PRECEDING ) AS SUM_SAL FROM EMP; 1 2 3 4 5 6 7 8 9 10 11 SELECT DEPTNO ,EMPNO ,ENAME ,SAL ,SUM(SAL) OVER( ORDER BY DEPTNO ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS SUM_SAL FROM EMP; 누적 합계를 구하기 위해.. 2020. 4. 3.
[Oracle] LISTAGG 컬럼 결과 나열하기 :: 마이자몽 1 2 3 4 5 SELECT DEPTNO ,ENAME FROM EMP ORDER BY DEPTNO; ORACLE SCOTT계정의 EMP테이블의 내용입니다. RDB에 익숙해지면 위와같은 결과가 눈에 잘 들어옵니다. 하지만, 일반 문서에서는 각 부서별로 어떤 사람들이 있는지 ','를 구분자로 데이터를 보는게 이해하기 편할 것 입니다. LISTAGG 함수 1 2 3 4 5 SELECT DEPTNO ,LISTAGG(ENAME, ',') WITHIN GROUP(ORDER BY ENAME) AS EMPS FROM EMP GROUP BY DEPTNO; LISTAGG함수를 사용하면 가로로 나열할 수 있습니다. GROUP BY한 결과에 대해서 GROUP안의 칼럼을 나열시킬 수 있습니다. MULTI INDEX 확인 LI.. 2020. 4. 2.
[Oracle] PIVOT, UNPIVOT 함수 사용 행열 전환 :: 마이자몽 행열 전환 ORACLE SCOTT 계정 EMP 테이블에서 2개의 칼럼을 이용하여 GROUP BY 결과를 확인해봤습니다. 하고 싶은 작업은 GROUPING한 칼럼을 가로 세로축으로 두고 데이터를 출력하려고 합니다. CASE 표현식이나 DECODE 함수를 이용해서 결과를 출력할 수 있습니다. [Oracle] DECODE 함수 사용 쿼리 결과 가로로 보기 :: 마이자몽 DECODE 함수 DECODE 함수를 사용하여 쿼리내의 조건문 처럼 사용할 수 있습니다. 첫번째 인자로 확인할 대상을 넣어주고 2번째 인자에 확인할 대상의 예측 값이 있으면 3번째 인자를 없으면 4번째 인자의 값을 반.. myjamong.tistory.com DECODE 함수를 사용하면 같은 함수를 계속 사용하면서 중복되는 작업을 해야합니다. .. 2020. 3. 30.
[Oracle] ROW_NUMBER, RANK, DENSE_RANK 함수 순위 매기기 :: 마이자몽 사원들의 급여를 많이 받는 순서대로 순위를 출력하시오. ORACLE SCOTT 계정의 EMPLOYEES 테이블을 이용해서 출력한 결과입니다. 순서를 매기는 방법에는 여러가지 방법이 있습니다. 분석함수를 사용하지 않는다면 아래처럼 구할것 입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT EMPNO ,ENAME ,SAL ,DEPTNO ,ROWNUM AS RNK FROM ( SELECT * FROM EMP ORDER BY SAL DESC ); SELECT 절은 ORDER BY 이전에 실행되기 때문에 SUBQUERY를 이용해서 순위를 매길수 있습니다. 전체 순위중 일부를 출력하기 위해서는 TOP-N쿼리나 ROW LIMIT CLAUSE를 사용해서 출력이 가능합니다. 자세한 내용은 아.. 2020. 3. 29.
[Oracle] OVER ... PARTITION BY 분석절 분석함수 ANALYTIC FUNCTION :: 마이자몽 사원 정보를 입력하는데, 전체 급여 평균값과 함께 출력하시오. ORACLE SCOTT 계정 EMP 테이블로 출력된 결과입니다. 위 문제를 풀기 위해 어떻게 쿼리를 작성하실건가요? 1 2 3 4 5 6 7 8 SELECT DEPTNO ,EMPNO ,ENAME ,JOB ,SAL ,ROUND((SELECT AVG(SAL) FROM EMP)) AS AVG FROM EMP; SUBQUERY를 이용할 수도 있지만... ANALYTIC FUNCTION 분석함수를 사용해서 좀 더 편한 방법으로 해결할 수 있습니다. 1 2 3 4 5 6 7 8 SELECT DEPTNO ,EMPNO ,ENAME ,JOB ,SAL ,ROUND(AVG(SAL) OVER()) AS AVG FROM EMP; 분석함수 OVER 절을 사용해서 문제.. 2020. 3. 28.
[Oracle] Multiple INSERT ALL, FIRST 다중 행 삽입 차이 :: 마이자몽 전체 INSERT & 조건부 INSERT 다중행 INSERT에서 ALL과 FIRST로 구분하기 전에 전체 INSERT와 조건부 INSERT로 구분할 수 있습니다. 말그대로 전체는 모든 행을 삽입하는 것이고, 조건부 INSERT는 조건에 따라 INSERT할 수 있는 기능입니다. Multiple Insert를 실습해보기 위해 Oracle HR 계정을 사용하겠습니다. 전체 INSERT ALL 임시 사원 테이블 생성 1 2 3 4 5 6 7 8 9 10 11 --현재 근무하는 사원 테이블 CREATE TABLE CURR_EMP AS SELECT EMPLOYEE_ID ,FIRST_NAME ,HIRE_DATE ,JOB_ID ,SALARY FROM EMPLOYEES WHERE 1=0; Multiple Insert 작.. 2020. 3. 27.
[Oracle] ROLLUP 고급 사용법 GROUPING 함수 :: 마이자몽 GROUP BY 1 2 3 4 5 6 SELECT DEPTNO ,JOB ,SUM(SAL) FROM EMP GROUP BY DEPTNO, JOB; ORACLE SCOTT 계정의 EMP 테이블을 사용해서 실습을 진행했습니다. 일반적으로 사용하는 GROUP BY 문입니다. SUM 함수를 이용해서 각 부서별, 직업별 급여의 합을 구했습니다. ROLLUP 1 2 3 4 5 6 SELECT DEPTNO ,JOB ,SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO, JOB); 위의 GROUP BY절에 ROLLUP을 추가했습니다. 결과를 부서별, 직업별 뿐만아니라 전체 급여의 합과 부서별 급여의 합을 함께 출력합니다. 그런데 여기서 의문이 드는게 있습니다. 전체 급여로도 합을 계산해주고 부서별로.. 2020. 3. 26.
[ORACLE] CTAS CREATE TABLE AS SELECT 사용 :: 마이자몽 CTAS CREATE TABLE AS SELECT ... SUBQUERY SELECT문을 이용해서 새로운 테이블을 생성하는 방식입니다. CREATE TABLE AS SELECT의 앞 글자를 따서 CTAS라고도 합니다. CTAS문은 주로 OLAP처럼 분석작업이 많은 환경에서 주로 사용하게 됩니다. 필요한 데이터를 원본데이터의 카피로 만들어 속도도 향상시킬수 있고 원데이터를 훼손시키지 않고 작업을 할 수 있습니다. CTAS 생성 Oracle HR계정 EMPLOYEES 테이블에서 90번부서에서 근무하는 사원들만 따로 모은 테이블을 생성하겠습니다. 1 2 3 4 5 6 7 8 9 CREATE TABLE DEPT_90 AS SELECT EMPLOYEE_ID ,FIRST_NAME ,SALARY FROM EMPLOY.. 2020. 3. 24.
[Oracle] ORA-00955 name is already used by an existing object 해결 :: 마이자몽 ORA-00955 ORA-00955 : 기존의 객체가 이름을 사용하고 있습니다. "name is already used by an existing object" 테이블, 뷰, 시퀀스 등 오라클 객체를 생성하려고하는데 위와 같은 에러가 발생합니다. 주로 테이블을 생성하려는데 이런 에러가 발생해서 테이블을 DROP시키려고 하는데 테이블은 존재하지 않는다고 하고... 다시 같은 이름으로 테이블을 생성하려는데 이미 사용하고 있는 이름이라고하고... 도데체 뭐가 문제인지.... 오라클에서는 객체의 타입이 다르더라도 같은 명칭으로 생성할 수 없습니다. 그래서 위와 같은 상황이 벌어졌을 때는 다른 객체 타입으로 해당 명칭이 생성되어 있을 겁니다. 문제를 해결하기 위해 Data Dictionary의 해당 유저가 어떤 .. 2020. 3. 24.