본문 바로가기

Database/Oracle

(12)
[Oracle] Oracle Join 종류 정리 #2 테이블 3개에 대해서 Join결과를 확인해 본다. 아래와 같이 테스트 테이블 3개가 존재한다. Employees 테이블 전체 행 (PK: EMPLOYEE_ID, FK: DEPARTMENT_ID) - 88번 row는 department_id가 nullNOEMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILDEPARTMENT_ID1198DonaldOConnellDOCONNEL502199DouglasGrantDGRANT503200JenniferWhalenJWHALEN104201MichaelHartsteinMHARTSTE205202PatFayPFAY206203SusanMavrisSMAVRIS407204HermannBaerHBAER708205ShelleyHigginsSHIGGINS1109206Willi..
[Oracle] and system_cd(+) = 'COM' 과 같이 상수값 비교 조건에도 (+)가 붙는 이유 Oracle의 옛날 조인 문법(= “오라클 전용 OUTER JOIN 문법”) 에서 (+)를 사용하는 경우,AND 절의 모든 조건이 "조인 대상 테이블" 기준으로 일관되게 처리되어야 하기 때문입니다.🔹배경 설명예를 들어 아래와 같은 쿼리가 있다고 합시다:SELECT a.user_id, b.system_cdFROM user_info a, system_info bWHERE a.user_id = b.user_id(+)AND b.system_cd(+) = 'COM'; 🔹 (+)의 의미(+)는 해당 테이블이 OUTER JOIN의 “부수적인 테이블” 이라는 뜻입니다.즉, b 테이블이 없어도 a의 데이터는 모두 나오게 하라는 의미죠.🔹 그런데 왜 상수 조건에도 (+)가 붙을까?Oracle의 구식 (+) 문법에서는..
[Oracle] Oracle Join 종류 정리 Oracle을 포함하여 DB마다 Join은 기본적인 연산 기능이다. ANSI로 표준화되어있지만 여전히 Oracle전용 문법을 많이 사용하고 있으므로 Oracle 문법도 같이 비교하면서 Join을 정리해 본다. Employees 테이블 전체 행 (PK: EMPLOYEE_ID, FK: DEPARTMENT_ID) - 88번 row는 department_id가 nullNOEMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILDEPARTMENT_ID1198DonaldOConnellDOCONNEL502199DouglasGrantDGRANT503200JenniferWhalenJWHALEN104201MichaelHartsteinMHARTSTE205202PatFayPFAY206203SusanMavrisSMAVR..
[DB] Oracle Docker 이미지로 CDB, PDB 기반 설치하기 오라클 12c버전부터 Container Database, Pluggable Database 개념이 도입되어 하나의 Oracle Databse Instance에서 여러개의 스키마를 격리하여 설치할수 있게 되었다. Oracle 공식 Repository에서는 Docker Image를 제공하고 있으므로 이를 이용해서 Oracle을 설치해 보도록 한다. https://container-registry.oracle.com 위 주소가 공식 Repository 주소이다. 접속을 한 후에 Oracle 계정으로 Sign in을 한다. (계정이 없으면 생성 필요) 계정으로 로그인 한 후에 Database -> enterprise를 선택한 후 우측에 약관 동의에 동의를 수행한다. 이를 안하면 docker login시에 계속 ..
[Oracle] 오라클 기본 명령어 #1 데이터 베이스 내 모든 테이블 DELETE 명령어 추출 SELECT 'DELETE FROM "' || TABLE_NAME || '";' FROM user_tables; 데이터 베이스 내 모든 테이블 DROP 명령어 추출 SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables; 전체 테이블 DROP 후 시퀀스 삭제 purge recyclebin;
[Oracle] 특정 테이블에 데이터가 없을 시 기본값 출력하기 DB쿼리를 짤때 값이 없을 경우에는 디폴트 값을 보여줘야하는 시나리오가 종종 나오게 된다. 그럴경우에 한번에 초기 테이블을 만들때 다음과 같은 방법으로 해볼 수 있다. 아래의 테이블 내용은 STR_ID 별로 물품 카테고리와 물품들 리스트를 보관하는 테이블의 데이터 모습이다. 여기서 특정 STD_ID에 해당하는 카테고리/물품 내용이 저장되어 있지 않을 경우 디폴트 STR_ID = 0인 값들로 무언가 해보고자 한다면 과연 어떻게 초기 테이블을 가져갈 수 있을까? UNION ALL을 활용해 값이 없을때의 STR_ID = 0 인 조회결과와 실제 원하는 값이 있을때의 테이블 결과를 UNION ALL 하면 위 시나리오 대로 실행을 해볼 수 있다. 아래와 같이 조회를 원하고자 하는 STR_ID = 3에 해당하는 값이..
[Oracle] first_value 함수 사용하기 오라클로 DB개발시 특히 집계 결과를 생성시에 최소값 또는 최대값을 기준으로 편차를 계산하는 등의 작업이 필요할 때가 있다. 오라클의 first_value 함수를 사용하면 특정 집단내의 기준값을 찾고 그 기준으로 결과를 뽑아내기가 쉬워진다. 정의는 다음과 같다. FIRST_VALUE (expr [ IGNORE NULLS ]) OVER (analytic_clause) 다음과 같이 간단한 데이터 테이블이 있다고 가정하자.... 카테고리별로 물품이 있고 각 물품은 가격을 가지고 있다. 각 물건의 가격을 전체 집단의 최저가격 대비 얼마만큼 차이가 있는지 쉽게 알수 있는 방법은 뭘까? 예제1. 각 카테고리별로 최저값을 구하고 각 카테고리별로 모든 물품의 최저값과의 차이를 구해라 SELECT CATEGORY, PR..
[Oracle] 파티션 별 순번 매기기 ROW_NUMBER 테이블 쿼리를 한 후 순번을 매기는 경우가 있다. 예를 들어 판매량별로 우선순위를 매기고 이를 순번으로 기록해 두면 추후에 특정 등수 이상 또는 이하의 레코드를 추출할 떄 해당 컬럼을 활용하여 쉽게 추출할 수 있다. ROW_NUMBER 문법 스펙은 다음과 같다. ROW_NUMBER( ) OVER ([ query_partition_clause ] order_by_clause) 예제1) 아래 쿼리는 employees 테이블에서 department_id 별로 salary 액수기준 내림차순으로 정렬한 후 rn(row_number)가 3 이하인 레코드를 추출한다. SELECT department_id, first_name, last_name, salary FROM ( SELECT department_id, fir..