(Les14 Manipulating Large Data Sets)[20171222]

来源:http://www.cnblogs.com/also-brook/archive/2017/12/22/8087802.html
-Advertisement-
Play Games

學習目標: -使用子查詢操縱數據 -展示多表插入特性 -使用多表插入 -無條件INSERT -旋轉INSERT -有條件 ALL INSERT -有條件 FIRST INSERT -合併表行 -跟蹤數據生命周期內的改變 使用子查詢操縱數據 -從另外一個表複製數據 -從內聯視圖取回數據 -基於另外一個 ...


學習目標:     -使用子查詢操縱數據     -展示多表插入特性     -使用多表插入         -無條件INSERT         -旋轉INSERT         -有條件 ALL INSERT         -有條件 FIRST INSERT     -合併表行     -跟蹤數據生命周期內的改變   使用子查詢操縱數據     -從另外一個表複製數據     -從內聯視圖取回數據     -基於另外一個表的值更新一個表數據     -基於另外一個表的值刪除一個表數據          子查詢可用於從表中檢索數據,您可以將其用作INSERT的輸入到不同的表中。 這樣,您可以使用一個SELECT語句輕鬆地將大量數據從一個表複製到另一個表。 同樣,可以使用子查詢在UPDATE和DELETE語句的WHERE子句中使用子查詢進行批量更新和刪除。 您也可以在SELECT語句的FROM子句中使用子查詢。 這被稱為內聯視圖。       從子查詢複製數據
INSERT INTO <table_name> [ column (, column ) ] subquery;
 向子查詢插入數據
 INSERT INTO ( subquery ) VALUES(col_value,....);
        註意:VALUES輸入值欄位必須同子查詢相匹配,表中NOT NULL欄位必須包含在子查詢中,遵循基表任何規則。  內聯視圖作為源取回數據
SELECT    a.column [ ( , a.column ) , b.column ( , b.column ) ] FROM  <table_name > a JOIN  ( subquery ) b         ON a.column= b.column;
    基於子查詢更新數據
 UPDATE <object_table> 
    SET COLUMN = (subquery1), SET COLUMN = (subquery2) WHERE <conditional>;
        註意:子查詢中只能返回一個值不能是一個集合。     基於另一個表刪除數據
