Distinct
NULL
||連接符
Oracle數據庫中大小寫敏感
要求找出含有%的記錄
這需要使用ESCAPE標識轉義字符
select * from t_charwhere a like ‘%\%%' escape '\';
select * fromt_char where a like ‘%K%%' escape ‘K';
PLSQL中日期比較
1.格式需要一致,可以通過字符串比較。
2.TO_CHAR(CREATE_DATE,'yyyy-mm-dd')>=NVL(P_CREATE_FROMDATE,TO_CHAR(CREATE_DATE,'yyyy-mm-dd'))
2. START_DATE <= TO_date(p_trans_date,'YYYY-MM-DD')
--不易發現的錯誤
select * from test1where column1 = '1234';--將所有行轉換為字符串
select * from test1where column1 = 1234;--將所有行轉換為數字,包含字符的行出錯
--連接
-oracle全外外連接
select e.last_name,e.department_id,d.department_namefrom employees e,departments dwhere e.department_id=d.department_id(+)union
select e.last_name,e.department_id,d.department_namefrom employees e,departments dwhere e.department_id(+)=d.department_id;
--sql1999標准
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULLOUTERJOIN departments d
ON (e.department_id =d.department_id) ;
分組計算函數和group by子句
備注:MIN, MAX 可用於任何數據類型,但AVG, SUM,STDDEV,VARIANCE僅適用於數值型字段。
使用GROUP BY 子句進行分組:
l 可以按照某一個字段分組,也可以按照多個字段的組合進行分組
l SELECT查詢語句中同時選擇分組計算函數表達式和其他獨立字段時,其他字段必須出現在Group By子句中,否則不合法。
l 不能在Where條件中使用分組計算函數表達式,當出現這樣的需求的時候,使用Having 子句。
l 分組計算函數也可嵌套使用。
事務控制
隱式的事務提交或回滾動作:
Commit,rollback 是顯式的提交和回滾語句,還有一些隱式的提交和回滾是大家需要知道並引起注意的:
當如下事件發生是,會隱式的執行Commit動作:
1、數據定義語句被執行的時候,比如新建一張表:Create Table …
2、數據控制語句被執行的時候,比如賦權GRANT …( 或者DENY)
3、正常退出iSQL*Plus 或者PLSQLDEVELOPER, 而沒有顯式的執行COMMIT 或者ROLLBACK 語句。
當如下事件發生時,會隱式執行Rollback 動作:
1、非正常退出iSQL*Plus, PLSQL DEVELOPER, 或者發生系統錯誤。
在Commit 或者Rollback前後數據的狀態:
1、在數據已經被更改,但沒有Commit前,被更改記錄處於被鎖定狀態,其他用戶無法進行更改;
2、在數據已經被更改,但沒有Commit前,只有當前Session的用戶可以看到這種變更,其他Session的用戶
看不到數據的變化。
3、在數據已經被更改,並且被Commit後,被更改記錄自動解鎖,其他用戶可以進行更改;
4、在數據已經被更改,並且被Commit後,其他Session的用戶再次訪問這些數據時,看到的是變化後的數據。
那麼同理可知Rollback前後數據的狀態及鎖的變化。
鎖
表的命名要求和表中列的命名要求:
1、必須以字母開頭
2、長度不能超過30個字符
3、只能包含A–Z,a–z, 0–9,_, $, and #
4、不能與數據庫中的已有對象重名
5、不能使用Oracle 數據庫的保留字
注意TRUNCATE 與DELETE FROM table 的區別: 1)沒有Rollback機會2)HWM標記復位(HWM高水位線)都不會刪除表結構
約束
更改表的語法:
添加列:
ALTERTABLE table
ADD(column datatype [DEFAULT expr]
[, columndatatype]...);
更改列:
ALTERTABLE table
MODIFY(column datatype [DEFAULT expr]
[, columndatatype]...);
刪除列:
ALTERTABLE table
DROP(column);
ALTER TABLE tablenameADD CONSTRAINT constraintname
constrainttype(column1,…);
CONSTRAINT emp_email_ukUNIQUE(email))
CONSTRAINT dept_id_pk PRIMARYKEY(department_id))
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCESdepartments(department_id)
CONSTRAINT emp_salary_min CHECK (salary > 0)
索引、序列、同義詞
函數索引
CREATE INDEX upper_dept_name_idx
ON departments(UPPER(department_name));
控制用戶權限