본문 바로가기

SQL(쿼리)11

트리거 생성(IF문 활용해서 Not Null인 컬럼만 트리거 작동) 트리거를 만들 상황이 생겼습니다. 간단한 트리거이긴 하지만, 특정 테이블 컬럼에 INSERT나 UPDATE 발생 시 다른 테이블에 로깅을 위해 해당값을 삽입하는 트리거입니다. 단, NULL 값은 필요없으므로 삽입할 필요가 없는 상황입니다. 테스트 환경에서 대략 생성하여 테스트 수행시 NULL값은 제외하고 잘 작동되는것을 확인하였습니다. 1.테이블 생성 --데이터를 삽입할 테이블 CREATE TABLE TESTLINK (a VARCHAR2(10); --데이터 삽입시 트리거가 insert 할 테이블 CREATE TABLE TESTLINK2 (a VARCHAR2(10)); 2.트리거 생성 TESTLINK의 A 컬럼에 INSERT나 UPDATE 발생시 작동 CREATE OR REPLACE TRIGGER TEST.. 2020. 12. 7.
SCOTT스키마예제를 통해 계층구조 쿼리 정리 오라클 데이터베이스에는 계층구조를 파악하게 해주기 위해 connect by 절을 지원합니다. Oracle의 SAMPLE 스키마인 SCOTT의 EMP테이블을 통해 계층구조 쿼리에 대해서 알아보고 정리하겠습니다. 구문정리 WHERE : 데이터를 가져온 뒤 마지막으로 조건절에 맞게 정리 START WITH : 계층질의의 루트로 사용될 행을 지정,서브쿼리를 사용할 수 있음 CONNECT BY : 각 행들의 연결관계를 설정,서브쿼리를 사용할 수 없음 - CONNECT BY PRIOR 자식컬럼=부모컬럼 : 부모에서 자식으로 트리구성 - CONNECT BY PRIOR 부모컬럼=자식컬럼 : 자식에서 부모로 트리구성 LEVEL : 계층구조 쿼리에서 수행결과의 깊이를 의미 ORDER SIBLINGS BY : 계층구조 쿼리.. 2020. 11. 25.
ROLLUP을 대신하는 방법 소계를 구하는 ROLLUP을 사용하지 않고도 소계를 구할 수 있는 방법이 있습니다. ROLLUP 쿼리 select to_char(t1.ord_dt,'YYYYMM') ord_ym,t1.cus_id,sum(t1.ord_amt) ord_amt from t_ord t1 where t1.cus_id in ('CUS_0001','CUS_0002') and t1.ord_dt >= to_date ('20170301','YYYYMMDD') and t1.ord_Dt < to_date('20170501','YYYYMMDD') group by rollup (to_char(t1.ord_dt,'YYYYMM'),t1.cus_id); ORD_YM CUS_ID ORD_AMT ------ --------------------------.. 2020. 11. 24.
ROLLUP ROLLUP? 소계(중간합계)와 전체합계를 구하는 방법 중 SQL만 사용해서 구할 수 있는 기능이 ROLLUP입니다. ROLLUP은 GROUP BY 뒤에 ROLLUP이라고 적어서 사용합니다. 예를들어 GROUP BY ROLLUP(A,B,C,D)라고 사용하면 다음과 같은 데이터들이 조회됩니다. - GROUP BY 된 A+B+C+D별 데이터 - A+B+C 별 소계 데이터 - A+B 별 소계 데이터 - A별 소계 데이터 - 전체 합계 SQL> select to_char(t1.ord_dt,'YYYYMM') 주문년월 ,t1.cus_id 고객ID ,sum(t1.ord_amt) 주문금액 from t_ord t1 where t1.cus_id in ('CUS_0001','CUS_0002') and t1.ord_dt >=.. 2020. 11. 20.