Oracle Database 11g : SQL 基礎

 

 

簡介

 

1:課程目標

image

 

 

2:課程 目標

image

 

 

3:Oracle Database 11g 以及相關產品概覽

 

 

 

      1:Oracle Database 11g :重點領域

imageimage

      2:Oracle Fusion Middleware

 

image

 

 

 

 

      3:Oracel Enterprise Manager Grid Control

image

 

 

      4:Oracle Bi Publisher

 

image

 

 

 

4:關係數據庫管理概念和術語概覽

 

        1:關係和對象關係數據庫管理系統

image

 

        2:在不一樣介質中存儲數據

image

 

 

        3:關係數據庫概念

image

 

 

        4:關係數據庫的定義

image

 

        5:數據模型

image

 

 

 

        6:實體關係模型

image

 

        7:實體關係建模慣例

image

 

 

        8:管理多個表

image

 

        9:關係數據庫術語

image

5:SQL 及其開發環境簡介

 

        1:使用SQL查詢數據庫

image

 

        2:SQL語句

image

 

        3:SQL開發環境

image

 

 

 

6:本課程中使用的HR方案和表

         1:人力資源(HR)方案

image

        2:本課程使用的表

image

 

 

7:Oracle Database 11g 的文檔和其餘資源

        1:Oracle Database 11g 文檔

image

 

        2:其餘資源

image

 

第一章:使用SQL SELECT 語句檢索數據

 

1:課程目標

image

 

2:基本SELECT 語句

        1:SQL SELECT 語句的功能

image

 

        2:基本SELECT 語句

 

image

         3:選擇全部列

image

 

         4:選擇特定列

image

 

 

         5:編寫SQL 語句

image

         6:列標題的默認設置

image

3:SELECT 語句中的算術表達式和空值

         1:算術表達式

image

 

        2:使用算術運算符

image

         3:運算符優先級

image

 

 

        4:定義空值

image

 

        5: 算術表達式中的空值

image

 

4:列別名

         1:定義列別名

image

        2:使用列別名

image

 

 

5:鏈接運算符、文字字符串、其它引號運算符和 DISTINCT 關鍵字的用法

        1:鏈接運算符

image

        2:文字字符串

image

 

         3:使用文字字符串

image

 

 

        4:其它引號(q) 運算符

image

 

 

         5:重複行

image

6:DESCRIBE 命令

         1:顯示錶結構

image

 

 

         2:使用DESCRIBE 命令

image

 

第二章:對數據進行限制和排序

 

1:課程目標

      

image

 

2:使用如下項對行進行限制: – WHERE 子句 – 使用=、<=、BETWEEN、IN、LIKE 和NULL 條件的 比較條件 – 使用AND、OR 和NOT 運算符的邏輯條件

        1:有選擇地對行進行限制

image

 

 

        2:對所選行進行限制

image

 

        3:使用WHERE 子句

image

 

 

        4:字符串和日期

image

 

 

       5:比較運算符

 

image

 

 

       6:使用比較運算符

image

        7:使用BETWEEN 運算符的範圍條件

 

image

 

 

         8:使用IN 運算符的成員條件

image

 

         9:使用LIKE 運算符執行模式匹配

image

         10:組合通配符字符

image

 

         11:使用NULL 條件

image

 

         12:使用邏輯運算符定義條件

image

 

         13:使用AND 運算符

 

image

 

 

         14:使用OR 運算符

image

 

 

 

 

         15:使用NOT 運算符

image

 

3:表達式中運算符的優先級規則

         1:優先級規則

image

 

 

 

         2:優先級規則

image

 

 

 

 

 

4:使用ORDER BY 子句對行進行排序

         1:使用ORDER BY 子句

image

 

         2:排序

imageimage

 

 

 

5:替代變量

         1:替代變量

imageimage

 

 

         2:使用單與號替代變量

image

 

 

 

         3:使用單與號替代變量

image

 

         4:使用替代變量指定字符值和日期值

image

 

 

         5:指定列名、表達式和文本

image

 

         6:使用雙與號替代變量

image

 

 

6:DEFINE 和VERIFY 命令

        1:使用DEFINE 命令

image

 

         2:使用VERIFY 命令

image

 

7:小結

image

 

 

第三章:使用單行函數定製輸出

 

1:單行SQL 函數

 

         1:SQL 函數

image

 

 

 

         2:兩種類型的SQL 函數

image

 

         3:單行函數

imageimage

 

2:字符函數

         1:字符函數

image

 

         2:大小寫轉換函數

image

 

 

        3:使用大小寫轉換函數

image

 

 

         4:字符處理函數

image

 

         5:使用字符處理函數

image

 

3:數字函數

        1:數字函數

image

 

         2:使用ROUND 函數

image

 

         3:使用TRUNC 函數

image

 

 

 

 

         4:使用MOD 函數

image

 

 

4:處理日期

         1:處理日期

image

 

         2:RR 日期格式

image

 

         3:使用SYSDATE 函數

image

         4:與日期有關的運算

image

 

 

         5:使用算術運算符處理日期

image

 

5:日期函數

          1:日期處理函數

image

 

         2:使用日期函數

image

 

 

         3:使用ROUND 函數和TRUNC 函數處理日期

image

 

 

         4:小測驗

image

 

 

 

         5:小結

 

image

 

 

 

 

第四章:使用轉換函數和條件表達式

 

 

1:隱式和顯式數據類型轉換

         1:轉換函數

image

         2:隱式數據類型轉換

imageimage

 

         3:顯式數據類型轉換

image

 

 

 

 

2:TO_CHAR、TO_DATE、TO_NUMBER 函數

         1:使用TO_CHAR 函數處理日期

image

 

 

        2:日期格式樣式的元素

