oracle sql 基礎(三):資料操縱語言

來源:互聯網
上載者:User

標籤:順序   單引號   開始   完整   應用   執行個體   欄位名   commit   table   

       資料操縱語言,Data manipulation language,檢稱DML,主要包括檢索(SELECT)、插入(INSERT)、更新(UPDATE)、刪除(DELETE),是SQL的一個核心部分。一條DML將開始一個事務,接下來的DML都是同一事務中的語句,直到提交(COMMIT)或復原(ROLLBACK)。下面我們來逐一介紹下ORACLE中的插入、更新、刪除和合并(MERGE)的文法及執行個體解析。

      一、INSERT 語句

       1、INSERT 語句的文法

       插入單行記錄文法:INSERT INTO table [(column [, column...])] VALUES (value [,value...]);

       該語句用VALUES子句添加行到列表中,一次僅一行。在INSERT子句中欄位列表不是必須的,若不用欄位列表,值必須按照表中欄位的預設順序排列。為使語句更清楚,在INSERT子句中使用欄位列表。字元和日期值應該放在單引號中,數字值不需要,若使用了單引號,可能發生數字值的隱氏轉換。

       插入子查詢結果(可多行)文法:INSERT INTO table [(column [, column...])] subquery;

       在INSERT子句的欄位列表中列的數目和資料類型必須與子查詢中的列的數目及其資料類型相匹配。插入子查詢資料分兩種情況:一種從相關的一個表或者多個表查詢需要插入的資料;另一種是從DUAL表查詢特定的資料、子查詢,取得相應的資料。

       2、INSERT 語句的例子

       由於公司新組建了一個部門,需要在部門表(DEPT)中插入一條資料,部門號為50,部門名為資料中心(DATACENTRE),部門所在地為中國(CHINA);並在員工表(EMP)中插入該部門領導的資訊,員工號為7950,姓名為SJZH,崗位、領導編號和其他部門管理者一樣,入職時間為今天,工資為崗位為管理者薪資的平均值,獎金為空白,所在部門編號為50。INSERT 語句的實現代碼如下

-----插入新部門的部門資訊INSERT INTO dept (deptno,dname,loc)VALUES (50,‘DATACENTRE‘,‘CHINA‘);-----插入新部門管理者的員工資訊INSERT INTO emp(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)SELECT 7950,       ‘SJZH‘,       ‘MANAGER‘,       (SELECT DISTINCT mgr FROM emp WHERE job=‘MANAGER‘),       SYSDATE,       (SELECT avg(sal) FROM emp WHERE job=‘MANAGER‘),       NULL,       50FROM dual;
INSERT 執行個體

      二、UPDATE 語句

       1、UPDATE 語句的文法

       用值更新文法:UPDATE table SET column=value[,column=value,...] [WHERE condition];

       通常,用主鍵標識一個單個的行,如果用其他的列,可能會出乎意料的引起另一些行被更新。若沒加約束條件,會導致整列被更新。

       用子查詢更新文法:UPDATE table SET column=subquery[,column=subquery,...] [WHERE condition];

       可以基於目標表或其他表更新列。主鍵是該表中的唯一約束,不能重複,外鍵是該表中的欄位與另外一個表的主鍵欄位名相同的情況下設定的一種約束,主鍵約束或外鍵約束不滿足的時候,資料無法更新或者插入。

       2、UPDATE 語句的例子

       現在,我們要從其他部門調兩個人到建立的部門(部門編號50,部門領導編號為7950),一個是分析師SCOTT,薪酬不變;一個是工資最低的辦事員,薪酬提高到和辦事員薪酬排名倒二的人持平。UPDATE實現代碼如下

