1只泼、組函數:組函數作用于一組數據矛辕,并對一組數據返回一個值。
AVG 平均值
COUNT?計數
MAX?最大值
MIN?最小值
SUM?求和
可以對數值型數據使用AVG 和 SUM 函數
可以對任意數據類型的數據使用 MIN 和 MAX 函數漓柑。
不能在WHERE子句中使用組函數竟宋。
可以在HAVING子句中使用組函數。
嵌套組函數
SELECT MAX (AVG(salary))
FROM employees
GROUP BY department_id;
2泄私、可以使用 GROUP BY 子句將表中的數據分成若干組
SELECT department_id,AVG(salary)
FROM employees GROUP BY department_id ;
使用 HAVING 過濾分組:
行已經被分組房揭。
使用了組函數。
滿足HAVING子句中條件的分組將被顯示晌端。
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
3捅暴、SQL支持下列類別的命令:
數據定義語言(DDL)
CREATE? ALTER? DROP
數據操縱語言(DML)
INSERT? SELECT? DELETE UPDATE
事務控制語言(TCL)
COMMIT? SAVEPOINT? ROLLBACK
數據控制語言(DCL)
GRANT REVOKE
4、事務的ACID特性
原子性:任何一個事務都是一個整體咧纠,不可以再分割蓬痒,要么一起執(zhí)行要么一起回滾。
一致性:必須從一個正確的狀態(tài)到另外一個正確的狀態(tài)漆羔。
隔離性:一個會話沒有提交的數據梧奢,其他的會話是不能看到。
持久性:提交事務以后演痒,事務的操作會被持久化到數據庫當中亲轨,不能回退,別的會話可以看到事務操作的結果
5鸟顺、使用 SAVEPOINT 語句在當前事務中創(chuàng)建保存點惦蚊。
使用 ROLLBACK? TO? SAVEPOINT 語句回滾到創(chuàng)建的保存點。
自動提交在以下情況中執(zhí)行:
DDL語句讯嫂。
DCL語句蹦锋。
不使用COMMIT或ROLLBACK語句提交或回滾,正常結束會話欧芽。
會話異常結束或系統(tǒng)異常會導致自動回滾莉掂。
6、讀一致性為數據提供一個一致的視圖
一個用戶的對數據的改變不會影響其他用戶的改變
對于相同的數據讀一致性保證:
查詢不等待修改千扔。
修改不等待查詢憎妙。
7库正、Oracle 數據庫中,鎖是 :
并行事務中避免資源競爭厘唾。
避免用戶動作诀诊。
自動使用最低級別的限制。
在事務結束結束前存在阅嘶。
兩種類型:顯式和隱式属瓣。
兩種模式:
獨占鎖:屏蔽其他用戶。
共享鎖:允許其他用戶操作讯柔。
8抡蛙、只讀事務:在事務中看不到其他會話的修改,在當前會話只允許查詢
順序事務:同上魂迄,但是可以在當前會話中做DML操作
9粗截、多表查詢 :自連接、內連接捣炬、外鏈接熊昌、子查詢
自連接就是把某一張表中的行同該表中另外一些行連接起來。自連接主要用于查詢比較相同的信息湿酸,所比較的列必須有相同的或兼容的數據類型婿屹。
為了連接同一個表,需要為該表指定兩個不同的別名推溃,只有這樣才能把該表邏輯上作為兩個不同的表使用昂利。
select a.ename, a.sal, b.ename from empa,emp b?
where a.deptno=b.deptno;
內連接把兩個表連接成一個表(稱為第三個表),在這個表中僅包含那些滿足連接條件的記錄行铁坎。
內連接保證了兩個表中所有的行都滿足連接條件蜂奸,但卻丟失了一些不滿足連接條件的數據。
select * from goods, buy where goods.goods_no=buy.goods_no;
外連接如果想只限定一個表的條件而不限定另外一個表的條件硬萍,就需要使用外連接扩所。
外連接只能用于兩或兩張以上的連接。
包括左外連接和右外連接朴乖,用(+)表示可以 填充NULL值祖屏。
SELECT 別名1.colmun, 別名2.colmun
FROM table1 別名1 LEFT (OUTER) JOIN table2 別名2
ON 別名1.colmun1=別名2.colmun2;
左外連接查詢
SELECT別名1.colmun,別名2.colmun
FROM table1 別名1,table2 別名2?
WHERE 別名1.colmun1=別名2.colmun2(+);
右外連接查詢
SELECT 別名1.colmun, 別名2.colmun
FROM table1 別名1, table2別名2
WHERE 別名1.colmun1(+)= 別名2.colmun2;
子查詢在主查詢之前一次執(zhí)行完成
SELECT last_name FROM employees
WHERE salary >
(SELECT salary FROM employees WHERE last_name= 'Abel');
子查詢要包含在括號內。
將子查詢放在比較條件的右側寒砖。
除非進行Top-N分析赐劣,否則不要在子查詢中使用ORDER BY子句嫉拐。
單行操作符對應單行子查詢哩都,多行操作符對應多行子查詢。
多行子查詢:返回多行婉徘,使用多行比較操作符
10漠嵌、EXISTS 操作符檢查在子查詢中是否存在滿足條件的行
如果在子查詢中存在滿足條件的行:
不在子查詢中繼續(xù)查找
條件返回TRUE
如果在子查詢中不存在滿足條件的行:
條件返回FALSE
繼續(xù)在子查詢中查找
11咐汞、Oracle?數據對象:視圖、序列儒鹿、索引化撕、同義詞
為什么使用視圖?
控制數據訪問
簡化查詢
數據獨立性
避免重復訪問相同的數據
12约炎、創(chuàng)建視圖
CREATE VIEW empvu80
AS SELECT employee_id,last_name,salary
FROM employees?
WHERE department_id= 80;
13植阴、修改視圖
使用CREATE OR REPLACE VIEW子句修改視圖
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS? SELECT employee_id, first_name || ' ' || last_name,
salary,department_id FROM employees
WHERE department_id = 80;
14、當視圖定義中包含以下元素之一時不能使用delete:
組函數
GROUP BY 子句
DISTINCT關鍵字
ROWNUM 偽列
當視圖定義中包含以下元素之一時不能使用update
組函數
GROUP? BY子句
DISTINCT 關鍵字
ROWNUM 偽列
列的定義為表達式
當視圖定義中包含以下元素之一時不能使用insert
組函數
GROUP BY子句
DISTINCT關鍵字
ROWNUM偽列
列的定義為表達式
表中非空的列在視圖定義中未包括
15圾浅、n使用WITH CHECK OPTION子句確保DML只能在特定的范圍內執(zhí)行
CREATE? OR REPLACE VIEW empvu20
ASSELECT * FROM employees
WHERE department_id= 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
任何違反WITH CHECK OPTION約束的請求都會失敗
刪除視圖只是刪除視圖的定義掠手,并不會刪除基表的數據
DROP VIEW view;
16、什么是序列狸捕?
自動提供唯一的數值
共享對象
主要用于提供主鍵值
代替應用代碼
將序列值裝入內存可以提高訪問效率
創(chuàng)建序列DEPT_DEPTID_SEQ 為表 DEPARTMENTS 提供主鍵
不使用CYCLE選項
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE?
NOCYCLE ;
查詢數據字典視圖USER_SEQUENCES獲取序列定義信息
SELECT sequence_name, min_value, max_value,
increment_by , last_number
FROM? user_sequences;
17喷鸽、NEXTVAL 和 CURRVAL 偽列
NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用
CURRVAL 中存放序列的當前值
NEXTVAL 應在 CURRVAL 之前指定 灸拍,二者應同時有效
18做祝、修改序列
修改序列的增量,最大值,最小值,循環(huán)選項,或是否裝入內存
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
注意事項:
必須是序列的擁有者或對序列有ALTER權限
只有將來的序列值會被改變
改變序列的初始值只能通過刪除序列之后重建序列的方法實現
其它的一些限制
使用DROP SEQUENCE語句刪除序列
刪除之后,序列不能再次被引用
19鸡岗、索引
一種數據庫對象
通過指針加速Oracle服務器的查詢速度
通過快速定位數據的方法混槐,減少磁盤I/O
索引與表相互獨立
Oracle服務器自動使用和維護索引
創(chuàng)建索引
自動創(chuàng)建:在定義PRIMARY KEY或UNIQUE約束后系統(tǒng)自動在相應的列上創(chuàng)建唯一性索引
手動創(chuàng)建:用戶可以在其它列上創(chuàng)建非唯一的索引,以加速查詢
在表EMPLOYEES的列LAST_NAME上創(chuàng)建索引
CREATE INDEX emp_last_name_idx
ON employees(last_name);
適合創(chuàng)建B-TREE索引的時機:
列值基數比較高(重復率比較低)
不以空值做條件
列經常出現在條件子句中
表很大
經常做查詢操作轩性,而不是DML操作
滿足條件的數據不超過總記錄數的15%
模糊查詢不走索引纵隔,如果模糊查詢想使用索引,必須用全文檢索技術
可以使用數據字典視圖USER_INDEXES和USER_IND_COLUMNS查看索引的信息
SELECT ic.index_name,ic.column_name,ic.column_positioncol_pos,ix.uniqueness
FROM user_indexesix,user_ind_columnsic
WHERE ic.index_name=ix.index_name
AND ic.table_name= 'EMPLOYEES';
基于函數的索引是一個基于表達式的索引
索引表達式由列,常量,SQL函數和用戶自定義的函數
CREATE INDEX upper_dept_name_idx
ON departments (UPPER(department_name));
Index created.
SELECT * FROM departments
WHERE UPPER(department_name) ='SALES';
位圖索引是在基數較小炮姨,即重復率很大的列值中創(chuàng)建比較適用
create bitmap index emp_jobid_bmidx
on empcopy (job_id);
使用DROP INDEX命令刪除索引
DROP INDEX index捌刮;
只有索引的擁有者或擁有DROP ANY INDEX權限的用戶才可以刪除索引
20、使用同義詞訪問相同的對象:
方便訪問其它用戶的對象
縮短對象名字的長度
為視圖DEPT_SUM_VU創(chuàng)建同義詞
CREATE SYNONYM? d_sum
FOR dept_sum_vu;