Dalam Oracle, "merge into" digunakan untuk mengemas kini data dalam jadual Anda boleh memasukkan data dari satu jadual ke dalam jadual yang lain Jika data sudah ada dalam jadual yang dimasukkan data tidak wujud, data baru akan ditambah pada jadual yang dimasukkan.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.
Oracle9g memperkenalkan arahan MERGE Anda boleh melakukan operasi sisipan dan kemas kini pada masa yang sama dalam satu pernyataan SQL memilih daripada satu atau lebih Pilih baris dalam sumber data untuk dikemas kini atau dimasukkan ke dalam satu atau lebih jadual Dalam Oracle 10g, MERGE mempunyai peningkatan berikut:
1 Klausa KEMASKINI atau INSERT adalah pilihan
fasal 2 , UPDATE dan INSERT boleh ditambah dengan klausa WHERE
3. Gunakan predikat penapis malar dalam keadaan ON untuk memasukkan semua baris ke dalam jadual sasaran, tanpa menyambungkan jadual sumber dan jadual sasaran
4. Klausa KEMASKINI boleh diikuti dengan klausa PADAM untuk mengalih keluar beberapa baris yang tidak diperlukan
5. Jadual sumber ialah jadual diikuti dengan kata kunci menggunakan, dan jadual sasaran ialah jadual yang akan digabungkan ke dalam
6 Semua kemas kini, sisipan dan pemadaman dalam gabungan ke dilakukan pada jadual sasaran. Memandangkan merge into operation table telah diformulasikan, kemas kini, insert, dan delete tidak perlu memaparkan nama jadual
7. Secara ringkasnya, fungsi merge into adalah untuk menyelesaikan masalah penggunaan jadual B dan data jadual A baru Jika Jika ia tidak wujud dalam jadual A, masukkan data daripada jadual B ke dalam jadual A atau masukkan data ke dalam jadual Jika jadual sudah mempunyai data, kemas kini, jika tidak tambah data baharu.
Sintaks:
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 ! ]
Seterusnya, mari kita uji terus:
Mula-mula buat jadual TEST_ONE
create table TEST_ONE( ID NUMBER not null primary key, NAME VARCHAR2(255), IP VARCHAR2(255), MEMO VARCHAR2(255))commit;
Tambah beberapa keping data sebagai data ujian
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');
Baiklah, jadual data kami ada telah dibina. Seperti yang ditunjukkan di bawah:
Jika kami perlu menambah sekeping data, kami biasanya melakukannya seperti ini
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (5, 'mrhu', '127.0.0.1.0', '王先生的IP');
Tetapi kami berharap dapat menggunakan ID untuk menilai pertama. Jika data tidak ditambah, terdapat Bagaimana untuk melaksanakan kemas kini data ini?
Kemudian perintah gabungan menjadi di sini, masukkan kod:
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);
Jalankan seperti berikut:
Mari kita lihat data dalam jadual:
Data berjaya ditambahkan!
Jadi bagaimana kita menguji kemas kini? Ia sangat mudah. Kami menukar memo='IP En. Wang' kepada memo='IP gadis cantik ini' untuk ujian
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);
Jalankan seperti berikut:
Mari lakukannya sekali lagi Lihat data dalam jadual:
Data telah berjaya dikemas kini!
Kami mencipta satu lagi jadual TEST_TWO Sebagai jadual B, TEST_ONE sebagai jadual A
create table tes( ID NUMBER not null primary key, CODE VARCHAR2(255), MEMO VARCHAR2(255));commit;
Sekarang jadual TEST_TWO telah dibuat, mari tambahkan sekeping data dahulu!
INSERT INTO ROOT.TEST_TWO (ID, CODE, MEMO) VALUES (5, 'mrhu', '隔壁老王的IP');
Mari kita lihat data dalam TEST_TWO sekali lagi:
Mari import data dalam TEST_ONE ke dalam jadual kami yang baru dibuat, kami mendapati bahawa jadual TEST_TWO Terdapat sekeping data dalam TEST_ONE dengan ID 5. Terdapat juga sekeping data dengan ID 5 dalam TEST_ONE Kesan pelaksanaan yang dijangkakan ialah nilai medan memo data dengan ID 5 dalam TEST_TWO akan dikemas kini. ke 'IP wanita cantik ini' dalam TEST_ONE, dan nilai lain akan dikemas kini.
Mari tulis kod untuk mengesahkan:
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);
Mari lihat kesannya:
Hasil pelaksanaan adalah konsisten dengan hasil yang dijangkakan, gabungkan ke Have anda belajar cara menggunakannya? Jika anda suka, sila ikuti dan sokong!
Tutorial yang disyorkan: "Tutorial Video Oracle"
Atas ialah kandungan terperinci Apakah kegunaan gabungan ke dalam oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!