----更新分析師SCOTT的員工資訊UPDATE emp SET mgr=7590,deptno=50WHERE empno=7788;----更新工資最低辦事員的員工資訊UPDATE emp SET mgr=7590,deptno=50,    sal=(SELECT sal         FROM (SELECT sal,rownum no               FROM (SELECT job,sal                      FROM emp                      WHERE job=‘CLERK‘                     ORDER BY sal                     )               WHERE job=‘CLERK‘               )         WHERE no=2         )WHERE sal=(SELECT sal           FROM (SELECT * FROM emp ORDER BY sal)           WHERE job=‘CLERK‘ and rownum=1);
UPDATE 執行個體

      三、DELETE 語句

       1、DALETE 語句的文法

       刪除記錄文法:DELETE [FROM] table [WHER condition];

       若沒有指定WHERE子句,表中的所有資料將被刪除,只有表的結構被保留,清空表的另一種更有效方法是用TRUNCATE語句。

       刪除的條件中可以使用子查詢,子查詢可以是針對任意表的,可以不是被刪除行的表。在提交DELETE之前,多看一眼,自己到底有沒有加條件,條件是否是唯一約束,是否真的是要刪除條件約束的資料。

       2、DELETE 語句的例子

       我們要把部門表DEPT的運營部(OPERATIONS)取消,首先得刪除員工表表EMP中所有運營部的員工資訊,然後再刪除DEPT中運營部的記錄。若員工表表中還有該部門的員工,直接在部門表中刪除該部門會因違反完整性條件約束而報錯。DELETE實現代碼如下

-----刪除部門OPERATIONS的所有員工資訊DELETE FROM empWHERE deptno=(SELECT deptno              FROM dept              WHERE dname=‘OPERATIONS‘);-----刪除部門OPERATIONS的部門資訊DELETE FROM dept WHERE dname=‘OPERATIONS‘;
DELETE 執行個體

      四、MERGE 語句

       1、MERGE 語句的文法

       MERGE語句,可以稱其為“融合”語句,它相當於插入與更新語句的綜合。通常是對兩個表進行操作,是執行對目的表的更新操作還是執行對目的表的插入操作,取決於基於ON子句中的條件。MERGE有以下特點:避免分散更新,增進效能和易用性,在資料倉儲應用中有用。MERGE合并的文法如下

MERGE INTO table_nametable_alias       ---指定你正在更新或插入的目的表USING (table|view|sub_query) alias     ---指定要用於更新或插入的資料來源ON (join condition)              ---類似於表串連條件,在此條件下即可更新也可進行插入WHEN MATCHED THEN                ---當滿足條件時,更新該條記錄到目的表中UPDATE 
SET col1 = col1_val[,col2 = col2_val...]WHEN NOT MATCHED THEN  ---當不滿足條件時,插入該條記錄到目的表中INSERT (column_list)VALUES (column_values);

       在資料倉儲環境中,你可能有一個大的事實表和一個較小維數的表,小表中的行需要有條件地插入到大的事實表中,比如處理來自多個源的資料工作時,其中的一些可能是完全相同的,需要有條件地添加或修改行。在這種情況下,MERGE語句是有用的。

       2、MERGE 語句的例子

       現在,要把員工表EMP_COPY的資料合併到員工表EMP中,通過匹配EMP_COPY表的EMPNO列和EMP表的EMPNO列。如果找到了一個匹配,用EMP_COPY表中匹配行的列值更新EMP表中匹配的列值。如果相匹配行沒有找到,EMP_COPY表中匹配行的列值被插入到COPY_EMP表中。

----構造一個用於合并的員工表emp_copyCREATE TABLE emp_copy AS SELECT * FROM emp WHERE deptno in (10,40);INSERT INTO emp_copy (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES (7899,‘ASD‘,‘CLERK‘,7839,To_Date(‘2017-1-23‘,‘yyyy-mm-dd‘),2000,0,10);UPDATE emp_copy SET sal=1900 WHERE empno=7934;----把員工表EMP_COPY的資料合併到員工表EMP中MERGE INTO emp eUSING emp_copy cON (e.empno=c.empno)WHEN MATCHED THENUPDATESET e.ename=c.ename, --由於ON條件中已有e.empno=c.empno,故此處不能出現該句。    e.job=c.job,    e.mgr=c.mgr,    e.hiredate=c.hiredate,    e.sal=c.sal,    e.comm=c.comm,    e.deptno=c.deptnoWHEN NOT MATCHED THENINSERTVALUES(c.empno,c.ename,c.job,c.mgr,c.hiredate,c.sal,c.comm,c.deptno);
MERGE 執行個體

 

oracle sql 基礎(三):資料操縱語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.