[ INSERT ]

☞ 형식

 

- 기본문형 : INSERT INTO [ALL] [ 조건절 ]
             [
INSERT ~ VALUES | SUBQUERY ]
- 조건절 : [
ALL][FIRST]
           [
WHEN 조건 THEN][INSERT ~ VALUES ]
           [
ELSE] [INSERT ~ VALUES
]

☞  SELECT 문을 이용한 INSERT

 

1.  INSERT  INTO TABLE_NAME1
             (   
SELECT ...
                 
FROM   TBL_NAME2 ) ;

  : Oralce 에서는 Insert 와 Select 문을 같이 사용 할 경우에는
VALUES  문을 사용하지 않는다.

조건부 INSERT ALL

 

예시) INSERT ALL
      WHEN
  product_id IN ( SELECT product_id FROM promotional_items )
      
INTO   promotional_sales
      
VALUES (product_id, list_price)
      WHEN   order_mode = 'online'
      
INTO   web_orders
      
VALUES (product_id, order_total)
      
SELECT product_id, list_price, order_total,order_mode
      
FROM
  orders;

▣ 조건절이 없는 INSERT
        : SQL> INSERT ALL
                 INTO sal_log VALUES (id , salary , title )
                 INTO date_log VALUES (id , start_date , title )
                 SELECT id , salary , start_date , title
                 FROM s_emp
                 WHERE id > 20 ;      

조건절이 있는 ALL INSERT
      예시) 사번이 20번보다 큰 사원의 사번, 급여, 입사일, 직책을 선택하여 사번, 급여,
            직책은 SAL_LOG 테이블에 입력하되 급여가 850보다큰 직원만 입력하고, 사번, 입사일,
            직책은 DATE_LOG 테이블에 입력하되 단 입사일이 91년 1월 1일 이전인 직원만 입력.

     SQL>    INSERT ALL
             WHEN salary > 850 THEN
             INTO sal_log VALUES (id , salary , title )
             WHEN start_date < '91/01/01' THEN
             INTO date_log VALUES (id , start_date , title )
             SELECT id , salary , start_date , title
             FROM s_emp
             WHERE id > 20 ;

조건부 INSERT FIRST

 

INSERT FIRST
WHEN
order_total> 10000 THEN
    INTO priority_handling VALUES (id)
WHEN order_total > 5000 THEN
    INTO special_handling VALUES (id)
WHEN total > 3000 THEN
    INTO privilege_handling VALUES (id)
ELSE
    INTO regular_handling VALUES (id)
    
SELECT order_total, order_id id  FROM
 orders;

※ 무조건 첫번째 조건인 salary>=4000인 조건의 데이터는 DEPT_SAL 테이블에 들어가고,
   나머지 데이터 salary<4000인 데이터 중에서 입사일 조건에 따라 각각의 테이블에 입력

      예시) SQL>  INSERT FIRST
                     WHEN salary >= 4000 THEN
                        INTO dept_sal VALUES (dept_id , salary)
                     WHEN start_date LIKE  '90%' THEN
                        INTO dept_date_90 VALUES (dept_id , start_date)
                     WHEN start_date LIKE  '91%' THEN
                        INTO dept_date_91 VALUES (dept_id , start_date)
                     ELSE
                     INTO dept_date VALUES (dept_id , start_date )
                     SELECT dept_id , SUM(salary) SALARY, MAX(start_date) START_DATE
                     FROM S_EMP
                     GROUP BY dept_id ;

☞ Pivot INSERT

 

예시)  SQL> INSERT ALL
             INTO sale_data VALUES (id, week_id, sales_mon)
             INTO sale_data VALUES (id, week_id, sales_tue)
             INTO sale_data VALUES (id, week_id, sales_wed)
             INTO sale_data VALUES (id, week_id, sales_thur)
             INTO sale_data VALUES (id, week_id, sales_fri)
             SELECT id,week,sales_mon,sales_tue,sales_wed,sales_thur, sales_fri
             FROM main_sale ;



 

 

'(DB) Oracle > SQL' 카테고리의 다른 글

Oracle - 예제_SELECT  (0) 2017.01.18
Oracle - 예제_MERGE  (0) 2017.01.18
Oracle - 예제_DELETE  (0) 2017.01.18
Oracle - ROWNUM 개념  (0) 2017.01.18
Oracle - SUB QUERY 개념  (0) 2017.01.18
Posted by 농부지기
,

Oracle - DELETE 문

 

1. JOIN 후 DELETE

delete from TBt_SBATPAME aa

where aa.ech_code = ( select comm_tract_cd from  tb_store_master b where  aa.ech_code = b.comm_tract_cd

'(DB) Oracle > SQL' 카테고리의 다른 글

Oracle - 예제_MERGE  (0) 2017.01.18
Oracle - 예제_INSERT  (0) 2017.01.18
Oracle - ROWNUM 개념  (0) 2017.01.18
Oracle - SUB QUERY 개념  (0) 2017.01.18
Oracle - JOIN 개념  (0) 2017.01.18
Posted by 농부지기
,

        [ Oracle - ROWNUM 개념 ]  

 

1. ROWNUM

 

1. 정의 : 조회된 결과의 자료에 순번을 부여한다.
          ROWNUM과 ORDER BY 의 순서는  ROWNUM이 부여 된 후 ORDER BY 절이 수행된다.
          그래서, ORDER BY 후 의 순번을 원할 경우  inline view를 통해서 다시한번
          ROWNUM을 하면 된다.

2. 예)
SELECT ROWNUM, *
       
FROM   EMP
       
ORDER  BY NAME;

   예) 
SELECT ROWNUM, *
       
FROM  (SELECT *
              
FROM   EMP
              
ORDER  BY NAME );   

'(DB) Oracle > SQL' 카테고리의 다른 글

Oracle - 예제_INSERT  (0) 2017.01.18
Oracle - 예제_DELETE  (0) 2017.01.18
Oracle - SUB QUERY 개념  (0) 2017.01.18
Oracle - JOIN 개념  (0) 2017.01.18
Oracle - PLAN_INDEX  (0) 2017.01.18
Posted by 농부지기
,