본문 바로가기
반응형

개발공부 일지/오라클21

오라클)계층형 쿼리 CONNECT BY PRIOR , ORDER SIBLINGS BY 오라클의 CONNECT BY 절은 부서 조직도, 메뉴 트리 와 같은 계층 쿼리를 만들 때 사용됩니다. 그리고 CONNECT BY 절과 LEVEL을 사용하면 순차적인 데이터를 생성할 수가 있습니다..  *CONNECT BY PRIOR 컬럼A = 컬럼B이전 컬럼A 값이 현재 컬럼B 값과 같은 것을 찾으라는 뜻입니다.-->CONNECT BY PRIOR 컬럼A의 이전값 = 컬럼B의 현재값입니다. 그래서 저는 외울 때, CONNECT BY PRIOR 이전값 = 현재값이라고 외웁니다.   Ex) SELECT  * FROM EMPLOYEES ORDER BY EMPLOYEE_ID;  SELECT  EMPLOYEE_ID  , LPAD(' ',LEVEL*2) || FIRST_NAME || LAST_NAME AS FULL_.. 2024. 10. 29.
오라클) Concatenation Operator (USE_CONCAT 힌트) ex1) SELECT /*+ use_concat */* FROM EMPLOYEES WHERE EMPLOYEE_ID = 103 OR DEPARTMENT_ID = 80; CONCATENATION 연산자가 들어가면, UNION ALL 처럼 동작하여 OR의 갯수만큼 SQL문이 실행된다. 위의 ex1) 구문에서는 EMPLOYEE_ID = 103 , DEPARTMENT_ID = 80에 대해 각각 SQL문이 실행되어 2번 실행 된다. 참고로 USE_CONCAT 힌트를 사용하면 CONCATENATION 연산자를 유도 할 수 있다. ex2) SELECT * FROM employees WHERE employee_id = 103 OR department_id = 80;ex2)에서는 옵티마이저가 OR 구문의 갯수 만큼 실행하.. 2024. 9. 1.
오라클) 실행계획에서 VIEW Operator - 뷰 연산자 실행 계획에서 보면, VIEW Operator를 볼 수 있다. 그러나, 이것은 우리가 흔히 아는 VIEW가 아니다.(NO 상관!) 실행 계획에서의 VIEW는 서브쿼리 중 INNER 쿼리문을 INLINE VIEW로써 실행 계획을 세우겠다는 뜻이다. ex1) SELECT e.first_name, e.last_name, dept_locs_v.street_address, dept_locs_v.postal_code FROM employees e, ( SELECT /*+ NO_MERGE */ d.department_id, d.department_name, -- /*+ NO_MERGE */ 는 INNER 쿼리에서! l.street_address, l.postal_code FROM departments d, locat.. 2024. 9. 1.
오라클) INSERT ALL 구문 - Pivoting Insert(피봇) INSERT ALL 구문을 쓰면, 한번에 여러 데이터를 넣을 수 있다.그런데, 단순히 데이터를 INSERT 하는 것이 아니라, PIVOT 한채로 데이터를 INSERT 하는 것도 가능하다.아래 스크린샷을 보면, PIVOT이 이루어지고, 데이터가 삽입된 것을 확인할 수 있다. 예시)INSERT ALL     INTO JOB_SAL VALUES (YEAR, MONTH, 'IT_PROG', IT_PROG)     INTO JOB_SAL VALUES (YEAR, MONTH, 'SA_MAN', SA_MAN )     INTO JOB_SAL VALUES (YEAR, MONTH, 'ST_MAN', ST_MAN ) SELECT * FROM JOB_SALARIES; 복사 대상 테이블:  SELECT * FROM JOB_S.. 2024. 8. 26.
오라클) 윈도우 함수(Window Function)의 FIRST_VALUE(), LAST_VALUE() 예시 FIRST_VALUE(컬럼명): 컬럼의 첫번째 값LAST_VALUE(컬럼명): 컬럼의 마지막 값   SELECT     EMPLOYEE_ID     ,DEPARTMENT_ID     ,SALARY     ,FIRST_VALUE(SALARY) IGNORE NULLS OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY) AS LOW_SAL     ,LAST_VALUE(SALARY) IGNORE NULLS OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY) AS HIGH_SAL_1     ,LAST_VALUE(SALARY) IGNORE NULLS OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY   .. 2024. 8. 26.
오라클) 윈도우 함수(Window Function)의 Interval 키워드 사용법 SELECT EMPLOYEE_ID ,DEPARTMENT_ID ,SALARY ,HIRE_DATE ,SUM(SALARY) OVER (PARTITION BY DEPARTMENT_ID ORDER BY HIRE_DATE RANGE BETWEEN INTERVAL '1' YEAR PRECEDING AND INTERVAL '1' MONTH FOLLOWING) SUM FROM EMPLOYEES WHERE DEPARTMENT_ID IN (10,20,30) ORDER BY DEPARTMENT_ID, HIRE_DATE ; --> HIRE_DATE 컬럼 중, 1 년전 데이터와 1 달뒤 데이터를 SUM()을 하라는 뜻이다. 2024. 8. 26.
오라클) 윈도우 함수(Window Function)의 ROW_NUMBER() 함수를 역순으로 출력하기 *방법은 윈도우 함수 중 COUNT() 함수로 총 행의 수를 구한 다음에, ROW_NUMBER() 값을 빼는 것이다. ORDER BY는 필수이지만, PARTITION BY는 선택이다. (1) 정순SELECT EMPLOYEE_ID , DEPARTMENT_ID , HIRE_DATE , ROW_NUMBER() OVER(PARTITION BY DEPARTMENT_ID ORDER BY HIRE_DATE) AS ROW_NUMBER FROM EMPLOYEES ;  (2)역순SELECT     EMPLOYEE_ID,     DEPARTMENT_ID,     HIRE_DATE,     (COUNT(*) OVER(PARTITION BY DEPARTMENT_ID) + 1) - ROW_NUMBER() OVER(PARTITIO.. 2024. 8. 26.
오라클) Index Full Scan Index Full Scan 은 언제 사용하는가? 1) 인덱스 컬럼으로 order by 할 때--> 인덕스에는 인덱스 컬럼 기준으로 이미 정렬이 되어 있어서 부담이 큰 sort 작업 생략이 가능. 2) 인덱스 컬럼으로 group by 할 때 --> 인덱스에 이미 컬럼 order에 따라 정렬되었기 때문에, group by 작업이 빨리 이루어진다. 3)sort-merge join을 할 때,--> 1)과 같은 이유. *결론)Index Full Scan 은 이미 생선된 인덱스를 통해   Order By 작업을 생략하기 위해 사용된다.  주의할 점)SELECT last_name,first_name FROM employees ORDER BY first_name,last_name;위의 쿼리에서 만약, 인덱스가  la.. 2024. 8. 25.
오라클) 오라클에서 문자열 N, U 의 의미. N'문자열' --> NCHAR/NVARCHAR2 데이터 타입으로 문자열을 정의 , 데이터베이스의 내셔널 캐릭터셋 설정에 따라 다국어 데이터를 처리하는 데 사용됩니다. U'문자열' --> 유니코드 코드 포인트를 명시적으로 지정하여 문자열을 정의 즉, N 과 U는 비영어 문자열을 쓸 때 사용된다. 예시) ; SELECT N'안녕하세요' FROM dual; 참고1) Oracle 데이터베이스에서 NCHAR는 "National Character"의 약자로, 특정 국가나 언어의 문자 데이터를 저장하기 위해 사용되는 데이터 타입입니다. NCHAR 데이터 타입은 다국어 지원이 필요한 환경에서 유용합니다. 참고2) https://stackoverflow.com/questions/48076425/difference-bet.. 2024. 8. 25.
반응형