image

 

 

         3:日期格式樣式的元素

image

 

         4:使用TO_CHAR 函數處理日期

image

 

 

         5:使用TO_CHAR 函數處理數字

imageimage

 

         6:使用TO_NUMBER 和TO_DATE 函數

image

 

         7:將TO_CHAR 和TO_DATE 函數 與RR 日期格式結合使用

image

 

 

3:嵌套函數

        1:嵌套函數

image

 

        2:嵌套函數:示例1

image

         2:嵌套函數:示例2

image

 

      4:常規函數: – NVL – NVL2 – NULLIF – COALESCE

        1:常規函數

 

image

        2:NVL 函數

imageimageimage

 

 

 

 

         3:使用NULLIF 函數

image

 

 

 

         4:使用COALESCE 函數

imageimage

 

5:條件表達式: – CASE – DECODE

         1:條件表達式

image

         2:CASE 表達式

imageimage

 

       3:DECODE 函數

imageimageimage

 

 

第五章:使用組函數報告彙集數據

 

 

1: 組函數: – 類型和語法 – 使用AVG、SUM、MIN、MAX、COUNT – 在組函數中使用DISTINCT 關鍵字 – 組函數中的NULL 值

         1:何謂組函數

image

 

 

         2:組函數的類型

image

 

       3:組函數:語法

image

         4:使用AVG 和SUM 函數

image

 

 

 

         5:使用MIN 和MAX 函數

image

         6:使用COUNT 函數

image

 

 

         7:使用DISTINCT 關鍵字

image

 

         8:組函數和空值

image

 

 

 

 

2:對行進行分組: – GROUP BY 子句 – HAVING 子句

         1:建立數據組

image

 

 

         2:建立數據組:GROUP BY 子句的語法

imageimageimage

 

         3:按多個列進行分組

image

 

         4:對多個列使用GROUP BY 子句

 

image

 

         5:使用組函數的非法查詢

imageimage

 

 

 

         6:限定組結果

image

 

 

 

         7:使用HAVING 子句限定組結果

imageimageimage

 

 

 

4:嵌套組函數

         1:嵌套組函數

image

 

 

 

第六章:使用聯接顯示多個表中的數據

 

1:JOIN 的類型及其語法

         1:獲取多個表中的數據

image

 

 

 

 

         2:聯接類型

image

 

 

 

 

         3:使用SQL:1999 語法將表聯接起來

image

 

        4:限定不肯定的列名

image

 

2:天然聯接: – USING 子句 – ON 子句

         1:建立天然聯接

image

 

         2:使用天然聯接檢索記錄

image

 

         3:使用USING 子句建立聯接

image

 

         4:聯接列名

image

 

 

 

         5:使用USING 子句檢索記錄

 

image

 

 

         6:在USING 子句中使用表別名

image

        7:使用ON 子句建立聯接

imageimage

 

 

         8:使用ON 子句建立三向聯接

image

 

 

 

 

 

         9:對聯接應用附加條件

image

 

 

3:自聯接

        1:將表聯接到自身

image

 

         2:使用ON 子句進行自聯接

image

 

3:非等值聯接

         1:非等值聯接

image

 

 

 

         2:使用非等值聯接檢索記錄

image

 

 

5:OUTER 聯接: – LEFT OUTER 聯接 – RIGHT OUTER 聯接 – FULL OUTER 聯接

         1:使用OUTER 聯接返回沒有直接匹配的記錄

 

image

 

         2:INNER 聯接與OUTER 聯接

image

 

         3:LEFT OUTER JOIN

image

 

 

         4:RIGHT OUTER JOIN

image

 

         5:FULL OUTER JOIN

image

 

 

 

6:笛卡爾積 – 交叉聯接

         1:笛卡爾積

image

 

         2:生成笛卡爾積

 

image

 

 

 

 

         3:建立交叉聯接

image

 

 

 

 

 

 

第七章:使用子查詢來解決查詢

 

 

1:子查詢:類型、語法和準則

        1:使用子查詢解決問題

image

 

 

 

 

         2:子查詢語法

image

 

         3:使用子查詢

image

 

 

        4:使用子查詢的準則

image

 

 

 

         5:子查詢的類型

image

 

 

 

2:單行子查詢: – 子查詢中的組函數 – 帶有子查詢的HAVING 子句

         1:單行子查詢

image

 

 

        2:執行單行子查詢

image

 

 

         3:在子查詢中使用組函數

 image

 

 

 

         4:帶有子查詢的HAVING 子句

image

 

 

         5:此語句中有什麼錯誤

image

 

 

 

 

 

         6:內部查詢沒有返回任何行

image

 

 

3:多行子查詢 – 使用IN、ALL 或ANY

         1:多行子查詢

image

 

         2:在多行子查詢中使用ANY 運算符

image

 

 

 

         3:在多行子查詢中使用ALL 運算符

image

 

 

        4:使用EXISTS 運算符

 

image

 

 

4:子查詢中的空值

          1:子查詢中的空值

image

 

第八章:使用集合運算符

 

1:集合運算符:類型和準則

        1:集合運算符

image

 

 

 

 

 

 

         2:集合運算符準則

image

 

 

 

        3:Oracle Server 和集合運算符

 

image

 

 

 

2:本課中使用的表

         1:本課中使用的表

image

3:UNION 和UNION ALL 運算符

        1:UNION 運算符

image

 

 

 

         2:使用UNION 運算符

image

 

 

        3:UNION ALL 運算符

image

 

 

 

 

         4:使用UNION ALL 運算符

image

 

 

3:INTERSECT 運算符

         1:INTERSECT 運算符

 

image

 

 

 

 

 

         2:使用INTERSECT 運算符

image

 

