認識oracle的update更新
轉發地址:http://blog.csdn.net/zqpgood/article/details/6065495
這兩天給新同事安排了一個工作,即做一個update 的級聯更新,在實際操作中發現了一個問題。就是對於oracle的更新的語法,大部分人尤其是學過SqlServer的人在使用oracle的時候對於oracle的更新會有許多的疑問。就此記下,以便日後查閱
update a set a.col1 = (select b.col1 from b where b.col2 = a.col2)
where exists
(select * from b where a.col2 = b.col2)
/**oracle與sqlserver更新update的用法有不同,oracle是怎麼處理的呢
update a set a.col1=100 將所有行全部的特定列col1更新為特定值
update a set a.col1=100 where a.col2<10 將滿足col2條件的行的col1列的值更新為特定的值
update a set a.col1=a.col1+a.col2 where a.col2<10 同一個表中的簡單計算更新
update a set a.col1=(select b.col1 from b where a.col2=b.col2)
where exists(select * from b where a.col2=b.col2) 級聯更新,將滿足a.col2=b.col2的行的a.col1更新為對應的
b.col1的值。當且僅當a=b時可以將where條件去掉。這個更新還可以這樣理解:
update a set a.col1=(select b.col1 from b where a.col2=b.col2)表示對於a中所有行滿足a.col2=b.col2
的進行更新,不滿足條件的也更新,只不過找不到對應的值,只能將空值賦之,如果此時a.col1不允許為空那麼會報插入空值錯誤。
所以只有加上where條件,才能將a.col2<>b.col2的那些在a中的資料得以倖存(不被更新為空)。
oracle的INSERT、UPDATE、MERGE
ORACLE 2009-12-21 08:40:55 閱讀68 評論0 字號:大中小 訂閱
CREATE TABLE COURSE_NEW AS SELECT * FROM COURSE;
/*清空COURSE_NEW表中的所有記錄*/
TRUNCATE TABLE COURSE_NEW;
/*往COURSE_NEW表中增加以下記錄:
NO COURSE_NAME
A001 ORACLE資料庫管理
A002 SQLSERVER安全指南
A003 Hibernate全攻略
A004 .NET
*/
INSERT INTO COURSE_NEW(NO,COURSE_NAME)
SELECT 'A001','ORACLE資料庫管理' FROM DUAL
UNION
SELECT 'A002','SQLSERVER安全指南' FROM DUAL
UNION
SELECT 'A003','Hibernate全攻略' FROM DUAL
UNION
SELECT 'A004','.NET' FROM DUAL;
COMMIT;
/*根據COURSE表中的NO欄位,用COURSE_NEW更新COURSE表*/
UPDATE (SELECT /*+ BYPASS_UJVC */ A.NO,A.COURSE_NAME,B.NO AS BNO,B.COURSE_NAME AS BNAME
FROM COURSE A,COURSE_NEW B
WHERE A.NO=B.NO)
SET NO=BNO,COURSE_NAME=BNAME
COMMIT;
/*分別使用INSERT/UPDATE和MERGE命令實現,用COURSE_NEW更新COURSE表中的記錄,如果存在,則更新,不存在則INSERT*/
--用MERGE實現如下:
INSERT INTO COURSE_NEW(NO,COURSE_NAME) --為了便於操作,先在COURSE_NEW中插入一條記錄
SELECT 'A005','HCNE網路工程師' FROM DUAL;
COMMIT;
MERGE INTO COURSE A
USING COURSE_NEW B ON(A.NO=B.NO)
WHEN MATCHED THEN
UPDATE SET A.COURSE_NAME=B.COURSE_NAME
WHEN NOT MATCHED THEN
INSERT(A.NO,A.COURSE_NAME)
VALUES(B.NO,B.COURSE_NAME);
COMMIT;
--用INSERT/UPDATE實現如下
INSERT INTO COURSE_NEW(NO,COURSE_NAME)--為了便於操作,再在COURSE_NEW中插入一條記錄
SELECT 'A006','CCNA網路工程師' FROM DUAL;
COMMIT;
--利用UPDATE對於編號相同的欄位進行更新
UPDATE COURSE A SET(NO,COURSE_NAME)=
(SELECT B.NO,B.COURSE_NAME
FROM COURSE_NEW B
WHERE A.NO=B.NO )
WHERE EXISTS
(SELECT 1 FROM COURSE_NEW B
WHERE A.NO=B.NO);
COMMIT;
--利用INSERT對於原表中沒有的進行新增
INSERT INTO COURSE
SELECT * FROM COURSE_NEW A
WHERE NOT EXISTS(SELECT 1 FROM COURSE B WHERE A.NO=B.NO);
COMMIT;
/*用一組語句代替對實現對全表的更新操作*/
--先用COURSE_TEST記錄COURSE表的狀態,以便在刪除COURSE之後記錄相關欄位
CREATE TABLE COURSE_TEST AS SELECT * FROM COURSE WHERE ROWNUM<1;
INSERT /*+ APPEND */ INTO COURSE_TEST
SELECT * FROM COURSE WHERE ROWNUM<5;
COMMIT;
--刪除COURSE表
TRUNCATE TABLE COURSE;
--更新COURSE表
INSERT /*+APPEND*/ INTO COURSE
SELECT A.NO,A.COURSE_NAME FROM COURSE_NEW A,COURSE_TEST B WHERE A.NO=B.NO;
COMMIT;
相關文章
- Sql server 的update語句的新認識SQLServer
- Oracle\MS SQL Server Update多表關聯更新OracleSQLServer
- oracle中要謹慎使用update交叉更新!Oracle
- Oracle多表關聯更新的方式選擇, Loop or Hash update?OracleOOP
- 簡單瞭解 oracle update 原理(測試)、 行遷移/行連結基本認識Oracle
- Oracle\MS SQL Server的資料庫多表關聯更新UPDATE與多表更新OracleSQLServer資料庫
- MongoDB更新(update)操作MongoDB
- Oracle認證常識(轉)Oracle
- Oracle中的for update 和 for update nowaitOracleAI
- 循序漸進Oracle - 全面認識Oracle ASHOracle
- Oracle Audit 審計功能的認識與使用Oracle
- 深入React的生命週期(下):更新(Update)React
- 認識Oracle DBFS檔案系統Oracle
- oracle cpu(critical patch update)關鍵補丁更新集_官方網址Oracle
- oracle中update的細節Oracle
- MySQL更新資料,如何使用updateMySql
- sql查詢更新update selectSQL
- MySQL_插入更新 ON DUPLICATE KEY UPDATEMySql
- Oracle資料庫字符集的全面認識Oracle資料庫
- 更新、插入資料庫所使用的UPDATE() (轉)資料庫
- HttpModule的認識HTTP
- oracle select for updateOracle
- 深入認識Oracle Supplemental loggingOracle
- Oracle中select ... for update的用法Oracle
- 136-MySQL5.17 update更新[case when then end]的使用MySql
- (轉)資料庫oracle for update of和for update區別資料庫Oracle
- 認識Windows的域Windows
- 圖形的認識
- 關於UI設計行業的認識再到認識UI行業
- oracle中三個引數的進一步認識Oracle
- mybatis 批量新增insert、更新update詳解MyBatis
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- 認識Oracle控制檔案(10g) - finalOracle
- 認識CopyOnWriteArrayList
- 認識DockerDocker
- 認識jqueryjQuery
- JQuery認識jQuery
- 認識 TypeScriptTypeScript