數據處理(DML、RETURNING、MERGEINTO)--=================================================一、常用的DML語句及事物處理向表中插入數據(INSERT)更新表中數據(UPDATE)從表中刪除數據(DELETE)將表中數據和并(MERGE)控制事務(TRANSACTION" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL基礎--> 數據處理(DML、RETURNING、MERGE IN

系統 1751 0

--=================================================

--SQL 基礎 --> 數據處理 (DML RETURNING MERGE INTO)

--=================================================

?

一、常用的 DML 語句及事物處理

??? 向表中插入數據 ( INSERT )

??? 更新表中數據 ( UPDATE )

??? 從表中刪除數據 ( DELETE )

??? 將表中數據和并 ( MERGE )

??? 控制事務 ( TRANSACTION )

?

二、 DML 可以在下列條件下執行 :

??? 向表中插入數據

??? 修改現存數據

??? 刪除現存數據

??? 事務是由完成若干項工作的 DML 語句組成的。

?

三、插入數據

??? INSERT 語句語法 :

??? INSERT INTO table [(column [, column...] ) ]

??? VALUES ( value [, value...] );

?

??? 使用這種語法一次只能向表中插入一條數據。

??? 為每一列添加一個新值。

??? 按列的默認順序列出各個列的值。

??? INSERT 子句中隨意列出列名和他們的值。

??? 字符和日期型數據應包含在單引號中。

?

??? -- 查看 emp 表的表結構

?????? SQL > DESC emp ;

?????? ? Name ????????????????????????????????????????????????? Null ? ??? Type

?????? ? ----------------------------------------------------- -------- -----------------------

?????? ? EMPNO ???????????????????????????????????????????????? NOT NULL NUMBER ( 4 )

?????? ? ENAME ????????????????????????????????????????????????????????? VARCHAR2 ( 30 )

?????? ? JOB ??????????????????????????????????????????????????????????? VARCHAR2 ( 9 )

?????? ? MGR ??????????????????????????????????????????????????????????? NUMBER ( 4 )

?????? ? HIREDATE ?????????????????????????????????????????????????????? DATE

?????? ? SALARY ???????????????????????????????????????????????????????? NUMBER ( 8 , 2 )

?????? ? DEPTNO ???????????????????????????????????????????????????????? NUMBER ( 2 )

?

??? 1. 向表中插入空值

?????? 隱式方式 : 在列名表中省略該列的值。

?????????? SQL > INSERT INTO emp ( empno , ename , job , salary ) ??? -- 列出部分列名

?????????? ? 2 ? VALUES ( 1234 , 'Frank' , 'saleman' , 8000 );

?

?????????? 1 row created .

?

?????????? SQL > SELECT ? * FROM emp WHERE ename = 'Frank' ;

?

????????????? ? EMPNO ENAME ????????????????????????? JOB ????????????? MGR HIREDATE ????? SALARY ???? DEPTNO

?????????? ---------- ------------------------------ --------- ---------- --------- ---------- ----------

????????????? ? 1234 Frank ????????????????????????? saleman ????????????????? ???????????? 8000

?

?????? 顯示方式 : VALUES 子句中指定空值 NULL

?????????? 注意此處省略了列列表,當列的列表被省略時,則 values 關鍵字中應當為所有的字段列提供列值

?????????? SQL > INSERT INTO emp VALUES ( 100 , 'Jack' , 'manager' ,null,null, 20000 , 10 );

?

?????????? 1 row created .

?

??? 2. 插入指定的值

?????? SYSDATE 記錄當前系統的日期和時間。

?????????? SQL > INSERT into EMP ( empno , ename , job , hiredate , salary )

?????????? ? 2 ? VALUES ( 1235 , 'Tony' , 'boy' , sysdate , 7000 );

?

?????????? 1 row created .

?

?????????? SQL > ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss' ;

?

?????????? Session altered .

?

?????????? SQL > SELECT * FROM emp WHERE ename = 'Tony' ;

?

????????????? ? EMPNO ENAME ?????????? JOB ????????????? MGR HIREDATE ??????????????? SALARY ???? DEPTNO

?????????? ---------- --------------- --------- ---------- ------------------- ---------- ----------

????????????? ? 1235 Tony ??????????? boy ????????????????? 2010 - 06 - 28 13 : 48 : 59 ?????? 7000

?

?????? 插入特定的日期值

?????????? SQL > INSERT INTO emp

?????????? ? 2 ? VALUES ( 1236 , 'Ben' , 'IT' ,null, TO_DATE ( 'JUN 28 2010' , 'MON DD YYYY' ), 3000 , 20 );

???

??? 3. 在列中使用單引號和雙引號

?????? -- 單引號的使用

?????????? SQL > INSERT INTO emp VALUES

?????????? ? 2 ? ( 1238 , 'Dan' , 'Malley''K' , '' , sysdate , 2900 , 20 );

?

?????????? 1 row created . ???

?????? ???

?????? -- 雙引號的使用 ?

?????????? SQL > INSERT INTO emp VALUES

?????????? ? 2 ? ( 1239 , 'Dane' , 'A "Big" L' , '' , sysdate , 2900 , 20 );

?

?????????? 1 row created .

?

?????????? SQL > SELECT * FROM emp WHERE ename LIKE 'Dan%' ;

?

????????????? ? EMPNO ENAME ????????????? JOB ????????????? MGR HIREDATE ??????????????? SALARY ???? DEPTNO

?????????? ---------- ------------------ --------- ---------- ------------------- ---------- ----------

????????????? ? 1238 Dan ??????????????? Malley ' K ???????????? 2010-06-28 14:04:35 ?????? 2900 ???????? 20

????????????? ? 1239 Dane ?????????????? A "Big" L ??????????? 2010-06-28 14:07:12 ?????? 2900 ???????? 20

????????????? ?

??? 4. 從其它表中拷貝數據(利用子查詢向表中插入數據)

?????? INSERT 語句中加入子查詢。

?????? 不必書寫 VALUES 子句。

?????? 子查詢中的值列表應與 INSERT 子句中的列名對應

?????? -- 克隆表結構 ???

?????????? SQL > CREATE TABLE test AS SELECT * FROM scott . emp WHERE 0 = 1 ;

?

?????????? Table created .

?

?????? -- 使用 select 子句插入新值

?????????? SQL > INSERT INTO test SELECT * FROM scott . emp ;

?

?????????? 21 rows created .

?

?????? -- 使用 select 子句插入部分列值

?????????? SQL > INSERT INTO test ( empno , ename , job , salary )

?????????? ? 2 ? SELECT empno , ename , job , salary

?????????? ? 3 ? FROM scott . emp

?????????? ? 4 ? WHERE ename LIKE 'Dan%' ;

?

?????????? 2 rows created .

?

??? 5. 利用替代變量向表中插入數據

?????????? SQL > INSERT INTO test ( empno , ename , job , salary )

?????????? ? 2 ? VALUES (& empno , '&ename' , '&job' ,& salary );

?????????? Enter value for empno : 1240

?????????? Enter value for ename : Andy

?????????? Enter value for job : Singer

?????????? Enter value for salary : 3600

?????????? old ?? 2 : VALUES (& empno , '&ename' , '&job' ,& salary )

?????????? new ?? 2 : VALUES ( 1240 , 'Andy' , 'Singer' , 3600 )

?

?????????? 1 row created .

?????????????????

四、更新數據 ( UPDATE )

??? 語法:

?????? UPDATE table

?????? SET column = value [, column = value, ...]

?????? [WHERE ? condition] ;

???

??? 可以一次更新多條數據。

??? 使用 WHERE 子句指定需要更新的數據,如果省略 WHERE 子句,則表中的所有數據都將被更新。

???

??? 1. 直接更新

?????? SQL > UPDATE emp SET salary = salary + 100 WHERE ename = 'SCOTT' ;

?

?????? 1 row updated .

?

??? 2. UPDATE 語句中使用子查詢

?????? SQL > UPDATE emp SET salary = ?

?????? ? 2 ????? ( SELECT salary FROM emp WHERE ename = 'SCOTT' )

?????? ? 3 ? WHERE empno = 7839 ;

?

?????? 1 row updated .

?

??? 3. 使用多列子查詢來修改記錄:

?????? SQL > UPDATE emp SET ( job , salary )

?????? ? 2 ????? = ( SELECT job , salary FROM emp WHERE ename = 'SCOTT' )

?????? ? 3 ? WHERE ename = 'Jack' ;

?

?????? 1 row updated .

?

五、刪除數據

??? 使用 DELETE 語句從表中刪除數據。

??? DELETE [FROM] table [WHERE condition] ;

?

??? 1. 使用 WHERE 子句指定刪除的記錄,如果省略 WHERE 子句,則表中的全部數據將被刪除。

?????? SQL > DELETE FROM emp WHERE empno = 1234 ;

?

?????? 1 row deleted .

?

??? 2. DELETE 中使用子查詢

?????? DELETE 中使用子查詢,使刪除基于另一個表中的數據。

?????? SQL > DELETE FROM emp

?????? ? 2 ? WHERE deptno =

?????? ? 3 ????? ( SELECT deptno FROM scott . dept WHERE dname = 'ACCOUNTING' );

?

?????? 4 rows deleted .

?

六、在 DML 語句中使用 WITH CHECK OPTION

??? 子查詢可以用來指定 DML 語句的表和列

??? WITH CHECK OPTION 關鍵字可以防止更改不在子查詢中的行

???

??? --deptno 列不在 select 列表中,故不能被更新

?????? SQL > INSERT INTO ???

?????? ? 2 ????? ( SELECT empno , ename , job , mgr , salary FROM emp

?????? ? 3 ?????? WHERE deptno = 20 WITH CHECK OPTION )

?????? ? 4 ? VALUES ( 1250 , 'Smith' , 'Clerk' , 7902 , 3000 );

?????????? ( SELECT empno , ename , job , mgr , salary FROM emp

????????????????????????????????????????????? *

?????? ERROR at line 2 :

?????? ORA - 01402 : view WITH CHECK OPTION where - clause violation

???

七、 TRUNCATE TABLE 截斷表

??? 刪除所有數據,保留表結構

??? TRUNCATE TABLE 語句不能回滾

??? ??? SQL > TURNCATE TABLE emp ;

???

八、使用默認值

??? 顯式默認值

??? 使用 DEFAULT 關鍵字表示默認值

??? 可以使用顯示默認值,控制默認值的使用

??? 顯示默認值可以在 INSERT UPDATE 語句中使用

?????????? SQL > CREATE TABLE tb ??

?????????? ? 2 ? (

?????????? ? 3 ????? orderid INT PRIMARY KEY ,

?????????? ? 4 ????? status VARCHAR2 ( 20 ) DEFAULT 'Delivery' NOT NULL,

?????????? ? 5 ????? last_update DATE DEFAULT sysdate

?????????? ? 6 ? );

?

?????????? Table created .

?

?????????? -- 自動使用默認值

?????????? SQL > INSERT INTO tb ( orderid ) SELECT 10 FROM DUAL ;

?

?????????? 1 row created .

?

?????????? -- 指定新值來覆蓋默認值

?????????? SQL > INSERT INTO tb SELECT 20 , 'No Delivery' , '28-MAY-10' FROM DUAL ;

?

?????????? 1 row created .

?

?????????? -- 使用 default 關鍵字來設置為默認值

?????????? SQL > SELECT * FROM tb ;

?

?????????? ?? ORDERID STATUS ?????????????? LAST_UPDA

?????????? ---------- -------------------- ---------

????????????????? 10 Delivery ???????????? 28 - JUN - 10

????????????????? 20 No Delivery ????????? 28 - MAY - 10

?

?????????? SQL > UPDATE tb SET status = DEFAULT WHERE orderid = 20 ;

?

?????????? 1 row updated .

?

?????????? SQL > SELECT * FROM tb ;

?

?????????? ?? ORDERID STATUS ?????????????? LAST_UPDA

?????????? ---------- -------------------- ---------

????????????????? 10 Delivery ???????????? 28 - JUN - 10

????????????????? 20 Delivery ???????????? 28 - MAY - 10

?

九、 RETURNING 子句

??? 使用 RETURNING 子句返回聚合函數的結果集 ?????????????

?????? SQL > VARIABLE avg_salary NUMBER

?????? SQL > UPDATE emp SET salary = salary + 100

?????? ? 2 ? RETURNING AVG ( salary ) INTO : avg_salary ;

?

?????? 16 rows updated .

?

?????? SQL > PRINT avg_salary ;

?

?????? AVG_SALARY

?????? ----------

?????? ? 2554.6875

?

十、 MERGE INTO ???

??? 將一個表中的行合并到另一個表中

??? MERGE INTO 語法:

?????? MERGE INTO table_name table_alias

?????? USING ( table|view|sub_query ) alias

?????? ON (join condition )

?????? WHEN MATCHED THEN

?????????? UPDATE SET

?????????? col1 = col_val1 ,

?????????? col2 = col2_val

?????? WHEN NOT MATCHED THEN

?????????? INSERT ( column_list )

?????????? VALUES ( column_values );

??????

??? -- 創建演示環境

?????? SQL > CONN hr / hr ;

?????? Connected .

??? -- hr.job_history 提取唯一的數據并復制到新表 job_hs

?????? SQL > CREATE TABLE job_hs AS

?????? ? 2 ? SELECT employee_id , start_date , end_date , job_id , department_id ? FROM job_history jh

?????? ? 3 ? WHERE end_date =

?????? ? 4 ????? ( SELECT MAX ( end_date ) FROM job_history WHERE employee_id = jh . employee_id );

?

?????? Table created .

?

?????? SQL > SELECT * FROM job_hs ORDER BY employee_id ;

?

?????? EMPLOYEE_ID START_DAT END_DATE ? JOB_ID ???? DEPARTMENT_ID

?????? ----------- --------- --------- ---------- -------------

????????????? 101 28 - OCT - 93 15 - MAR - 97 AC_MGR ?????????????? 110

????????????? 102 13 - JAN - 93 24 - JUL - 98 IT_PROG ?????????????? 60

????????????? 114 24 - MAR - 98 31 - DEC - 99 ST_CLERK ????????????? 50

????????????? 122 01 - JAN - 99 31 - DEC - 99 ST_CLERK ????????????? 50

????????????? 176 01 - JAN - 99 31 - DEC - 99 SA_MAN ??????????????? 80

????????????? 200 01 - JUL - 94 31 - DEC - 98 AC_ACCOUNT ??????????? 90

????????????? 201 17 - FEB - 96 19 - DEC - 99 MK_REP ??????????????? 20

??? -- hr.employees 中的記錄當 job_hs 中存在時,則更新相關項,否則插入到 job_hs 表中 ??????

?????? SQL > MERGE INTO job_hs h

?????? ? 2 ? USING employees e

?????? ? 3 ? ON ( h . employee_id = e . employee_id )

?????? ? 4 ? WHEN MATCHED THEN

?????? ? 5 ? UPDATE

?????? ? 6 ????? SET

?????? ? 7 ???????? start_date = sysdate ,

?????? ? 8 ???????? end_date = sysdate + 100 ,

?????? ? 9 ???????? job_id = e . job_id ,

?????? ? 10 ???????? department_id = e . department_id

?????? ? 11 ? WHEN NOT MATCHED THEN

?????? ? 12 ????? INSERT ( h . employee_id , h . start_date , h . end_date , h . job_id , h . department_id )

?????? ? 13 ????? VALUES ( e . employee_id , e . hire_date , sysdate , e . job_id , e . department_id );

?????? ?

?????? ? SQL > SELECT COUNT (*) FROM job_hs ;

?

?????? ? COUNT (*)

?????? ----------

?????????? ?? 107

?????????? ??

??? MERGE INTO 使用注意事項

??? ??? MERGE INTO 子句應指明需要合并的目的表

?????? USING ... ON 子句用于表之間的連接

?????? WHEN MATCHED THEN 子句指明當條件滿足時則對目的表執行何種操作 ( 此處是 UPDATE 操作 )

?????? WHEN NOT MATCHED THEN 子句指明當條件不滿足時對目的表執行何種操作 ( 此處是 INSERT 操作 )

?

十一、更多

Oracle 用戶、對象權限、系統權限

? SQL 基礎 --> ROLLUP CUBE 運算符實現數據匯總

? SQL 基礎 --> 層次化查詢 (START BY ... CONNECT BY PRIOR)

? SQL 基礎 --> 視圖 (CREATE VIEW)

? Oracle 常用目錄結構 (10g)

?

SQL基礎--> 數據處理(DML、RETURNING、MERGE INTO)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线午夜 | 四虎sihu新版影院亚洲精品 | 色综合久久久久久 | 国产成人综合亚洲欧洲色就色 | 亚洲欧美在线看 | 日本不卡二区 | 久久国产乱子伦免费精品 | 亚洲xoxo | 国产精品12| 青草青视频在线观看 | 精品欧美一区二区精品久久 | 91精品视频在线播放 | 免看一级a一片成人123 | 暗香影院午夜国产精品 | 久久久久欧美激情 | 日韩专区亚洲国产精品 | 在线观看日本人免费视频色 | 久久精品国产亚洲黑森林 | 色婷婷在线观看视频 | 婷婷在线五月 | 高清午夜毛片 | 四虎免费播放观看在线视频 | 免费看成人毛片 | 99爱免费视频 | 一级片视频网站 | 亚洲久草视频 | 欧美日韩成人在线视频 | 亚洲精品性夜夜夜 | 一区二区不卡在线观看 | 在线观看www. | 日韩精品在线一区 | 亚洲成人第一 | 五月花精品视频在线观看 | 高清国产在线 | 国产一区二区亚洲精品 | 久久精品视频免费在线观看 | 亚洲精品久久久久中文 | 日本人一级毛片免费完整视频 | 国产一区自拍视频 | 亚洲精品一区二区三区美女 | 亚洲国产欧美日韩 |