5:MINUS 運算符

        1:MINUS 運算符

image

 

 

 

         2:使用MINUS 運算符

image

 

6:匹配SELECT 語句

          1:匹配SELECT 語句

image

 

 

 

         2:匹配SELECT 語句:示例

image

 

 

 

 

7:在集合運算中使用ORDER BY 子句

 

         1:在集合運算中使用ORDER BY 子句

image

 

 

 

第九章:處理數據

 

 

1:在表中添加新行 – INSERT 語句

        1:數據操縱語言

image

 

 

         2:在表中添加新行

image

 

 

         3:INSERT 語句語法

image

         4:插入新行

image

 

         5:插入帶有空值的行

image

 

         6:插入特殊值

image

 

 

         7:插入特定日期和時間值

image

 

 

 

         8:建立腳本

image

 

         9:從其它表中複製行

image

 

 

2:更改表中的數據 – UPDATE 語句

        1:更改表中的數據

image

 

 

         2:UPDATE 語句語法

image

 

 

 

 

         3:更新表中的行

image

 

 

 

         4:使用子查詢更新兩列

image

 

         5:根據另外一個表更新行

image

 

3:從表中刪除行: – DELETE 語句 – TRUNCATE 語句

        1:從表中刪除行

image

 

 

        2:DELETE 語句

image

 

          3:從表中刪除行

image

 

 

         4:根據另外一個表刪除行

image

 

 

        5:TRUNCATE 語句

image

 

 

4:使用COMMIT、ROLLBACK 和SAVEPOINT 執行數據庫 事務處理控制

         1:數據庫事務處理

image

 

 

        2:數據庫事務處理:開始和結束

image

 

 

 

        3:COMMIT 和ROLLBACK 語句的優勢

image

 

 

 

 

 

         4:顯式事務處理控制語句

image

 

 

 

         5:將更改回退到某個標記

image

 

 

        6:隱式事務處理

image

        7:執行COMMIT 或ROLLBACK 操做以前的數據狀態

 

image

 

 

        8:執行COMMIT 操做以後的數據狀態

 

image

 

        9:提交數據

image

 

         10:執行ROLLBACK 操做以後的數據狀態:示例

image

 

        11:執行ROLLBACK 操做以後的數據狀態

 

image

 

        12:語句級回退

image

 

 

 

5:讀一致性

        1:讀一致性

image

 

 

         2:實施讀一致性

 

image

 

 

 

6:SELECT 語句中的FOR UPDATE 子句

        1:SELECT 語句中的FOR UPDATE 子句

image

 

         2:FOR UPDATE 子句:示例

image

 

 

 

第十章:使用DDL 語句建立和管理表

 

 

1:數據庫對象 – 命名規則

        1:數據庫對象

image

 

 

         2:命名規則

image

2:CREATE TABLE 語句: – 訪問另外一個用戶的表 – DEFAULT 選項

         1:CREATE TABLE 語句

 

image

 

 

         2:引用另外一個用戶的表

image

 

 

 

          3:DEFAULT 選項

image

 

 

 

         4:建立表

image

 

3:數據類型

        1:數據類型

image

 

         2:日期時間數據類型

 

image

 

 

 

4:約束條件概覽:NOT NULL、UNIQUE、PRIMARY KEY、 FOREIGN KEY、CHECK 約束條件

        1:包括約束條件

image

 

 

 

         2:約束條件準則

image

 

 

         3:定義約束條件

image

 

          4:NOT NULL 約束條件

image

 

 

 

         5:UNIQUE 約束條件

image

 

 

 

         6:PRIMARY KEY 約束條件

image

 

          7:FOREIGN KEY 約束條件

image

 

 

        8:FOREIGN KEY 約束條件:關鍵字

image

 

         9:CHECK 約束條件

image

 

 

 

         10:CREATE TABLE:示例

image

 

 

 

 

         11:違反約束條件

image

 

 

5:使用子查詢建立表

          1:使用子查詢建立表

image

 

6: ALTER TABLE – 只讀表

        1:只讀表

image

 

 

7:DROP TABLE 語句

         1:刪除表

image

 

 

 

 

第十一章:建立其它方案對象

1:視圖概覽: – 建立、修改和檢索視圖中的數據 – 對視圖執行數據操縱語言(DML) 操做 – 刪除視圖

         1:數據庫對象

image

 

 

         2:什麼是視圖

image

 

 

 

         3;視圖的優勢

image

 

 

 

 

 

         4:簡單視圖和複雜視圖

image

 

         5:建立視圖

image

         6:從視圖中檢索數據

image

 

         7:修改視圖

image

 

 

 

         8:建立複雜視圖

image

 

 

 

 

         9:對視圖執行DML 操做的規則

image

 

         10:使用WITH CHECK OPTION 子句

image

 

 

         11:拒絕DML 操做

image

 

 

 

 

 

2:序列概覽: – 建立、使用和修改序列 – 高速緩存序列值 – NEXTVAL 和CURRVAL 僞列

 

         1:CREATE SEQUENCE 語句:語法

image

         2:建立序列

image

 

         3:NEXTVAL 和CURRVAL 僞列

image

 

 

 

 

         4:使用序列

image

         5:高速緩存序列值

image

 

 

 

 

         6:修改序列

image

 

         7:修改序列的準則

image

 

 

 

 

3:索引概覽 – 建立、刪除索引

         1:索引

image

 

 

         2:如何建立索引

image

 

 

 

 

 

         3:建立索引

image

         4:索引建立準則

image

 

         5:刪除索引

image

 

 

4:同義詞概覽 – 建立、刪除同義詞

         1:建立對象的同義詞

image

 

 

         2:建立和刪除同義詞

image

 

第十二章:控制受權

  1:系統權限

         1:控制用戶訪問

