1、組函數(shù):組函數(shù)作用于一組數(shù)據(jù),并對(duì)一組數(shù)據(jù)返回一個(gè)值。
AVG 平均值
COUNT?計(jì)數(shù)
MAX?最大值
MIN?最小值
SUM?求和
可以對(duì)數(shù)值型數(shù)據(jù)使用AVG 和 SUM 函數(shù)
可以對(duì)任意數(shù)據(jù)類(lèi)型的數(shù)據(jù)使用 MIN 和 MAX 函數(shù)。
不能在WHERE子句中使用組函數(shù)。
可以在HAVING子句中使用組函數(shù)。
嵌套組函數(shù)
SELECT MAX (AVG(salary))
FROM employees
GROUP BY department_id;
2、可以使用 GROUP BY 子句將表中的數(shù)據(jù)分成若干組
SELECT department_id,AVG(salary)
FROM employees GROUP BY department_id ;
使用 HAVING 過(guò)濾分組:
行已經(jīng)被分組。
使用了組函數(shù)。
滿(mǎn)足HAVING子句中條件的分組將被顯示。
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
3、SQL支持下列類(lèi)別的命令:
數(shù)據(jù)定義語(yǔ)言(DDL)
CREATE? ALTER? DROP
數(shù)據(jù)操縱語(yǔ)言(DML)
INSERT? SELECT? DELETE UPDATE
事務(wù)控制語(yǔ)言(TCL)
COMMIT? SAVEPOINT? ROLLBACK
數(shù)據(jù)控制語(yǔ)言(DCL)
GRANT REVOKE
4、事務(wù)的ACID特性
原子性:任何一個(gè)事務(wù)都是一個(gè)整體,不可以再分割,要么一起執(zhí)行要么一起回滾。
一致性:必須從一個(gè)正確的狀態(tài)到另外一個(gè)正確的狀態(tài)。
隔離性:一個(gè)會(huì)話(huà)沒(méi)有提交的數(shù)據(jù),其他的會(huì)話(huà)是不能看到。
持久性:提交事務(wù)以后,事務(wù)的操作會(huì)被持久化到數(shù)據(jù)庫(kù)當(dāng)中,不能回退,別的會(huì)話(huà)可以看到事務(wù)操作的結(jié)果
5、使用 SAVEPOINT 語(yǔ)句在當(dāng)前事務(wù)中創(chuàng)建保存點(diǎn)。
使用 ROLLBACK? TO? SAVEPOINT 語(yǔ)句回滾到創(chuàng)建的保存點(diǎn)。
自動(dòng)提交在以下情況中執(zhí)行:
DDL語(yǔ)句。
DCL語(yǔ)句。
不使用COMMIT或ROLLBACK語(yǔ)句提交或回滾,正常結(jié)束會(huì)話(huà)。
會(huì)話(huà)異常結(jié)束或系統(tǒng)異常會(huì)導(dǎo)致自動(dòng)回滾。
6、讀一致性為數(shù)據(jù)提供一個(gè)一致的視圖
一個(gè)用戶(hù)的對(duì)數(shù)據(jù)的改變不會(huì)影響其他用戶(hù)的改變
對(duì)于相同的數(shù)據(jù)讀一致性保證:
查詢(xún)不等待修改。
修改不等待查詢(xún)。
7、Oracle 數(shù)據(jù)庫(kù)中,鎖是 :
并行事務(wù)中避免資源競(jìng)爭(zhēng)。
避免用戶(hù)動(dòng)作。
自動(dòng)使用最低級(jí)別的限制。
在事務(wù)結(jié)束結(jié)束前存在。
兩種類(lèi)型:顯式和隱式。
兩種模式:
獨(dú)占鎖:屏蔽其他用戶(hù)。
共享鎖:允許其他用戶(hù)操作。
8、只讀事務(wù):在事務(wù)中看不到其他會(huì)話(huà)的修改,在當(dāng)前會(huì)話(huà)只允許查詢(xún)
順序事務(wù):同上,但是可以在當(dāng)前會(huì)話(huà)中做DML操作
9、多表查詢(xún) :自連接、內(nèi)連接、外鏈接、子查詢(xún)
自連接就是把某一張表中的行同該表中另外一些行連接起來(lái)。自連接主要用于查詢(xún)比較相同的信息,所比較的列必須有相同的或兼容的數(shù)據(jù)類(lèi)型。
為了連接同一個(gè)表,需要為該表指定兩個(gè)不同的別名,只有這樣才能把該表邏輯上作為兩個(gè)不同的表使用。
select a.ename, a.sal, b.ename from empa,emp b?
where a.deptno=b.deptno;
內(nèi)連接把兩個(gè)表連接成一個(gè)表(稱(chēng)為第三個(gè)表),在這個(gè)表中僅包含那些滿(mǎn)足連接條件的記錄行。
內(nèi)連接保證了兩個(gè)表中所有的行都滿(mǎn)足連接條件,但卻丟失了一些不滿(mǎn)足連接條件的數(shù)據(jù)。
select * from goods, buy where goods.goods_no=buy.goods_no;
外連接如果想只限定一個(gè)表的條件而不限定另外一個(gè)表的條件,就需要使用外連接。
外連接只能用于兩或兩張以上的連接。
包括左外連接和右外連接,用(+)表示可以 填充N(xiāo)ULL值。
SELECT 別名1.colmun, 別名2.colmun
FROM table1 別名1 LEFT (OUTER) JOIN table2 別名2
ON 別名1.colmun1=別名2.colmun2;
左外連接查詢(xún)
SELECT別名1.colmun,別名2.colmun
FROM table1 別名1,table2 別名2?
WHERE 別名1.colmun1=別名2.colmun2(+);
右外連接查詢(xún)
SELECT 別名1.colmun, 別名2.colmun
FROM table1 別名1, table2別名2
WHERE 別名1.colmun1(+)= 別名2.colmun2;
子查詢(xún)在主查詢(xún)之前一次執(zhí)行完成
SELECT last_name FROM employees
WHERE salary >
(SELECT salary FROM employees WHERE last_name= 'Abel');
子查詢(xún)要包含在括號(hào)內(nèi)。
將子查詢(xún)放在比較條件的右側(cè)。
除非進(jìn)行Top-N分析,否則不要在子查詢(xún)中使用ORDER BY子句。
單行操作符對(duì)應(yīng)單行子查詢(xún),多行操作符對(duì)應(yīng)多行子查詢(xún)。
多行子查詢(xún):返回多行,使用多行比較操作符

