2021년 11월 13일 토요일

ORACLE SQL MERGE 명령어

 

ORACLE SQL MERGE 명령어


테이블 데이터를 병합하기 위한 명령어 입니다.


실무에서 자주 사용되며 병합되는 테이블에 데이터가 있는 경우에는 UPDATE, 없는 경우에 INSERT등의 로직을 구현할 수 있습니다.


[기본 형식]

MERGE INTO table_name  alias

USING [table_name | view | subquery] alias

ON (조인 조건)

WHEN MATCHED THEN

        UPDATE SET col1 = val1 [,col2 = val2…]

WHEN NOT MATCHED THEN

        INSERT  (column_list)  VALUES (value_list)


- MERGE INTO 구 : 데이터가 update 되거나 insert될 테이블명(병합되는 테이블명)

- USING 구 : 머지되는 대상 테이블의 data와 비교한 후  update 또는 insert할 때 사용할 데이터 원본 

- ON 구 : update나 insert를 하게 될때의 조건, 조건을 만족하는 레코드가 있으면 WHEN MATCHED 이하를 실행하고 없으면 WHEN NOT MATCHED 이하를 실행 합니다.

- WHEN MATCHED : ON 조건이 참인 경우 수행할 내용

- WHEN NOT MATCHED : ON 조건이 거짓인 경우 수행할 내용


실습을 위해 서브쿼리로 emp_20 이라는 이름으로 테이블을 생성 합니다. EMP 테이블에서 20번 부서원들을 SELECT하여 생성 합니다.


CREATE TABLE emp_20

AS 

SELECT empno, ename, sal, deptno FROM emp 

WHERE deptno = 20


<실행결과>

Table EMP_20이(가) 생성되었습니다.


SELECT * FROM emp_20


<실행결과>


EMPNO

ENAME

      SAL

DEPTNO

1

    7566

JONES

    2975

          20

2

    7788

SCOTT

    3000

        20

3

    7876

ADAMS

    1100

        20

4

    7902

FORD

    3000

        20


EMP 테이블의 데이터를 원본으로 EMP_20 테이블에 데이터가 이미 있으면 sal 값을 10% 증가, 없으면 INSERT 하는 MERGE 문을 작성 하세요


MERGE INTO emp_20 e20

USING emp E

ON(e20.empno = E.empno)

WHEN MATCHED THEN

   UPDATE SET e20.sal = E.sal*1.1

WHEN NOT MATCHED THEN

   INSERT (empno, ename, sal)  VALUES (E.empno, E.ename, E.sal)


<실행결과>

7개 행 이(가) 병합되었습니다.


SELECT * FROM emp_20


<실행결과>


EMPNO

ENAME

      SAL

DEPTNO

1

    7566

JONES

    3272.5

      20

2

    7788

SCOTT

    3300

      20

3

    7876

ADAMS

    1210

      20

4

    7902

FORD

    3300

      20

5

    7782

CLARK

    2450

      10

6

    7839

KING

    5000

    (null)

7

    7934

MILLER

    1300

      10


#MERGE, #SQLMERGE, #오라클MERGE, #ORACLE, #오라클 

ORACLE SQL DELETE 명령어

 

ORACLE SQL DELETE 명령어


테이블 데이터를 삭제하기 위한 명령어 입니다.


- 자신 계정에서 만든 테이블이거나 테이블에 대한 DELETE 권한이 있어야 합니다.

- WHERE 조건을 생략하면 테이블의 모든 레코드가 삭제되므로 조심해야 합니다.

- WHERE 조건은 컬럼명, 표현식, 상수, 서브쿼리, 비교 연산자 등이 올 수 있습니다.


[기본 형식]

DELETE [FROM] table_name

[WHERE 조건]


EMP 테이블에서 이름이 ‘SMITH’인 사원의 데이터를 삭제 하세요.


DELETE  FROM emp

WHERE ename = 'SMITH'


<실행결과>

1 행 이(가) 삭제되었습니다.


SELECT COUNT(*) FROM emp

WHERE ename = 'SMITH';


<실행결과>


COUNT(*)

1

            0


서브 쿼리를 이용한 DELETE : EMP 테이블에서 부서명이 ‘SALES’인 데이터를 삭제하시오. 


부서명 컬럼은 DEPT 테이블에 존재하므로 DEPT 테이블에서 부서명이 ‘SALES’인 부서의 부서코드(deptno)를 알아낸 후 EMP 테이블에서 해당 부서원들을 삭제합니다.


DELETE FROM emp  

WHERE deptno = (

                SELECT deptno FROM dept

                WHERE dname = 'SALES'

               )


<실행결과>

6개 행 이(가) 삭제되었습니다.


EMP 테이블에서 부서명이 ‘SALE’인 사원들을 카운트 해봅니다.


SELECT COUNT(*) FROM emp  

WHERE deptno = (

                SELECT deptno FROM dept

                WHERE dname = 'SALES'

               )


<실행결과>


COUNT(*)

1

            0


삭제한 데이터를 다음 실습늘 위해  원래대로 되돌립니다.


ROLLBACK


#오라클, #오라클DELETE, #DELETE, #SQLDELETE 

ORACLE SQL UPDATE 명령어

 

ORACLE SQL UPDATE 명령어


테이블의 데이터를 변경하기 위한 명령어 입니다. 


- 자신의 계정에서 만든 테이블 이거나 테이블에 대한 UPDATE 권한이 있어야 합니다. 

- WHERE 조건을 생략하면 테이블의 모든 레코드가 변경되므로 조심해야 합니다.

- WHERE 조건은 컬럼명, 표현식, 상수, 서브쿼리, 비교연산자 등이 올 수 있습니다.


[기본 형식]

UPDATE [table_name | subquery]

SET column = value[,column = value]

[WHERE 조건]


EMP 테이블에서 이름이 ‘SMITH’인 사원의 급여를 1000으로 변경 하세요.


UPDATE emp

       SET sal = 1000

WHERE ename = 'SMITH'


<실행결과>

1 행 이(가) 업데이트되었습니다.


SELECT ename, sal FROM emp 

WHERE  ename = 'SMITH';


<실행결과>


ENAME

      SAL

1

SCOTT

    1000


수정한 값을 원래대로 되돌립니다.


ROLLBACK



SELECT ename, sal FROM emp 

WHERE  ename = 'SMITH';


<실행결과>


ENAME

      SAL

1

SCOTT

      800


서브 쿼리를 이용한 UPDATE : EMP 테이블에서 이름이 ‘SMITH’인 사원의 급여를 이름이 ‘FORD’인 사원의 급여로 수정 하세요.


먼저 ‘SMITH’와 ‘FORD’의 급여를 확인 후 UPDATE 구문을 작성하세요.


SELECT ename, sal FROM emp 

WHERE  ename IN ('SMITH','FORD');


<실행결과>


ENAME

      SAL

1

SCOTT

      800

2

FORD

    3000


UPDATE emp

       SET sal = (SELECT sal FROM emp 

                         WHERE ename = 'FORD' )

WHERE  ename = 'SMITH';


<실행결과>

1 행 이(가) 업데이트되었습니다.


SELECT ename, sal FROM emp 

WHERE  ename IN ('SMITH','FORD');


<실행결과>


ENAME

      SAL

1

SCOTT

    3000

2

FORD

    3000


수정한 값을 원래대로 되돌립니다.


ROLLBACK

 

#SQL, #UPDATE, #오라클, #오라클SQL, #오라클교육, #SQL강좌

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...