image

 

 

 

 

 

         2:權限

image

 

 

 

         3:系統權限

image

 

 

         4:建立用戶

image

 

 

 

         5:用戶系統權限

image

 

         6:授予系統權限

image

 

 

2:建立角色

         1:角色是什麼

image

 

         2:建立角色和爲角色授予權限

image

 

         3:更改口令

image

 

 

 

 

3:對象權限

         1:對象權限

image

 

 

         2:授予對象權限

image

 

 

         3:傳遞權限

image

 

 

         4:確認授予的權限

image

4:撤消對象權限

         1:撤消對象權限

image

 

第十三章:管理方案對象

1:使用ALTER TABLE 語句添加、修改或刪除列 

         1:ALTER TABLE 語句

image

 

 

 

 

         2:添加列

image

 

 

         3:修改列

image

 

 

 

         4:刪除列

image

 

 

         5:SET UNUSED 選項

image

 

 

2:管理約束條件: – 添加和刪除約束條件 – 延遲約束條件 – 啓用和禁用約束條件

         1:添加約束條件語法

image

 

 

         2: 添加約束條件

image

 

 

         4:ON DELETE 子句

image

 

 

 

         5:延遲約束條件

image

        6:INITIALLY DEFERRED 與 INITIALLY IMMEDIATE 之間的區別

image

 

 

 

         7:刪除約束條件

image

 

 

 

         8:禁用約束條件

image

 

         9:啓用約束條件

image

 

 

         10:級聯約束條件

image

 

         11:重命名錶列和約束條件

image

 

 

 

 

 

 

3:建立索引: – 使用CREATE TABLE 語句 – 建立基於函數的索引 – 刪除索引

         1:索引概覽

image

 

 

         2:CREATE INDEX 與CREATE TABLE 語句 配合使用

image

 

 

 

         3:基於函數的索引

image

 

 

         4:刪除索引

 

image

 

 

         5:DROP TABLE … PURGE

image

 

4:執行閃回操做

         1:FLASHBACK TABLE 語句

image

 

image

 

 

 

         2:使用FLASHBACK TABLE 語句

image

 

 

 

5:建立和使用臨時表

        1:臨時表

image

 

 

         2:建立臨時表

image

 

 

 

 

 

 

 

 

6:建立和使用外部表

        1:外部表

image

 

 

         2:建立外部表目錄

image

 

 

         3:建立外部表

image

 

 

 

         4:使用ORACLE_LOADER 建立外部表

image

 

 

         5:查詢外部表

image

 

 

         6:使用ORACLE_DATAPUMP 建立外部表:示例

image

 

 

 

第十四章:使用數據字典視圖管理對象

 

1:數據字典簡介

        1:數據字典

image

         2:數據字典結構

image

 

 

         3:如何使用字典視圖

image

 

         4:USER_OBJECTS 和ALL_OBJECTS 視圖

image

 

 

 

 

         5:USER_OBJECTS 視圖

image

2:在字典視圖中查詢如下信息: – 表信息 – 列信息 – 約束條件信息

 

         1:表信息

image

 

 

         2:列信息

image

 

         3:約束條件信息

image

 

 

         4:USER_CONSTRAINTS:示例

image

 

 

 

 

         5: 在USER_CONS_COLUMNS 中進行查詢

image

 

 

 

3:在字典視圖中查詢如下信息: – 視圖信息 – 序列信息 – 同義詞信息 – 索引信息

        1:視圖信息

image

 

 

         2:序列信息

image

 

 

 

         3:確認序列

image

 

         4:索引信息

image

 

 

         5:USER_INDEXES:示例

 

image

 

 

 

         6:在USER_IND_COLUMNS 中進行查詢

image

 

 

        7:同義詞信息

image

 

4:在表中添加註釋以及在字典視圖中查詢註釋信息

         1:在表中添加註釋

image

 

 

 

 

 

 

第十五章:處理大型數據集

        

1:使用子查詢處理數據

        1:使用子查詢處理數據

image

 

 

         2:經過將子查詢用做源來檢索數據

image

 

         3:經過將子查詢用做目標來執行插入

image

 

 

 

 

 

         4:經過將子查詢用做目標來執行插入

image

 

 

         5:在DML 語句中使用WITH CHECK OPTION 關鍵字

image

 

 

2:在INSERT 和UPDATE 語句中指定顯式默認值

         1:顯式默認值功能概覽

image

 

 

         2:使用顯式默認值

image

 

         3:從其它表中複製行

image

 

 

 

 

 

 

3:使用如下類型的多表INSERT: – 無條件INSERT – 轉換INSERT (Pivoting INSERT) – 條件INSERT ALL – 條件INSERT FIRST

        1:多表INSERT 語句概覽

image

 

 

 

         2:多表INSERT 語句的類型

image

         3:多表INSERT 語句

image

 

 

 

 

         4:無條件INSERT ALL

image

 

 

 

 

         5:條件INSERT ALL:示例

image

 

 

 

          6:條件INSERT ALL

image

 

         7:條件INSERT FIRST:示例

image

 

 

 

 

 

 

 

          8:條件INSERT FIRST

image

 

         9:轉換INSERT (Pivoting INSERT)

image

 

 

 

4:合併錶行

         1:MERGE 語句

image

 

         2:MERGE 語句的語法

image

 

 

         3:合併行:示例

image

 

 

4:跟蹤一段時間內的數據更改

         1:跟蹤數據更改

image

 

 

 

 

 

         2:閃回版本查詢示例

image

 

 

 

 

         3:VERSIONS BETWEEN 子句

image

 

 

 

第十六章:管理不一樣時區中的數據

 

1:CURRENT_DATE、CURRENT_TIMESTAMP 和LOCALTIMESTAMP

        1:時區

