1、 SQL概述
SQL是一種面向數據庫的通用數據處理語言規范,能完成以下幾類功能:提取查詢數據,插入修改刪除數據,生成修改和刪除數據庫對象,數據庫安全控制,數據庫完整性及數據保護控制。
數據庫對象包括表、視圖、索引、同義詞、簇、觸發器、函數、過程、包、數據庫鏈、快照等(表空間、回滾段、角色、用戶)。數據庫通過對表的操作來管理存儲在其中的數據。
1)SQL*PLUS界面:
登錄:輸入SQLPLUS回車;輸入正確的ORACLE用戶名并回車;輸入用戶口令并回車,顯示提示符:SQL>
退出:輸入EXIT即可。
2)命令的編輯與運行:
l 在命令提示符后輸入SQL命令并運行,以分號結束輸入;以斜杠結束輸入;以空行結束輸入;
l 利用SQL緩沖區進行PL/SQL塊的編輯和運行;
l 利用命令文件進行PL/SQL塊的編輯和運行。
2、 數據庫查詢
1) 用SELECT語句從表中提取查詢數據。語法為
SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC];
說明:SELECT子句用于指定檢索數據庫的中哪些列,FROM子句用于指定從哪一個表或視圖中檢索數據。
2) SELECT中的操作符及多表查詢WHERE子句。(LIKE,IS,…)
WHERE子句中的條件可以是一個包含等號或不等號的條件表達式,也可以是一個含有IN、NOT IN、BETWEEN、LIKE、IS NOT NULL等比較運算符的條件式,還可以是由單一的條件表達通過邏輯運算符組合成復合條件。
3) ORDER BY 子句
ORDER BY 子句使得SQL在顯示查詢結果時將各返回行按順序排列,返回行的排列順序由ORDER BY 子句指定的表達式的值確定。
4) 連接查詢
利用SELECT語句進行數據庫查詢時,可以把多個表、視圖的數據結合起來,使得查詢結果的每一行中包含來自多個表達式或視圖的數據,這種操作被稱為連接查詢。
連接查詢的方法是在SELECT命令的FROM子句中指定兩個或多個將被連接查詢的表或視圖,并且在WHERE子句告訴ORACLE如何把多個表的數據進行合并。根據WHERE子句中的條件表達式是等還是不等式,可以把連接查詢分為等式連接和不等式連接。
5) 子查詢
如果某一個SELECT命令(查詢1)出現在另一個SQL命令(查詢2)的一個子句中,則稱查詢1是查詢2的子查詢。
3、 基本數據類型(NUMBER,VARCHAR2,DATE) O
RACEL支持下列內部數據類型:
l VARCHAR2 變長字符串,最長為2000字符。
l NUMBER 數值型。
l LONG 變長字符數據,最長為2G字節。
l DATE 日期型。
l RAW 二進制數據,最長為255字節。
l LONG RAW 變長二進制數據,最長為2G字節。
l ROWID 二六進制串,表示表的行的唯一地址。
l CHAR 定長字符數據,最長為255。
4、 常用函數用法:
一個函數類似于一個算符,它操作數據項,返回一個結果。函數在格式上不同于算符,它個具有變元,可操作0個、一個、二個或多個變元,形式為:
函數名(變元,變元,…)
函數具有下列一般類形:
l 單行函數
l 分組函數
1)單行函數對查詢的表或視圖的每一行返回一個結果行。它有數值函數,字符函數,日期函數,轉換函數等。
2)分組函數返回的結果是基于行組而不是單行,所以分組函數不同于單行函數。在許多分組函數中可有下列選項:
l DISTRNCT 該選項使分組函數只考慮變元表達式中的不同值。
l ALL該選項使分組函數考慮全部值,包含全部重復。
全部分組函數(除COUNT(*)外)忽略空值。如果具有分組函數的查詢,沒有返回行或只有空值(分組函數的變元取值的行),則分組函數返回空值。
5、 數據操縱語言命令:
數據庫操縱語言(DML)命令用于查詢和操縱模式對象中的數據,它不隱式地提交當前事務。它包含UPDATE、INSERT、DELETE、EXPLAIN PLAN、SELECT和LOCK TABLE 等命令。下面簡單介紹一下:
1) UPDATE tablename SET {column1=expression1,column2=expression2,…} WHERE {conditions};
例如:S QL>UPDATE EMP
SET JOB =’MANAGER’
WHERE ENAME=’MAPTIN’;
SQL >SELECT * FROM EMP;
UPDATE子句指明了要修改的數據庫是EMP,并用WHERE子句限制了只對名字(ENAME)為’MARTIN’的職工的數據進行修改,SET子句則說明修改的方式,即把’MARTION’的工作名稱(JOB)改為’MARAGER’.
2) INSERT INTO tablename {column1,column2,…} VALUES {expression1,expression2,…};
例如:SQL>SELECT INTO DEPT(DNAME, DEPTNO)
VALUES (‘ACCOUNTING’,10)
3) DELETE FROM tablename WHERE {conditions};
例如:SQL>DELETE FROM EMP
WHERE EMPNO = 7654;
DELETE命令刪除一條記錄,而且DELETE命令只能刪除整行,而不能刪除某行中的部分數據.
4) 事務控制命令
提交命令(COMMIT):可以使數據庫的修改永久化.設置AUTOCOMMIT為允許狀態:SQL >SET AUTOCOMMIT ON;
回滾命令(ROLLBACK):消除上一個COMMIT命令后的所做的全部修改,使得數據庫的內容恢復到上一個COMMIT執行后的狀態.使用方法是:
SQL>ROLLBACK;
5、 創建表、視圖、索引、同義詞、用戶。
1)、表是存儲用戶數據的基本結構。
建立表主要指定義下列信息:
l 列定義
l 完整性約束
l 表所在表空間
l 存儲特性
l 可選擇的聚集
l 從一查詢獲得數據
語法如下:CREATE TABLE tablename
(column1 datatype [DEFAULT expression] [constraint],
column1 datatype [DEFAULT expression] [constraint],
……)
[STORAGE子句]
[其他子句…];
例如:
SQL>CREATE TABLE NEW_DEPT
(DPTNO NUMBER(2),
DNAME CHAR(6),
LOC CHAR(13);
更改表作用:
l 增加列
l 增加完整性約束
l 重新定義列(數據類型、長度、缺省值)
l 修改存儲參數或其它參數
l 使能、使不能或刪除一完整性約束或觸發器
l 顯式地分配一個范圍
2)、視圖
視圖是一個邏輯表,它允許操作者從其它表或視圖存取數據,視圖本身不包含數據。視圖所基于的表稱為基表。
引入視圖有下列作用:
l 提供附加的表安全級,限制存取基表的行或/和列集合。
l 隱藏數據復雜性。
l 為數據提供另一種觀點。
l 促使ORACLE的某些操作在包含視圖的數據庫上執行,而不在另一個數據庫上執行。
3)、索引
索引是種數據庫對象。對于在表或聚集的索引列上的每一值將包含一項,為行提供直接的快速存取。在下列情況ORACLE可利用索引改進性能:
l 按指定的索引列的值查找行。
l 按索引列的順序存取表。
建立索引: CREATE [UNIQUE] INDEX indexname ON tablename(column ,。。。);
例如:SQL>CREAT INDEX IC_EMP
ON CLUSTER EMPLOYEE
4)、同義詞
同義詞:為表、視圖、序列、存儲函數、包、快照或其它同義詞的另一個名字。使用同義詞為了安全和方便。對一對象建立同義詞可有下列好處:
l 引用對象不需指出對象的持有者。
l 引用對象不需指出它所位于的數據庫。
l 為對象提供另一個名字。
建立同義詞:
CREATE SYNONYM symnon_name FOR [username.]tablename;
例如:CREAT PUBLIC SYNONYM EMP
FOR SCOTT.EMP @SALES
5)、用戶
CREATE USER username IDENTIFIED BY password;
例如:SQL>CREATE USER SIDNEY
IDENTIFIED BY CARTON ;
Oracle擴展PL/SQL簡介
1、 PL/SQL概述。
PL/SQL是Oracle對SQL規范的擴展,是一種塊結構語言,即構成一個PL/SQL程序的基本單位(過程、函數和無名塊)是邏輯塊,可包含任何數目的嵌套了快。這種程序結構支持逐步求精方法解決問題。一個塊(或子塊)將邏輯上相關的說明和語句組合在一起,其形式為:
DECLARE
---說明
BEGIN
---語句序列
EXCEPTION
---例外處理程序
END;
它有以下優點:
l 支持SQL;
l 生產率高;
l 性能好;
l 可稱植性;
l 與ORACLE集成.
2、 PL/SQL體系結構
PL/SQL運行系統是種技術,不是一種獨立產品,可認為這種技術是PL/SQL塊和子程序的一種機,它可接收任何有效的PL/SQL塊或子程序。如圖所示:
PL/SQL機可執行過程性語句,而將SQL語句發送到ORACLE服務器上的SQL語句執行器。在ORACLE預編譯程序或OCI程序中可嵌入無名的PL/SQL塊。如果ORACLE具有PROCEDURAL選件,有名的PL/SQL塊(子程序)可單獨編譯,永久地存儲在數據庫中,準備執行。
3、 PL/SQL基礎:
PL/SQL有一字符集、保留字、標點、數據類型、嚴密語法等,它與SQL有相同表示,現重點介紹。
1)、數據類型:如下表所示
|
|
數據類型
|
子類型
|
純量類型
|
數值
|
BINARY_INTEGER
|
NATURAL,POSITIVE
|
NUMBER
|
DEC,DECIMAL,DOUBLE PRECISION,PLOAT,INTEGER,INT,NUMERIC,REAL,SMALLINT
|
字符
|
CHAR
|
CHARACTER,STRING
|
VARCHAR2
|
VARCHAR
|
LONG
|
|
LONG RAW
|
|
RAW
|
|
RAWID
|
|
邏輯
|
BOOLEAN
|
|
日期
|
DATE
|
|
組合
類型
|
記錄
|
RECORD
|
|
表
|
TABLE
|
|
2)、變量和常量
在PL/SQL程序中可將值存儲在變量和常量中,當程序執行時,變量的值可以改變,而常量的值不能改變。
3)、程序塊式結構:
DECLARE
變量說明部分;
BEGIN
執行語句部分;
[EXCEPTION
例外處理部分;]
END;
4、 控制語句:
分支語句:
IF condition THEN
Sequence_of_statements;
END IF;
IF condition THEN
Sequence_of_statement1;
ELSE
Sequence_of_statement2;
END IF;
IF condition1 THEN
Sequence_of_statement1;
ELSIF condition2 THEN
Sequence_of_statement2;
ELSIF condition3 THEN
Sequence_of_statement3;
END IF;
5、 循環語句:
LOOP
Sequence_of_statements;
IF condition THEN
EXIT;
END IF;
END LOOP;
WHILE condition LOOP
Sequence_of_statements;
END LOOP;
FOR counter IN lower_bound..higher_bound LOOP
Sequence_of_statements;
END LOOP;
6、 子程序:
存儲過程:
CREATE PROCEDURE 過程名 (參數說明1,參數說明2, 。。。) IS
[局部說明]
BEGIN
執行語句;
END 過程名;
存儲函數:
CREATE FUNCTION 函數名 (參數說明1,參數說明2, 。。。)
RETURN 類型 IS
[局部說明]
BEGIN
執行語句;
END 函數名;