>  기사  >  데이터 베이스  >  오라클에서 병합의 사용법은 무엇입니까

오라클에서 병합의 사용법은 무엇입니까

WBOY
WBOY원래의
2022-03-02 13:47:2422744검색

Oracle에서는 "병합"을 사용하여 테이블의 데이터를 다른 테이블에 삽입할 수 있습니다. 데이터가 삽입된 테이블에 이미 있으면 해당 데이터가 업데이트됩니다. 데이터가 삽입된 테이블에 새 데이터가 추가됩니다.

오라클에서 병합의 사용법은 무엇입니까

이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

Oracle에서 병합의 사용법은 무엇입니까?

Oracle9g는 하나의 SQL 문에서 테이블에 대한 삽입 및 업데이트 작업을 동시에 수행할 수 있습니다. MERGE 명령은 하나 이상의 데이터 소스에서 행을 선택합니다. 하나 이상의 테이블에 삽입합니다. Oracle 10g에서는 MERGE에 다음과 같은 개선 사항이 있습니다.

1. UPDATE 또는 INSERT 절은 선택 사항입니다.

2 UPDATE 및 INSERT 절은 WHERE 절을 사용하여 추가할 수 있습니다.

3. ON 조건에서는 모든 행을 대상 테이블에 삽입하는 데 사용됩니다. 4. UPDATE 절 뒤에 DELETE 절을 추가할 수 있습니다. 5. 소스 테이블은 using 키워드가 뒤에 오는 테이블이고, 대상 테이블은 병합될 테이블입니다. 6. 병합 대상 테이블에서 모든 업데이트, 삽입 및 삭제가 수행됩니다. 병합은 이미 작업을 위한 테이블을 공식화했기 때문에 업데이트, 삽입 및 삭제에서는 테이블 이름을 표시할 필요가 없습니다

7. 즉, 병합 기능은 테이블 B와 새 테이블 A를 사용하는 문제를 해결하는 것입니다. 테이블 A에 데이터가 없으면 테이블 B의 데이터를 테이블 A에 삽입하거나 테이블에 이미 데이터가 있으면 업데이트하고, 그렇지 않으면 새 데이터를 추가합니다.

구문:

MERGE INTO [your table-name] [rename your table here]  
  USING ( [write your query here] )[rename your query-sql and using just like a table]  
  ON ([conditional expression here] AND [...]...)  
  WHEN MATHED THEN [here you can execute some update sql or something else ]  
  WHEN NOT MATHED THEN [execute something else here ! ]

다음으로 직접 테스트해 보겠습니다.

요구 사항 1: 테이블에 데이터가 이미 있으면 업데이트합니다. 그렇지 않으면 추가합니다.

먼저 TEST_ONE 테이블을 만듭니다.

create table TEST_ONE(
  ID   NUMBER not null
    primary key,
  NAME VARCHAR2(255),
  IP   VARCHAR2(255),
  MEMO VARCHAR2(255))commit;
테스트 데이터로 몇 가지 데이터만 추가하면 됩니다

INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (1, '2', '3', '周文军');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (2, '66', '366', '2656');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (3, '5656', '626', '2626');
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (4, '5656', '2626', '626');
자, 아래와 같이 데이터 테이블이 구축되었습니다.

새로운 데이터를 추가해야 할 경우 일반적으로 다음과 같이 합니다

INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (5, 'mrhu', '127.0.0.1.0', '王先生的IP');

하지만 먼저 ID를 사용하고 싶습니다. 새로운 데이터는 없지만 데이터가 업데이트되는 것으로 판단하세요. 이를 달성하는 방법은 무엇입니까?

그러면 병합 명령이 여기에 있습니다. 코드를 입력하세요:

merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'王先生的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo
when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);
오라클에서 병합의 사용법은 무엇입니까 다음과 같이 실행하세요:

테이블의 데이터를 살펴보겠습니다:

데이터가 성공적으로 추가되었습니다!


그럼 업데이트를 어떻게 테스트하나요? 매우 간단합니다. memo='Mr. Wang's IP' to memo='This beautiful girl's IP' for test오라클에서 병합의 사용법은 무엇입니까

merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'本大美女的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo
when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);

작업은 다음과 같습니다.
오라클에서 병합의 사용법은 무엇입니까
테이블의 데이터를 다시 살펴보겠습니다.

데이터가 성공적으로 업데이트되었습니다!

요구사항 2: 테이블 A의 데이터를 테이블 B에 추가합니다. 기본 키로 판단해야 합니다. 데이터가 포함되어 있으면 업데이트하세요.
오라클에서 병합의 사용법은 무엇입니까테이블 B로 TEST_TWO를 또 생성하고 TEST_ONE을 추가합니다. 테이블 A.

create table tes(
  ID   NUMBER not null
    primary key,
  CODE VARCHAR2(255),
  MEMO VARCHAR2(255));commit;

좋아, TEST_TWO 테이블이 생성되었습니다. 먼저 데이터를 추가해 보겠습니다! 오라클에서 병합의 사용법은 무엇입니까
INSERT INTO ROOT.TEST_TWO (ID, CODE, MEMO) VALUES (5, 'mrhu', '隔壁老王的IP');

TEST_TWO의 데이터를 다시 살펴보겠습니다.

TEST_ONE의 데이터를 새로 생성된 테이블로 가져오면 분석을 통해 TEST_TWO 테이블에 ID가 있는 데이터 조각이 있음을 발견했습니다. 5, in TEST_ONE에는 ID가 5인 데이터도 있습니다. 예상되는 실행 효과는 TEST_TWOID가 5인 데이터의 메모 필드 값이 TEST_ONE의 '이 아름다운 여성의 IP'로 업데이트되는 것입니다. 다른 값이 추가됩니다.

확인하는 코드를 작성해 보겠습니다.

merge into TEST_TWO mtb using (select id,name,ip,memo from TEST_ONE) mmb on (mtb.id = mmb.id)when matched THENUPDATE set mtb.code = mmb.name,mtb.memo = mmb.memo
when not matched THENinsert (mtb.id,mtb.code,mtb.memo) values (mmb.id,mmb.name,mmb.memo);
효과를 살펴보겠습니다.


오라클에서 병합의 사용법은 무엇입니까 실행 결과가 예상한 결과와 일치합니다. 좋아요, 병합 사용법을 배웠나요? 그것!

추천 튜토리얼: "

Oracle Video Tutorial

"

위 내용은 오라클에서 병합의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.