image

 

 

 

/*若是須要支持一個國際化的應用,那麼數據庫端的國際化特性的支持也就顯得尤爲重要。Oracle中有不少特性支持國際化,如字符集、時區等等。若是相關參數設置不當,以致於在設計階段沒有考慮徹底,那麼確定會對應用形成必定的損失。 Oracle中相關的時區大致分爲兩類:數據庫時區和session時區。 0、查看os時區*/
[oracle@wl ~]$ cat /etc/sysconfig/clock --sysdate是調用操做系統裏的gettimeofday函數,不依賴oracle數據庫裏設置的時區,用的是操做系統的時區。

--一、查看數據庫和session時區

--//查看數據庫時區 
SQL> select dbtimezone from dual; --//查看session時區
 SQL> select sessiontimezone from dual; --二、修改數據庫和session時區

---//修改數據庫時區
SQL> ALTER DATABASE SET TIME_ZONE='+08:00'; ---//修改當前會話時區
SQL> ALTER SESSION SET TIME_ZONE='+08:00'; --其它修改方式 --//偏移量
ALTER SESSION SET TIME_ZONE = '-05:00'; --//數據庫時區
ALTER SESSION SET TIME_ZONE = dbtimezone; --//系統本地時區
ALTER SESSION SET TIME_ZONE = local; ---//時區名稱
ALTER SESSION SET TIME_ZONE = 'America/New_York'; --//使用數據字典v$timezone_names查時區名稱
SYS@orcl>select tzname from v$timezone_names where tzname like '%hai%'; ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; ALTER SESSION SET TIME_ZONE = '+8:00'; --返回當前的時間
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL; --系統當前的時間戳
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL; --用戶會話級別的當前時間戳
SELECT SESSIONTIMEZONE, LOCALTIMESTAMP FROM DUAL; --三、和時區相關的數據類型
DATE、TIMESTAMPTIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE --DATE:存儲日期和時間信息,精確到秒。 
 SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; SQL> select to_date('2009-01-12 13:24:33','YYYY-MM-DD HH24:MI:SS') from dual; --TIMESTAMP:DATE類型的擴展,保留小數級別的秒,默認爲小數點後6位。不保存時區和地區信息。 
 SQL> select localtimestamp from dual; ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YY HH:MI:SSXFF'; CREATE TABLE table_ts(c_id NUMBER, c_ts TIMESTAMP); INSERT INTO table_ts VALUES(1, '01-JAN-2009 2:00:00'); INSERT INTO table_ts VALUES(2, TIMESTAMP '2009-01-01 2:00:00'); INSERT INTO table_ts VALUES(3, TIMESTAMP '2009-01-01 2:00:00 -08:00'); commit; set linesize 120
select * from table_ts; --第三條數據的時區信息丟失!


------------------------------------------- /* TIMESTAMP WITH TIME ZONE:存儲帶時區信息的TIMESTAMP(以和UTC時間差或者地區信息的形式保存)。 ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH:MI:SSXFF AM TZR'; ALTER SESSION SET TIME_ZONE='-7:00'; CREATE TABLE table_tstz (c_id NUMBER, c_tstz TIMESTAMP WITH TIME ZONE); INSERT INTO table_tstz VALUES(1, '01-JAN-2009 2:00:00 AM -07:00'); INSERT INTO table_tstz VALUES(2, TIMESTAMP '2009-01-01 2:00:00'); INSERT INTO table_tstz VALUES(3, TIMESTAMP '2009-01-01 2:00:00 -8:00'); commit; select * from table_tstz; 數據保存了時區信息! 若是沒有指定時區,用會話時區 -------------------------------------------- TIMESTAMP WITH LOCAL TIME ZONE:以數據庫時區時間保存在數據庫中,用戶請求數據時,以客戶端會話(session)時區時間返回,是另外一種不一樣類型的TIMESTAMP。 TIMESTAMP WITH LOCAL TIME ZONE和 TIMESTAMP WITH TIME ZONE類型的區別在於: 數據庫不保存時區相關信息,而是把客戶端輸入的時間轉換爲基於database timezone的時間後存入數據庫。當用戶請求此類型信息時,Oracle把數據轉換爲用戶session的時區時間返回給用戶。因此Oracle建議把database timezone設置爲標準時間UTC,這樣能夠節省每次轉換所須要的開銷,提升性能。 TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE兩種數據類型是timestamp的變種,Date和timestamp數據類型不包含時區信息。 */ SQL>ALTER SESSION SET TIME_ZONE='-07:00'; CREATE TABLE table_tsltz (c_id NUMBER, c_tsltz TIMESTAMP WITH LOCAL TIME ZONE); INSERT INTO table_tsltz VALUES(1,'01-JAN-2009 2:00:00'); INSERT INTO table_tsltz VALUES(2, TIMESTAMP '2009-01-01 2:00:00'); INSERT INTO table_tsltz VALUES(3, TIMESTAMP '2009-01-01 2:00:00 -08:00'); commit; select * from table_tsltz; /* 注意: 插入的第三條數據指定爲UTC-8時區的時間,而後存入數據庫後按照database timezone的時間保存,最後在客戶端請求的時候,轉換爲客戶端時區的時間返回! //查看數據庫時區 */ SQL> select dbtimezone from dual; --//查看session時區
 SQL> select sessiontimezone from dual; --更改UTC-5
