본문 바로가기

ORACLE/SQL26

[Oracle] 오라클 DELETE, TRUNCATE 차이(HIGH WATER MARK) :: 마이자몽 오라클에서는 데이터를 삭제하는 명령어로 DELETE, TRUNCATE, DROP 이 있습니다. DROP의 경우 테이블의 데이터까지 전부삭제를 해주고 DELETE와 TRUNCATE은 테이블을 남기고 데이터만 삭제합니다. DELETE와 TRUNCATE 차이 DML과 DDL DELETE와 TRUNCATE의 가장 큰 차이는 DML과 DDL이라는 것입니다. DDL의 경우 하나의 명령이 트랜잭션의 시작과 끝이기 때문에 바로 반영이 되어버립니다. 그래서 TRUNCATE은 ROLLBACK이 불가능한 반면 DELETE은 DML 명령어이므로 TRANSACTION 단위로 ROLLBACK과 COMMIT이 가능합니다. 저장공간 반납과 유지 EMP 테이블에서 192번사원을 찾는다고 가정해봅니다. SQL 명령 순서에 의해서 FRO.. 2020. 3. 23.
[Oracle] 오라클 WITH, RECURSIVE WITH 재귀 쿼리 사용 :: 마이자몽 나라별 급여 평균의 평균보다 많이 급여를 주고 있는 나라와 나라의 평균 급여를 구하시오. (나라명과 나라의 평균 급여만 출력) 위의 문제를 풀기 위해 어떻게 해야할까요? 나라별 평균 급여를 조인문으로 이용해서 구하는 쿼리를 쿼리A라고 하겠습니다. 평균의 평균값을 구하기 위해서는 쿼리A를 SUBQUERY로 사용해서 평균을 구할 수 있습니다. 평균의 평균값보다 높은 결과를 출력하기 위해서 쿼리A 결과의 PROJECTION이 필요합니다. 위 과정을 생각해봤을때 쿼리A는 전체 쿼리에서 2번 사용해야합니다. 2번 사용하게되면 퍼포먼스도 낮아지고 쿼리의 가독성도 떨어지게 됩니다. 이러한 문제를 해결하기 위해서 WITH절을 사용해서 쿼리문을 재사용할 수 있습니다. 실습은 Oracle HR 계정으로 진행했습니다. WI.. 2020. 3. 23.
[Oracle] Correlated Subquery 상호연관쿼리 :: 마이자몽 Correlated Subquery Correlated Subquery는 내부 Subquery에서 외부테이블의 값을 참조할 때 사용됩니다. Subquery와는 다르게 Inner Query 부터 Outer Query 순서대로 실행되는 것이 아니라 Outer Query에서 읽어온 행을 갖고 Inner쿼리를 실행하는 것을 반복하여 결과를 출력해줍니다. Outer Query와 Inner Query에서 같은 테이블을 참조한다면 Outer Query의 테이블에 Alias를 사용해서 구분해줍니다. 예시문제 Oracle HR 계정 Employees 테이블을 사용해서 소속된 부서의 평균 급여보다 많은 급여를 받는 사원을 출력하시오. 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT FIRST_NAME ,.. 2020. 3. 21.
[Oracle] DECODE 함수 사용 쿼리 결과 가로로 보기 :: 마이자몽 DECODE 함수 DECODE 함수를 사용하여 쿼리내의 조건문 처럼 사용할 수 있습니다. 첫번째 인자로 확인할 대상을 넣어주고 2번째 인자에 확인할 대상의 예측 값이 있으면 3번째 인자를 없으면 4번째 인자의 값을 반환해줍니다. CASE 표현식과는 다르게 범위식의 조건을 넣을수 없고 2번째 인자가 있는지 없는지 확인합니다. Oracle Scott 계정으로 DECODE 함수 사용 예시를 알아보겠습니다. 세로결과를 가로로 1 2 3 4 5 6 SELECT DEPARTMENT_ID ,SUM(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID 2020. 3. 20.
[Oracle] NON-EQUI JOIN 비등가 조인 정리 :: 마이자몽 NON-EQUI JOIN 두개의 테이블을 특정한 키를 기준으로 합쳐서 데이터를 표현하는 것을 JOIN이라고 합니다. 사원 테이블에 부서 번호가 있고 부서 테이블에 부서명이 있어서 사원의 이름과 부서명을 확인하기 위해서 사원테이블의 부서번호와 부서 테이블의 부서번호로 JOIN 시켜 데이터를 표현할 수 있습니다. 이렇게 특정 칼럼은 같다는 형식으로 조인을 시키는 것은 EQUI JOIN이라고 합니다. 그럼 NON-EQUI JOIN은 뭘까요? 상호평가 등급, 성적 등급과 같이 특정 범위와 등급을 지정하고 해당 범위에 들었을 때 등급으로 데이터를 표현하기 위해 사용되는 것이 NON-EQUI JOIN입니다. NON-EQUI JOIN은 EQUI JOIN과 다르게 특정 칼럼을 범위로 JOIN 시킵니다. Oracle S.. 2020. 3. 19.
[Oracle] 오라클 GROUP BY ROLLUP, CUBE, GROUPING SETS 정리 :: 마이자몽 GROUP BY 특정 칼럼들을 기준으로 그룹화하여 합산, 평균, 최고값, 최소값 등의 수치를 확인하기 위해 GROUP BY 절을 이용합니다. 부서별 연봉 평균, 반 시험 최고 점수, 매장별 재고량과 같이 하나의 기준으로 그룹을 시킬때는 한가지 결과만 확인하면 됩니다. 하지만 두 가지 이상의 기준으로 GROUP BY 시켰을때는 표형식으로 데이터를 확인하고 싶다는 생각이 들것입니다. 부서별 팀별 연봉 평균, 반별 과목별 시험 최고 집수, 매장별 카테고리별 재고량처럼 2개의 기준이 있을때는 가로 세로 각각 기준으로 표형태로 출력되는 데이터가 처음 떠올랐을 것입니다. 예를 들어 부서별 직업별 연봉 합산금액을 알고 싶다면 가로에 부서, 세로에 직업을 놓은 표형태와 각각 그룹별로 따로따로 그리고 전체 합산도 자동으.. 2020. 3. 18.
[Oracle] SQL SELECT 쿼리 실행 순서 처리 과정 :: 마이자몽 SELECT 쿼리 실행 순서 SQL 쿼리문을 작성할때 사용되는 WHERE, GROUP BY, ORDER BY 절과 같은 구문을 실행하는데 순서가 존재합니다. 이 순서에 의해서 쿼리가 처리되고 어떻게 쿼리문을 작성하느냐에 따라 퍼포먼스의 차이가 발생합니다. ORACLE HR 계정의 EMPLOYEES 테이블로 어떤 처리 과정에 의해서 SELECT 쿼리가 실행되는지 알아 보겠습니다. 1 2 3 4 5 6 7 8 9 10 11 12 SELECT JOB_ID ,AVG(SALARY) SAL_AVG FROM EMPLOYEES WHERE SALARY > 13000 GROUP BY JOB_ID HAVING COUNT(*) > 1 ORDER BY SAL_AVG DESC; 위의 쿼리문을 실행했을 때의 최종 결과입니다. 화면.. 2020. 3. 17.
[Oracle] 오라클 '&' 문자 치환변수 사용하기 :: 마이자몽 데이터를 확인하기 위해 쿼리를 작성하고 확인하고... 같은 쿼리내에서 특정 값만 변경해서 데이터를 확인하고 싶을때 어떻게 하시나요? 예를들어 특정 부서에 어떤 직원들이 있는지 확인하고 싶은데... 영업부서를 확인하고 인사부서의 직원들을 확인하기 위해 WHERE절의 Value값을 계속 변경해가면서 확인하시나요? 한 두개면 몰라도... 부서가 20개씩 있고 이러면 일일히 쿼리내용 변경해가면서 확인하기 힘들잖아요? 그럴때 치환변수 '&'를 사용하시면 좀 더 편하게 작업을 할 수 있습니다. 치환변수에 대해서 알아보기 위해 Oracle의 scott 계정안에 있는 EMP 테이블을 갖고 실습해 보겠습니다. 오라클 치환변수 오라클 '&' 문자 1 SELECT * FROM EMP WHERE SAL >= 1000; EMP.. 2020. 3. 16.
[Oracle] 오라클 페이징 쿼리 쉽게 만들기 Row Limiting Clause 사용 :: 마이자몽 오라클 페이징 오라클 데이터베이스 페이징 쿼리는 어떻게 작성할까요? 포털 사이트에서 검색을 했을 때, 게시판 형태의 웹사이트에서 결과를 볼때, 한번에 모든 결과를 볼 수 없기 때문에 페이징 처리를 하여 화면에 출력되는 게시물을 제한합니다. 그럼 이런 변동적인 결과를 보여주기 위해 오라클 페이징 쿼리는 어떻게 짤까요? Top-N Query를 사용할 수 있지만, 오라클 데이터베이스에서는 Row Limiting Clause라는 Feature를 제공합니다. Oracle Database scott 계정에 기본적으로 존재하는 EMP 테이블을 갖고 페이징 처리를 해보겠습니다. Top-N Query Top-N Query는 상위 N개 데이터를 보여주는 쿼리입니다. 페이징을 하기전에 데이터를 어떤 순서로 정렬해서 보여줄건.. 2020. 3. 15.
[ORACLE] 문자열 대소문자 함수 LOWER, UPPER, INITCAP :: 마이자몽 오라클 대소문자 함수오라클에서 문자열 대소문자 변환함수에 대해 알아보자. LOWER 함수LOWER 함수는 모든 문자를 소문자로 바꿔주는 함수이다.명령 : SELECT LOWER([문자열]) FROM [테이블]; QUERY1SELECT LOWER('MYJAMONG MYjamong') FROM DUAL;cs RESULT UPPER 함수UPPER함수는 모든 문자를 대문자로 변환해주는 함수이다.명령 : SELECT UPPER([문자열]) FROM [테이블]; QUERY1SELECT UPPER('MYJAMONG MYjamong') FROM DUAL;cs RESULT INITCAP 함수INITCAP 함수는 문자열의 첫번째 문자를 대문자로 변환해주는 함수이다. 문자열의 기준을 공백으로 이해하는데 특수기호 또한 구분자.. 2019. 9. 15.