10、EXISTS 操作符檢查在子查詢(xún)中是否存在滿(mǎn)足條件的行
如果在子查詢(xún)中存在滿(mǎn)足條件的行:
不在子查詢(xún)中繼續(xù)查找
條件返回TRUE
如果在子查詢(xún)中不存在滿(mǎn)足條件的行:
條件返回FALSE
繼續(xù)在子查詢(xún)中查找
11、Oracle?數(shù)據(jù)對(duì)象:視圖、序列、索引、同義詞
為什么使用視圖?
控制數(shù)據(jù)訪(fǎng)問(wèn)
簡(jiǎn)化查詢(xún)
數(shù)據(jù)獨(dú)立性
避免重復(fù)訪(fǎng)問(wèn)相同的數(shù)據(jù)

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、當(dāng)視圖定義中包含以下元素之一時(shí)不能使用delete:
組函數(shù)
GROUP BY 子句
DISTINCT關(guān)鍵字
ROWNUM 偽列
當(dāng)視圖定義中包含以下元素之一時(shí)不能使用update
組函數(shù)
GROUP? BY子句
DISTINCT 關(guān)鍵字
ROWNUM 偽列
列的定義為表達(dá)式
當(dāng)視圖定義中包含以下元素之一時(shí)不能使用insert
組函數(shù)
GROUP BY子句
DISTINCT關(guān)鍵字
ROWNUM偽列
列的定義為表達(dá)式
表中非空的列在視圖定義中未包括
15、n使用WITH CHECK OPTION子句確保DML只能在特定的范圍內(nèi)執(zhí)行
CREATE? OR REPLACE VIEW empvu20
ASSELECT * FROM employees
WHERE department_id= 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
任何違反WITH CHECK OPTION約束的請(qǐng)求都會(huì)失敗
刪除視圖只是刪除視圖的定義,并不會(huì)刪除基表的數(shù)據(jù)
DROP VIEW view;
16、什么是序列?
自動(dòng)提供唯一的數(shù)值
共享對(duì)象
主要用于提供主鍵值
代替應(yīng)用代碼
將序列值裝入內(nèi)存可以提高訪(fǎng)問(wèn)效率
創(chuàng)建序列DEPT_DEPTID_SEQ 為表 DEPARTMENTS 提供主鍵
不使用CYCLE選項(xiàng)
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE?
NOCYCLE ;
查詢(xún)數(shù)據(jù)字典視圖USER_SEQUENCES獲取序列定義信息
SELECT sequence_name, min_value, max_value,
increment_by , last_number
FROM? user_sequences;
17、NEXTVAL 和 CURRVAL 偽列
NEXTVAL 返回序列中下一個(gè)有效的值,任何用戶(hù)都可以引用
CURRVAL 中存放序列的當(dāng)前值
NEXTVAL 應(yīng)在 CURRVAL 之前指定 ,二者應(yīng)同時(shí)有效
18、修改序列
修改序列的增量,最大值,最小值,循環(huán)選項(xiàng),或是否裝入內(nèi)存
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
注意事項(xiàng):
必須是序列的擁有者或?qū)π蛄杏蠥LTER權(quán)限
只有將來(lái)的序列值會(huì)被改變
改變序列的初始值只能通過(guò)刪除序列之后重建序列的方法實(shí)現(xiàn)
其它的一些限制
使用DROP SEQUENCE語(yǔ)句刪除序列
刪除之后,序列不能再次被引用
19、索引
一種數(shù)據(jù)庫(kù)對(duì)象
通過(guò)指針加速Oracle服務(wù)器的查詢(xún)速度
通過(guò)快速定位數(shù)據(jù)的方法,減少磁盤(pán)I/O
索引與表相互獨(dú)立
Oracle服務(wù)器自動(dòng)使用和維護(hù)索引
創(chuàng)建索引
自動(dòng)創(chuàng)建:在定義PRIMARY KEY或UNIQUE約束后系統(tǒng)自動(dòng)在相應(yīng)的列上創(chuàng)建唯一性索引
手動(dòng)創(chuàng)建:用戶(hù)可以在其它列上創(chuàng)建非唯一的索引,以加速查詢(xún)
在表EMPLOYEES的列LAST_NAME上創(chuàng)建索引
CREATE INDEX emp_last_name_idx
ON employees(last_name);
適合創(chuàng)建B-TREE索引的時(shí)機(jī):
列值基數(shù)比較高(重復(fù)率比較低)
不以空值做條件
列經(jīng)常出現(xiàn)在條件子句中
表很大
經(jīng)常做查詢(xún)操作,而不是DML操作
滿(mǎn)足條件的數(shù)據(jù)不超過(guò)總記錄數(shù)的15%
模糊查詢(xún)不走索引,如果模糊查詢(xún)想使用索引,必須用全文檢索技術(shù)
可以使用數(shù)據(jù)字典視圖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';
基于函數(shù)的索引是一個(gè)基于表達(dá)式的索引
索引表達(dá)式由列,常量,SQL函數(shù)和用戶(hù)自定義的函數(shù)
CREATE INDEX upper_dept_name_idx
ON departments (UPPER(department_name));
Index created.
SELECT * FROM departments
WHERE UPPER(department_name) ='SALES';
位圖索引是在基數(shù)較小,即重復(fù)率很大的列值中創(chuàng)建比較適用
create bitmap index emp_jobid_bmidx
on empcopy (job_id);
使用DROP INDEX命令刪除索引
DROP INDEX index;
只有索引的擁有者或擁有DROP ANY INDEX權(quán)限的用戶(hù)才可以刪除索引
20、使用同義詞訪(fǎng)問(wèn)相同的對(duì)象:
方便訪(fǎng)問(wèn)其它用戶(hù)的對(duì)象
縮短對(duì)象名字的長(zhǎng)度
為視圖DEPT_SUM_VU創(chuàng)建同義詞
CREATE SYNONYM? d_sum
FOR dept_sum_vu;