Oracle高級查詢

本章將學習的內容有:

  • 如何使用集合操作符,集合操作符用於將兩個或多個查詢返回的行組合起來

  • 使用TRANSLATE函數

1、使用集合操作符

    

操作符
說明
UNION ALL
返回各個查詢檢索出的所有行,包括重複行
UNION
返回各個查詢檢索出的所有行,不包括重複行
INTERSECT
返回兩個檢索鎖的共有行
MINUS
返回將第二個查詢檢索出的行從第一個查詢檢索的行中去除之後的行

    注意:當使用集合操作符的時候,必須牢記這樣一條限制:所有查詢返回的列數以及列的類型必須匹配,但列名可以不同。

    使用INTERSECT查找兩次檢索結果中有相同的結果

    wKioL1dhQISDcgorAAAk8vgPR8c926.png-wh_50

    wKiom1dhP_6wE3CjAAAmPWzjel8543.png-wh_50

    使用MINUS操作返回第一個結果去除第二個查詢結果之後的結果。(有興趣的童鞋可以自行測試下)

2、使用TRANSLATE函數

    TRANSLATE(x,from_string,to_string)函數在x中查找from_string中的字符,並將其轉換成to_string中對應的字符。wKioL1dhRBnh1paKAABQBHFdto4629.png-wh_50

3、使用DECODE()函數

    DECODE(value,search_value,result,default_value) 對value與search_value進行比較。如果這兩個值相等,DECODE()返回result,否則返回default_value。

DECODE()允許在SQL中執行if-then-else類型的邏輯處理。

    wKioL1dhRTaD-rGEAAAp25Yq-RU675.png-wh_50

4、使用CASE表達式

    case表達式可以在SQL中實現if-then-else型邏輯,case表達式的工作方式與decode()類似,但是我們應該使用case,因爲它兼容ANSI,並且已經成爲SQL/92標準的一部分另外case表達式易讀。語法:

case search_expression

when expression1 then result1

when expression2 then result2

...

when expressionN then resultN

else default_result

end

5、使用分析函數

    數據庫中有很多內置的分析函數,能夠執行復雜的計算,例如查找每月銷量最高的商品類行,業績最佳的銷售員等。分析函數可以分爲以下幾類。

  • 評級函數:可計算等級、百分比等

  • 反百分比函數:可計算對應於百分點的數值

  • 窗口函數:可計算累積和移動總計

  • 報表函數:可計算注入市場佔有率之類的結果

  • 延遲與領先函數:可獲得與當前記錄的記錄爲若干條記錄的那個記錄的值

  • 首函數與末函數:可獲得某個已經排序的第一個和最後一個返回值

  • 線性迴歸函數:可用一條普通最小平方迴歸曲線來擬合一組數值對

5、修改表內容

使用INSERT語句添加行

當省略列的列表時,指定的順序必須與DESCRIBE命令輸出結果顯示的列的順序一致

要爲控制指定NULL值

從一個表向另一個表複製行。要求:源表和目標表的列數以及列的類型必須匹配

SQL>INSERT INTO cboss.fault_barrier_base_code(code_type,code_id)
    SELECT c.code_type,c.code_id
    FROM cboss.cboss_base_code
    WHERE c.serialno < 100

使用UPDATE語句修改行

使用RETURNING子句,返回使用聚合函數如AVG()計算的結果。

使用DELETE語句刪除行

6、數據庫的完整性

6.1、主鍵約束。主鍵的每一個值必須是唯一的primary key

6.2、外鍵約束。foreign key。。 references

6.3、使用默認值default

6.4、使用MERGE合併行

6.5、數據庫事務(transaction)是一組SQL語句,這組SQL語句就是一個邏輯工作單元。事務是不可分割的SQL語句,其結果應該作爲一個整體永久性地修改數據庫的內容

或者取消對數據庫的修改

6.5.1、事務的提交和回滾

    事務提交需要執行COMMIT語句,從而提交(commit)事務。要取消SQL語句的結果,需要執行ROLLBACK語句,從而回滾(rollback)事務,將所有行重新設置爲原始狀態。

6.52、事務的開始與結束

    事務是用來分割SQL語句的邏輯工作單元。事務既有起點也有終點。執行DML語句的時候事務開始。執行COMMIT或者ROLLBACK時事務結束。執行DDL語句,如CREATE自動提交事務。執行DCL語句,例如GRANT語句,自動提交事務。

6.5.3、設置保存點,SAVEPOINT,可以將修改回滾到保存點。這對一個大事務來說很有用。

6.5.4、事務的ACID特性

    原子性(Atomic)事務是原子的,不可分割

    一致性(Consist)事務必須確保數據庫的狀態保持一致,事務結束,數據庫狀態時結束,事務開始,數據庫狀態也是開始

    隔離性(Isolated)多個事務之間是獨立運行的,互不影響

    持久性(Durale)一旦事務被提交,數據的變化就會被永遠的保留下來。

6.5.5、併發事務

    Oracle數據庫軟件支持多個用戶同時與數據庫進行交互,每個用戶都可以同時運行自己的事務。這種事務成爲併發事務(concurrent transaction)。

    要支持併發事務,Oracle數據庫軟件必須保證表中的數據一直有效,這可以通過鎖(Lock)來實現。

7、用戶、特權和角色

創建用戶:

CREATE USER user_name IDENTIFIED BY password
[DEFAULT TABLESPACE default_tablespace]
[TEMPORARY TABLESPACE temporary_tablespace]

給用戶授權:

GRANT PRIVILIGE TO USER;
示例:
GRANT CREATE,DROP,CONNECT TO USER_NAME;
查看用戶系統特權
SELECT * FROM USER_SYS_PRIVS ORDER BY PRIVILEGE;
查看用戶對象特權
SELECT * FROM USER_TAB_PRIVS;
撤銷用戶特權
REMOVE PRIVELES FROM USER_NAME
示例
REMOVE CREATE,CONNECT FRMO USER_NAME;

角色(role)就是一組特權,他可以分配給一個用戶或者其他角色

角色的優點和特性:

  • 並不是一次一個地將特權直接授予一個用戶,而是先創建角色,向該角色授予一些特權,然後再將角色授予多個用戶和角色

  • 在增加和刪除一個角色的某種特權時,被授予該角色的所有用戶和角色都會自動獲得新加的特權或者自動失去這種特權

  • 可以將多個角色授予一個用戶或角色

  • 可以爲角色設置密碼

創建角色
CREATE ROLE user_manager;
設置密碼
CREATE ROLE admin_manager IDENTIFIED BY admin_password;
#爲角色授權
GRANT PRIVILEGES ON TABLE_NAME TO USER_MANAGER;
#將角色授予用戶
GRANT ROLE_NAME TO USER_NAME;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章