SYS@orcl>ALTER SESSION SET TIME_ZONE='-05:00'; SYS@orcl>select * from table_tsltz; --當客戶端時區改成UTC-5的時候,TIMESTAMP WITH LOCAL TIME ZONE數據類型的返回信息會相應改變的。 /* Oracle語法: INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}] 該數據類型經常使用來表示一段時間差, 注意時間差只精確到年和月,precision爲年或月的精確域, 有效範圍是0到9, 默認值爲2。 例: INTERVAL '123-2' YEAR(3) TO MONTH 表示: 123年2個月, "YEAR(3)" 表示年的精度爲3, 可見"123"恰好爲3爲有效數值, 若是該處YEAR(n), n<3就會出錯, 注意默認是2。 INTERVAL '123' YEAR(3) 表示: 123年0個月 INTERVAL '300' MONTH(3) 表示: 300個月, 注意該處MONTH的精度是3啊. INTERVAL '4' YEAR 表示: 4年, 同 INTERVAL '4-0' YEAR TO MONTH 是同樣的 INTERVAL '50' MONTH 表示: 50個月, 同 INTERVAL '4-2' YEAR TO MONTH 是同樣 INTERVAL '123' YEAR 表示: 該處表示有錯誤, 123精度是3了, 但系統默認是2, 因此該處應該寫成 INTERVAL '123' YEAR(3) 或"3"改爲大於3小於等於9的數值均可以的 INTERVAL '5-3' YEAR TO MONTH + INTERVAL '20' MONTH=INTERVAL '6-11' YEAR TO MONTH 表示: 5年3個月 + 20個月 = 6年11個月 TZ_OFFSET函數根據時區名稱,返回時區與0時區相差的小時和分鐘數 from_tz函數將一個timstamp和timzone拼成一個timestamp with time zone TO_TIMESTAMP函數將字符型轉成timestamp TO_YMINTERVAL 將字符型CHAR, VARCHAR2, NCHAR, or NVARCHAR2 轉換爲 INTERVAL YEAR TO MONTH 類型 TO_DSINTERVAL 將字符型 CHAR, VARCHAR2, NCHAR, or NVARCHAR2 轉換爲 INTERVAL DAY TO SECOND */

 

 

 

         2:TIME_ZONE 會話參數

image

 

 

 

 

 

 

 

 

         3:CURRENT_DATE、CURRENT_TIMESTAMP 和LOCALTIMESTAMP

image

         4:對會話時區的日期和時間進行比較

image

 

 

         5:DBTIMEZONE 和SESSIONTIMEZONE

 

image

 

 

 

 

 

         6:TIMESTAMP 數據類型

image

 

 

 

         7:TIMESTAMP 字段

image

 

 

         8:DATE 和TIMESTAMP 之間的區別

image

 

 

 

        9:TIMESTAMP 數據類型的比較

image

 

 

 

 

2:INTERVAL 數據類型

        1:INTERVAL 數據類型

image

 

 

 

         2:INTERVAL 字段

image

 

 

         3:INTERVAL YEAR TO MONTH:示例

image

 

 

 

         4:INTERVAL DAY TO SECOND 數據類型:示例

image

 

 

 

 

3:使用如下函數: – EXTRACT – TZ_OFFSET – FROM_TZ – TO_TIMESTAMP – TO_YMINTERVAL – TO_DSINTERVAL

         1:EXTRACT

image

 

 

         2:TZ_OFFSET

image

 

 

         3:FROM_TZ

 

image

 

 

         4:TO_TIMESTAMP

image

 

 

 

         5:TO_YMINTERVAL

image

 

 

         6:TO_DSINTERVAL

image

 

 

 

         7:夏令時

image

 

第十七章:使用子查詢檢索數據

 

1:編寫多列子查詢

        1:多列子查詢

image

 

         2:列比較

 

image

 

 

 

        3:成對比較子查詢

image

 

 

 

 

         4:不成對比較子查詢

image

 

 

 

2:在SQL 中使用標量子查詢

         1:標量子查詢表達式

image

 

          2:標量子查詢:示例

image

 

 

3:使用相關子查詢解決問題

         1:相關子查詢

image

 

 

 

 

         2:使用相關子查詢

 

image

 

 

 

 

 

 

 

 

 

 

4:使用EXISTS 和NOT EXISTS 運算符

         1:使用EXISTS 運算符

image

 

 

 

 

        2:查找沒有任何僱員的全部部門

image

 

 

 

         3:相關UPDATE

image

 

         4:使用相關UPDATE

 

image

 

 

         5:相關DELETE

image

 

         6:使用相關DELETE

image

 

 

 

4:使用WITH 子句

         1:WITH 子句

image

 

 

         2:WITH 子句:示例

 

image

 

image

 

 

 

 

         3:遞歸WITH 子句

 

image

 

 

         4:遞歸WITH 子句:示例

image

 

 

 

 

 

 

 

 

 

 

 

 

第十八章 :正則表達式支持功能

    

1:正則表達式簡介

         1:正則表達式是什麼

image

 

 

 

 

