中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

第一部分   數據處理基礎

發布時間:2020-07-20 21:42:02 來源:網絡 閱讀:266 作者:宋晨光 欄目:關系型數據庫

 第一章 SQL基礎回顧

    在INSERT語句中省略字段名的做法,非常少見,也有很大的風險,除非有什么特殊的理由,不然就別這么做,別把你的SQL語句搞得太脆弱,因為無法預知在何時表的結構會發生變化。舉例來說,如果將來有人重建表,而且表中的字段排序順序發生變化,碰巧你的INSERT語句通過字段類型和其他約束性檢查,你就在沒有錯誤提示的情況下,把數據寫入了表中錯誤的字段,那將是長災難。所以, 強烈建議在寫INSERT語句時,一定要指定字段名。

    查看表的表述: 

desc 表名;


    如果用DELETE語句來刪除所有行,則Oracle會完整地把刪除行為記入日志,以便如果是誤操作,我們還有機會將數據回滾。但正應為要記日志,所以需要花一定的時間,有時達不到我們希望的速度。

    作為補充,Oracle提供了一個TRUNCATE(截斷)語句來刪除表中的所有數據。可以用下面的語句來截斷HR.EMPLOYEES表:

   

 truncate table hr.employee;


    TRUNCATE語句不帶WHERE子句或其他限制條件。TRUNCATE語句的處理是按DDL(Data Definition Language,數據定義語言)的方式,因此同時也隱含了數據庫的一些操作,如隱式地提交其他open事務。

Oracel對空字符串的非標準處理

    SQL標準做法是用空或零長度的字符串來代表NULL值,而Oracle并非如此。其中歷史的、地域的原因我們無需深究,但一定要記住,Oracle對NULL的規定和用法。對于幾乎所有的其他數據庫,SQL都把空字符串當做一個獨立的、已知的值。

    有編程背景的人會發現一些類似的規定,一個0長度的字符串只有一個字符串終結符(\0)作為其內容。相反,一個加密的字符串沒有確定的狀態……即使是一個終結符。我們不能把0長度和未知狀態的字符串進行互換,這類似于Oracle如何對待NULL。

    在SQL中涉及NULL值的使用訣竅,也是每天必須面對的功課,這經常讓人不知所措。每個SQL表達式的結果都是三個值選一:“真”、“假”或“空”。在各種比較、邏輯操作和判斷中都是如此。但為避免偶爾的遺忘,我們還是要一再強調:NULL不跟任何值相等,任何值不跟NULL相等,NULL不等于NULL。

    

    Oracel默認用二進制的排序方法。

    有時候,我們希望看見兩個字段值相同的排在一起,忽略大小寫。用這個NLS環境變量可以達到目的:

    

alert session set NLS_SORT = 'BINARY_CI';


    

    Oracle支持區分大小寫和不區分大小寫兩種排序方式。有個環境變量NLS_SORT進行區分大小寫和不區分大小寫的控制。默認的排序操作區分大小寫,即NLS_SORT=BINARY。如果我們希望排序不區分大小寫的方式,則需把環境變量NLS_SORT設置為BINARY_CI。

    顧名思義,NLS_SORT僅僅影響排序結果,并不對其他大小寫操作構成影響。即使把NLS_SORT設置為BINARY_CI,以不區分大小寫的方式比較數據的操作仍然延續了Oracle默認的方式。

    小技巧:比較傳統的方式不是使用NLS環境變量,而是用UPPER和LOWER函數把要比較的字段名,文字都轉換成大寫或小寫后再比較。這種方式的不足之處在于,使用函數后,標準的索引就不能使用了,優化器無法工作,應對的方式是使用基于功能的索引(function-based index)。

    

    通過對會話的環境變量的設置,引導Oracle用自然語言的方式進行比較,雖然表中都是這種形式的Simth而非全小寫,但NLS_COMP環境變量可以控制Oracle對字符的比較方式,設置為LINGUISTIC,可以用自然語言的方式比較,符合人類的思維習慣。

    

alert session set NLS_COMP = 'LINGUISTIC';
    select first_name,last_name from hr.employee where last_name = 'simth';


-----------------------<  查詢結果>-------------------------

William                    SMITH

Lindsey                    Smith

-----------------------</查詢結果>--------------------------

    MERGE 語句的功能是將新數據插入一個表中。記錄是否存在,由主(PRIMARY) 鍵進行判斷。如果主鍵不存在于表中,則插入該行。如果主鍵匹配表中已有的行,則通過匹配鍵的其他詳細信息更新該行。

    在示例中,假設要把NEW_COUNTRIES表中一些國家的信息添加到HR.COUNTIES表中:

   

 merge into hr.countries c
    using
    (select country_id,country_name
        from hr.new_countries) nc
    on (c.country_id=nc.country_id)
    when matched then
        update set c.country_name = nc.country_name
    when not matched then
        insert (c.country_id,c.country_name)
        values (nc.country_id,nc.country_name);


    

    ON子句后面跟著另兩個子句,當鍵值相匹配時,執行“WHEN MATCHED CLAUSE”子句內容,當鍵值不匹配時,執行“WHEN NOT MATCHED”子句,會把新的記錄插入目標表中。

    match和not-match子句都可以包含更多的篩選條件,當滿足刪除條件時,也可以刪除記錄:

    

merge into hr.countries c 
    using
        (select country_id,country_name,region_id
        from hr.new_countries) nc
    on(c.country_id = nc.country_id)
    when matched then
        update set c.country_name = nc.country_name,
            c.region_id = nc.region_id
        delete where nc.region_id = 4
    when not matched then
        insert (c.country_id,c.country_name,c.region_id)
        values (nc.country_id,nc.country_name,nc.region_id)
        where (nc.region_id !=4);


    在這個修改后的版本中,除了REGION_ID的新值是4的行,其他根據COUNTRY_ID匹配的HR.CONTRIES的行都會修改COUNTR_NAME的值,而REGION_ID是4的行最終會刪除。沒有匹配上的行,除了REGION_ID的值是4的行,其他行都會被插入HR.COUNTRIES中,而REGION_ID的值是4的行會被忽略。

 看完記得點贊哦O(∩_∩)O!   

                                          2015-03-17 23:40


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

准格尔旗| 临邑县| 洛隆县| 嘉义县| 青龙| 南阳市| 翁源县| 郓城县| 盐源县| 剑河县| 浮梁县| 开鲁县| 蓬溪县| 锡林郭勒盟| 马鞍山市| 连州市| 阿荣旗| 石门县| 台中县| 南通市| 长乐市| 鹤峰县| 吴川市| 张家界市| 邓州市| 浙江省| 西乡县| 马尔康县| 辉县市| 西乌珠穆沁旗| 江永县| 南丰县| 敦化市| 万荣县| 周至县| 长泰县| 永胜县| 株洲市| 马公市| 柘城县| 南郑县|