DELETE FROM <object_table> WHERE COLUMN = (SELECT COLUMN FROM <source_table> WHERE <conditional>);
    子查詢DML數據使用WITH CHECK OPTION        
 INSERT INTO ( subquery <conditional> WITH CHECK OPTION ) VALUES(col_value,....);

        指定WITH CHECK OPTION,如果在INSERT,UPDATE或DELETE語句中使用子查詢來替代表中的某個表,那麼不會操作未包含在子查詢中的行的更改。簡單的講必須滿足條件的行才能INSERT、UPDATE和DELETE。

        10:19:14 SQL> insert into (select employee_id,last_name,email,hire_date,job_id from emp
        10:19:14   2  where employee_id=102 with check option)
        10:19:14   3  values(101,'Kochhar','NKOCHHAR',to_date('1989-09-21','YYYY-MM-DD'), 'HD_VP');
        insert into (select employee_id,last_name,email,hire_date,job_id from emp   
                                                                 
        ERROR 在行 1:
        ORA-01402: 檢視 WITH CHECK OPTION where- 子句違反

        10:18:38 SQL> insert into (select employee_id,last_name,email,hire_date,job_id from emp
        10:18:38   2  where employee_id=101 with check option)
        10:18:38   3  values(101,'Kochhar','NKOCHHAR',to_date('1989-09-21','YYYY-MM-DD'), 'HD_VP');
        已建立 1 個資料列.
 顯示預設值         -在INSERT和UPDATE語句中使用DEFAULT關鍵字來識別預設值,如果不存在預設值則使用NULL空值。         -使用DEFAULT選項可以避免在程式中硬編碼預設值或查詢字典以查找它。         
      10:24:56 SQL> update emp set job_id=default where employee_id=101;
        update emp set job_id=default where employee_id=101
                       *
        ERROR 在行 1:
        ORA-01407: 無法將 ("HR"."EMP"."JOB_ID") 更新為 NULL
 
        10:26:25 SQL> select salary from emp where employee_id=101;
        SALARY
        ----------
         16990
        10:26:48 SQL> update emp set  salary=default where employee_id=101;
        已更新 1 個資料列.
        10:27:11 SQL> select salary from emp where employee_id=101;
        SALARY
        ----------

        

    多表插入         多表插入,從子查詢返回的行通過計算插入到一個或多個表中。多表INSERT語句在數據倉庫非常有用,定期載入數據到數據倉庫,以便於業務分析。         從源庫提取數據並將其引入數據倉庫的過程通常稱為ETL,它表示提取、轉換和載入。             -提取,必須從許多不同的來源(如資料庫、應用程式)中識別和提取所屬的數據。             -轉換,數據必須物理運輸到目標系統或中間系統進行進一步處理,在此過程中可以進行一些轉換。             -載入,將數據存放於資料庫。         多表INSERT語句是實現SQL數據轉換的技術之一。                  語法:
        INSERT ALL
                    INTO <table_a> VALUES (...,...,...)
                    INTO <table_b> VALUES (...,...,...)
                    INTO <table_c> VALUES (...,...,...)
                    SELECT ...
                    FROM <source_table>
                    WHERE <conditional>;
 

 

        好處:             -減少INSERT ... SELECT語句             -減少轉換工作量             -新語句並行化提高性能       多表INSERT類型         -無條件INSERT         -有條件ALL INSERT         -有條件 FIRST INSERT         -旋轉INSERT                  語法
       INSERT [ALL] [conditional_insert_clause] [insert_into_clause values_clause] (subquery)
            -conditional_insert_clause
                [ALL] [FIRST]
                [WHEN condition THEN] [insert_into_clause values_clause] [ELSE] [insert_into_clause values_clause]
        無條件INSERT             ALL後面跟多個insert_into_clause來執行無條件的多項INSERT。子查詢每返回一行均執行一次insert_into_clause。           
      INSERT ALL
                INTO <table_name> VALUES(...,...,...)
                INTO <table_name> VALUES(...,...,...)
                (subquery WHERE <conditional>);
        有條件INSERT             condition_into_clause按條件執行多INSERT。Oracle通過相應的WHEN條件過濾每個insert_into_clause。一個多INSERT語句最多可以包含127個WHEN子句。         有條件INSERT ALL             Oracle評估每個WHEN子句,而不考慮其他WHEN子句的結果,對條件為真的每個WEHN子句,執行相應的INTO子句。
     INSERT ALL
                WHEN <conditional> THEN
                    INTO <table_name> VALUES(...,...,...)
                WHEN <conditional> THEN
                    INTO <table_name> VALUES(...,...,...)
                (subquery);
        有條件INSERT FIRST             Oracle按順序評估每個WHEN子句。如果第一個WHEN子句的計算結果為true,則Oracle執行相應的INTO子句並跳出後續WHEN子句。           有條件INSERT ELSE             Oracle按順序評估每個WHEN子句。如果WHEN沒有滿足的則執行ELSE中的INTO,再則ELSE也不滿足,則Oracle不會對該行採取任何操作。   
     INSERT FIRST
                WHEN <conditional> THEN
                    INTO <table_name> VALUES(...,...,...)
                WHEN <conditional> THEN
                    INTO <table_name> VALUES(...,...,...)
                ELSE
                    INTO <table_name> VALUES(...,...,...)
                (subquery);
        多表INSERT限制操作             -不能在視圖或物化視圖上執行             -不能遠程表(dblink)執行多INSERT             -多表INSERT時不能使用表集合表達式,如TABLE1,TABLE2..             -多表INSERT中,所有insert_into_clause組合不能超過999個目標列。       旋轉INSERT(行轉列)
       INSERT ALL
                   INTO <table_name> VALUES(col1,col2,col3)
                   INTO <table_name> VALUES(col1,col2,col4)
                   INTO <table_name> VALUES(col1,col2,col5)
            SELECT col1,col2,col3,col4,col5 FROM <table_name> WHERE <conditional>;
 

    MERGE語句

       - Oracle支持INSERT、UPDATE和DELETE操作的合併語句。避免了多個DML語句。是否INSERT、UPDATE或DELELE到目標表取決於子句中的條件。        - MERGE語句適用於許多數據倉庫應用程式。例如,在數據倉庫應用程式中,可以需要處理多個源的數據,其中一些數據可能是重覆的,通過MERGE語句,可以有條件地添加或修改行。         -滿足條件存在就UPDATE、不存在就INSERT
  MERGE INTO <object_table> USING <source_table> ON (join column)
            WHEN MATCHED THEN
                UPDATE SET ...
            WHEN NOT MATCHED THEN
                INSRT (column_list) VALUES...;->註意這裡沒有INTO 關鍵字。
 
    跟蹤數據的改變         可以使用閃回版本查詢在一段時間內查看行的所有更改。此功能可以將一個版本子句附加到SELECT 語句,該語句指定查看行值更改的SCN或時間戳範圍。         -undo_retention初始化參數,保留版本的時間值。         -SCN(System Change Number)系統更改號,Oracle分配一個系統更改號(SCN),以標識每個提交事務的重做記錄。                  
        21:56:28 SQL> update emp set salary=1000 where employee_id=101;
        已更新 1 個資料列.
        21:57:01 SQL> commit;
        確認完成.
        21:57:04 SQL> update emp set salary=salary+1000 where employee_id=101;
        已更新 1 個資料列.
        21:57:11 SQL> commit;
        確認完成.
        21:57:13 SQL> select salary from emp
        21:57:20   2  versions between scn minvalue and maxvalue
        21:57:21   3  where employee_id=101;
        SALARY
        ----------
         2000
         1000
 
    21:57:22 SQL> select versions_starttime,versions_endtime ,salary from emp
    21:59:06   2  versions between scn minvalue and maxvalue
    21:59:09   3  where employee_id=101;
 
 
VERSIONS_STARTTIME                  VERSIONS_ENDTIME                        SALARY
----------------------------------- ----------------------------------- ----------
22-12月-17 09.57.10 下午                                                     2000
22-12月-17 09.57.01 下午            22-12月-17 09.57.10 下午                  1000
22-12月-17 09.56.16 下午            22-12月-17 09.57.01 下午                  2000
22-12月-17 09.55.58 下午            22-12月-17 09.56.16 下午                  1000
                                   22-12月-17 09.55.58 下午    

    versions_starttime和versions_endtime偽列

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.文件系統詳解: linux文件系統主要是ext2、ext3、ext4等等,它主要是管理系統的數據,數據是保存在磁碟裡面的, 當磁碟被分區、格式化後就可以正常的存取數據了,其實格式化就是向分區的部分寫入文件系統, 在文件系統的概念中,數據是怎麼保存的,還有那些檔案的屬性、許可權等又是保存在什麼地方的 ...
  • rm (選項)(參數) 刪除文件或文件夾,無法恢復-f:強制刪除文件或目錄 -i:刪除已有文件或目錄之前先詢問用戶是否刪除,預設就是 rm -i -r或-R:遞歸處理,將指定目錄下的所有文件與子目錄一併處理刪除-v:顯示刪除的過程例: 1.創建文件夾後刪除他,每一次都詢問是否刪除 2.在剛剛創建的文 ...
  • 當產品要發佈之前,都會進行反覆的測試輸入,比如:測試按鍵,遙控,觸摸等等. 當出現bug時,就還需要不停地找規律,修改程式,直到修複成功,會顯的非常麻煩 答: 可以通過之前在35.Linux-分析並製作環形緩衝區里學的,使用myprintf()保存到環形緩衝區. 當出錯時,直接可以通過緩衝區里的數據 ...
  • mkdir (選項)(參數) 創建文件夾-m:創建文件夾的同時,賦予其許可權-p:若創建目錄的上層不存在時,一併創建出來-v:顯示創建的過程創建多個目錄的時候,用空格隔開 rmdir (選項)(參數) 刪除文件夾-p:刪除一個文件夾之後,假如該文件夾上層也是空的,一併把上層文件夾刪掉-v:顯示刪除的過 ...
  • 目錄: 1.linux的前世今生. 2.企業如何選擇linux系統? 3.如何在虛擬機上安裝linux系統?搭建學習環境. 1.linux的前世今生. 1).起源:先是貝爾實驗室的Unix系統,因為各家對於自己的硬體做了定製的Unix系統,但是硬體太貴,很多人用不起,出於教學目的,芬蘭的教授譚邦寧, ...
  • 目錄: 1.有哪些分類?市面上有哪些常見的類型. 2.伺服器的組成部分. 3.各個部分的功能1.有哪些分類?市面上有哪些常見的類型.互聯網公司伺服器品牌:DELL(大多數公司),HP,IBM(百度),浪潮,聯想,航天聯志. DELL:1U高度=4.45cm 2010年以前:1U 1850,1950. ...
  • 一、Apache的下載 1、點擊鏈接http://httpd.apache.org/download.cgi,找到所需版本,如下圖位置: 2、點擊所需版本,選擇Windows文件格式,如下圖位置: 3、找到Downloading Apache for Windows欄,進入下載頁,如下圖位置: 4、 ...
  • 在學習Hbase的shell命令,之前先得瞭解如何進入hbase的shell命令行,通過執行如下簡單的命令回車後進入hbase的shell命令行界面 hbase shell 進入hbase命令行後,執行help然後回車,就能看到Hbase的shell命令行下有哪些命令,下麵是根據help反饋的幾類命 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...