ORACLE 正則表達式
1、正則表達式簡介
正則表達式,就是以某種模式來匹配一類字符串。例如,判斷匹配性,進行字符串的從新組合等。正則表達式提供了字符串處理的快捷方式。Oracle 10g及之後的版本中也支持正則表達式。
2、正則表達式相對通配符的優點
一、正則表達式中不只存在着表明模糊字符的特殊字符,並且存在着量詞等修飾字符,使得模式的控制更加靈活和強大。
二、通配符的使用通常是在特定的環境下,不一樣的環境下,通配符有可能不一樣。而正則表達式,不但普遍應用於各類編程語言,並且在各類編程語言中,保持了語法的高度一致性。
3、元字符
元字符是指在正則表達式中表示特殊含義的字符。
4、量詞
量詞用來指定量詞的前一個字符出現的次數。量詞的形式主要有「?」、「*」、「+」、「{}」。
5、字符轉義:
元字符在正則表達式中有特殊含義。若是須要使用其原義,則須要用到字符轉義。字符轉義使用字符「\」來實現。其語法模式爲:「\」+元字符。例如,「\.」表示普通字符「.」; 「\.doc」匹配字符串「.doc」;而普通字符「\」須要使用「\\」來表示。
6、字符組.
字符組是指將模式中的某些部分做爲一個總體。這樣,量詞能夠來修飾字符組,從而提升正則表達式的靈活性。字符組經過()來實現。
許多編程語言中,能夠利用「$1」、「$2」等來獲取第一個、第二個字符組,即所謂的後向引用。在Oracle中,引用格式爲「\1」、「\2」。
7、正則表達式分支
能夠利用「|」來建立多個正則表達式分支。例如,「\d{4}|\w{4}」能夠看作兩個正則表達式「\d{4}」和「\w{4}」,匹配其中任何一個正則表達式的字符串都被認爲匹配整個正則表達式。若是該字符串兩個正則表達式分支都匹配,那麼將被處理爲匹配第一個正則表達式分支。
8、字符類.
在Oracle中,正則表達式的用法與標準用法略有不一樣。這種不一樣主要體如今對於字符類的定義上。Orale中不使用字符「\」與普通字符組合的形式來實現字符類,而是具備其特殊語法.
9、ORACLE中的四個正則表達式相關函數。
一、regexp_like(expression, regexp)
返回值爲一個布爾值。若是第一個參數匹配第二個參數所表明的正則表達式,那麼將返回真,不然將返回假。
舉例: select * from people where regexp_like(name, '^J.*$');
二、regexp_instr(expression, regexp, startindex, times)
返回找到的匹配字符串的位置。參數startindex表示開始進行匹配比較的位置;參數times表示第幾回匹配做爲最終匹配結果。
舉例: select regexp_instr('12.158', '\.') position from dual;
regexp_instr('12.158', '\.')用於獲取第一個小數點的位置。
三、regexp_substr(expression, regexp)
返回第一個字符串參數中,與第二個正則表達式參數相匹配的子字符串。
舉例: create table html(id integer, html varchar2(2000));
insert into html values (1, '<a href="http://mail.google.com/2009/1009.html">mail link</a>');
表html中存儲了HTML標籤及內容。現欲從標籤<a>中得到連接的url,那麼能夠利用regexp_substr()函數。
select id, regexp_substr(html, 'http[a-zA-Z0-9\.:/]*') url from html;
四、regexp_replace(expression, regexp, replacement)
將expression中的按regexp匹配到的部分用replacement代替。在參數replacement中,能夠含有後向引用,以便將正則表達式中的字符組從新捕獲。
例如,某些國家和地區的日期格式可能爲「MM/DD/YYYY」,那麼能夠利用regexp_replace()函數來轉換日期格式。
select regexp_replace('09/29/2008', '^([0-9]{2})/([0-9]{2})/([0-9]{4})$', '\3-\1-\2') replace from dual;
10、正則表達式練習
第一:REGEXP_LIKE函數用法 EMP表結構及數據以下:
SQL> desc emp;
SQL> select empno,ename,sal,hiredate from emp;
一、查找員工編號爲4位數字的員工信息
SQL> select empno,ename from emp where regexp_like(empno,'^[[:digit:]]{4}$');
二、查找員工姓名爲全英文的員工信息
SQL> select empno,ename from emp where regexp_like(ename,'^[[:alpha:]]+$');
或者:
SQL> select empno,ename from emp where regexp_like(ename,'^[a-zA-Z]+$');
三、查找員工姓名以「a」字母開頭,不區分大小寫
SQL> select empno,ename from emp where regexp_like(ename,'^a','i');
四、查找員工姓名爲全英文,且以「N」結尾的員工信息
SQL> select empno,ename from emp where regexp_like(ename,'^[[:alpha:]]+N$');
五、查找員工編號以非數字的員工信息
SQL> select empno,ename from emp where regexp_like(empno,'[^[:digit:]]');
以數字開頭
select empno,ename from emp where regexp_like(empno,'^[[:digit:]]');
數字
select empno,ename from emp where regexp_like(empno,'[[:digit:]]');
非數字開頭
select empno,ename from emp where regexp_like(empno,'^[^[:digit:]]');
第二:REGEXP_INSTR函數用法
一、查找員工編號中第一個非數字字符的位置
SQL> select regexp_instr(empno,'[^[:digit:]]') position from emp;
二、從第三個字符開始,查找員工編號中第二個非數字字符的位置
SQL> select regexp_instr(empno,'[^[:digit:]]',3,2) position from emp;
第三:REGEXP_SUBSTR函數用法
一、返回從ename的第二個位置開始查找,而且是以「L」開頭到結尾的字串
SQL> select regexp_substr(ename,'L.*','2') substr from emp;
第四:REGEXP_REPLACE函數用法
一、把ename中全部非字母字符替換爲「A」
SQL>update emp set ename=regexp_replace(ename, '[^[:alpha:]]','A') where regexp_like(ename, '[^[:alpha:]]');html

 

 

 

         2:使用正則表達式的好處

image

 

 

         3:在SQL 和PL/SQL 中使用 正則表達式函數和條件

image

 

 

   

2:在正則表達式中使用元字符

         1:元字符是什麼

image

         2:在正則表達式中使用元字符

image

 

 

 

 

 

 

3:使用正則表達式函數: – REGEXP_LIKE – REGEXP_REPLACE – REGEXP_INSTR – REGEXP_SUBSTR

        1:正則表達式函數和條件:語法

image

 

         2:使用REGEXP_LIKE 條件執行基本搜索

image

 

 

 

 

 

        3:使用REGEXP_REPLACE 函數替換模式

image

 

 

 

 

 

         4:使用REGEXP_INSTR 函數查找模式

image

 

 

 

 

         5:使用REGEXP_SUBSTR 函數提取子字符串

image

 

 

 

4:訪問子表達式

        1:子表達式

image

 

 

 

 

 

         2:結合使用正則表達式支持與子表達式

 

image

 

 

 

 

         3:爲何要訪問第n 個子表達式

 

image

 

 

 

         4:REGEXP_SUBSTR:示例

image

 

5:使用REGEXP_COUNT 函數

         1:使用REGEXP_COUNT 函數

image

 

 

         2:正則表達式和檢查約束條件:示例

image

 

 

 

 

第十九章:經過將相關數據分組來生成報表

       

1:複習組函數

 

image

 

 

 

2:複習GROUP BY 子句

image

 

 

 

3:複習HAVING 子句

image

 

 

4:GROUP BY 與ROLLUP 和CUBE 運算符一塊兒使用

image

5:ROLLUP 運算符

image

 

6:ROLLUP 運算符:示例

image

 

 

 

7:CUBE 運算符

image

 

8:CUBE 運算符:示例

image

 

 

9:GROUPING 函數

 

image

 

 

10:GROUPING 函數:示例

image

 

 

 

 

 

 

11:GROUPING SETS

image

 

12:GROUPING SETS:示例

image

 

 

 

 

 

13:組合列

 

image

 

 

 

 

14:組合列:示例

image

 

 

 

15:級聯分組

image

 

16:級聯分組:示例

image

 

17:小結

 

image

 

 

 

 

 

第二十章:分層檢索

 

1:課程目標

image

 

 

 

 

--一、從根節點開始遍歷(start with ...connect by prior ) Conn scott/scott 
SQL> select empno,mgr,ename,job from emp start with empno = 7839 connect by prior empno = mgr; SQL> select level,empno,mgr,ename,job from emp start with ename = 'KING' connect by prior empno = mgr order by level; -- 注:prior表示前一條記錄,即下一條返回記錄的mgr應當等於前一條記錄的empno  -- 二、得到層次數 
SQL> select count(distinct level) "Level" from emp start with ename = 'KING' connect by prior empno = mgr; --三、格式化層次查詢結果(使用左填充* level - 1個空格) 
SQL> col Ename for a30 SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp start with ename = 'KING' connect by prior empno = mgr; --四、從非根節點開始遍歷(只需修改start with 中的條件便可) 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp start with ename = 'SCOTT' connect by prior empno = mgr; --五、從下向上遍歷(交換connect by prior中的條件便可,使用mgr = empno),prior表示前一條記錄,即下一條返回記錄的empno應當等於前一條記錄的mgr 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp start with ename = 'SCOTT' connect by prior mgr = empno; --從下向上遍歷(也能夠將prior置於等號右邊,獲得相同的結果) 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp start with ename = 'SCOTT' connect by empno = prior mgr; --六、從層次查詢中刪除節點和分支,經過where子句來過濾SCOTT用戶,但SCOTT的下屬ADAMS並無過濾掉 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp where ename != 'SCOTT' start with empno = 7839 connect by prior empno = mgr; --七、經過將過濾條件由where 子句的內容移動到connect by prior 子句中過濾掉SCOTT及其下屬 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp start with empno = 7839 connect by prior empno = mgr and ename != 'SCOTT'; --八、在層次化查詢中增長過濾條件或使用子查詢 
SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp where sal > 2500 start with empno = 7839 connect by prior empno = mgr; SQL> select level,lpad(' ',2 * level - 1) || ename as "Ename",job from emp where sal > (select avg(sal) from emp) start with empno = 7839 connect by prior empno = mgr ;

 

 

 

 

 

 

2:EMPLOYEES 表中的示例數據

image

 

 

 

3:天然樹結構

image

 

 

 

4:分層查詢

image

 

 

 

5:遍歷樹

image

 

6:遍歷樹:自下而上

 

image

7:遍歷樹:自上而下

image

 

 

 

 

8:使用LEVEL 僞列肯定行的等級

image

 

 

 

 

9:使用LEVEL 和LPAD 設置分層報表的格式

image

 

 

 

 

10:修剪分支

image

 

11:小結

image

第二十一章:Oracle DB 體系結構組件

 

1:課程目標

image

 

 

 

 

2:Oracle DB 體系結構:概覽

image

 

 

 

 

 

3:Oracle DB Server 結構

image

 

 

 

 

 

4:鏈接到數據庫

image

 

5:與Oracle DB 交互

image

 

 

 

 

 

 

 

6:Oracle 內存體系結構

image

 

 

 

7:進程體系結構

image

 

 

 

 

 

8:數據庫寫進程

image

 

 

 

 

 

9:日誌寫進程

image

 

 

10:檢查點進程

image

 

 

 

11:系統監視器進程

 

image

 

 

 

 

 

 

 

12:進程監視器進程

image

 

 

 

13:Oracle DB 存儲體系結構

image

 

 

 

 

14:邏輯和物理數據庫結構

image

 

 

 

 

 

 

15:處理SQL 語句

image

 

 

 

16:處理查詢

image

 

 

 

 

17:共享池

image

 

 

 

 

18:數據庫緩衝區高速緩存

image

 

 

 

 

 

19:程序全局區(PGA)

image

 

 

 

 

 

20:處理DML 語句

image

 

 

21:重作日誌緩衝區

image

 

 

 

 

 

 

22:回退段

image

 

 

23:COMMIT 處理

image

 

 

 

24:Oracle DB 體系結構小結

image

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=======================================================================================================================================

 

 

 

 

 

 

 

 

 

 

 

 

_____________________________________________________________________________________________________________________________________________________________________________git

相關文章
相關標籤/搜索