9.匯總數據
count(*) 包括空
count(name) 不包括空
?
10.分組數據
group by 分組
having 過濾分組
where 過濾行
11.子查詢
select .. from .. where in (select ...)
由內向外處理
A.子查詢過濾
作為子查詢的語句只能查詢單個列。
B.作為計算字段使用子查詢
select
cust_name,
cust_state,
(select count(*) from orders where orders.cust_id=customer.cust_id))as orders
from customers
order by cust_name;
12.聯結
A.cross join(叉連接)
沒有where的話,會返回笛卡爾積。
B.inner join(內連接)首選。
連接處理耗費資源,連接的表越多,性能下降越厲害。
但是,處理連接比處理子查詢快得多。
C.self join(自連接)
D.natural join(自然連接)
E.out join(外連接)
left join
right join
full outer join
注意:1).一般使用內連接
2).總是提供連接條件,否則笛卡爾積。
3).采用不同的連接(inner left right)條件測試,排查故障方便。
14.組合查詢(UNION)
15.插入數據
A.插入檢索出的數據(到已有的表)
INSERT INTO
B.從一個表復制到另一個表(新表)
SELECT INTO
select * into custCopy from customers
16.更新與刪除數據
A.使用update、delete一定不要忘了where!!!
B.有的update、delete需要權限。
C.一定要使用update、delete之前,要先select看看!!!
17.創建和操縱表
create table student
(
id int not null,
name varchar(20)
);
ALTER TABLE student add age int;
ALTER TABLE student drop column age;
DROP TABLE student;
18.視圖。
A.什么使用視圖?
1).重用sql
2).簡化sql操作
3).使用表的一部分而不是整個表
4).保護數據
5).更改數據格式和表示。
視圖可以返回與底層表的表示和格式不同的數據。
B.視圖規則與限制
C.創建視圖
CREATE VIEW studentView as (select ...)
1)簡化復雜連接
2)格式化檢索出的數據
3)過濾不想要的數據
19.存儲過程。
A.簡介
一些復雜的操作需要多條語句才能完成。
可將其視為批文件,雖然他們的作用不僅限于批處理。
B.為什么?
1)通過把處理封裝在一個易用的單元中,簡化復雜的操作。
2)由于不要求反復建立一系列處理步驟,保證了數據的一致性。防止錯誤。步驟越多,出錯的可能性越大。
如果所有開發人員都是用同一存儲過程,則所使用的代碼都是相同的。
3)簡化對變動的管理。安全性。
4)存儲過程通常以編譯過的形式存儲,提高性能。
5)編寫更靈活的代碼
C.好處
簡單、安全、高性能
D.缺陷
1)不易移植
2)編寫存儲過程比編寫基本sql復雜,需要更高的技能,更豐富的經驗。
?
E.執行存儲過程
EXECUTE
F.創建存儲過程
create procedure mailingListCount(ListCount out Integer)
is v_rows Integer;
begin?
select count(*) into v_rows
from customers
where not cust_email is null;
ListCount :=vrows;
end;
var ReturnValue Number
exec?mailingListCount(:ReturnValue);
select?ReturnValue;?
20.管理事務處理
事務處理是一種機制,用來管理必須成批執行的sql操作,保證數據庫不包含不完整的操作結果。
A.事務處理
事務(transaction)
回退(rollback)
提交(commit)
保留點(savepoint)
B.控制事務處理
?
21.使用游標
22.高級sql特性
(22.1)約束
A.主鍵約束
B.外鍵約束
1)外鍵是表中的一列,其值必須列在靈異表的主鍵中。
2)外鍵是保證引用完整性的及其重要部分。
3)定義
alter table orders?
add constraint foreign key(cust_id)
references customers(cust_id)
4)外鍵有助防止意外刪除
5)級聯刪除
C.唯一約束
D.檢查約束
(22.2)索引
索引用來排序數據以加快搜索和排序操作的速度。想象一本書后的索引。
可以在一個或多個列上定義索引,使DBMS保存其內容的一個“排過序”的列表。
A.索引改善查詢select操作性能,降低insert、update、delete操作性能,在執行這些操作時,DBMS必須動態更新索引。
B.索引可能占用大量存儲空間。
C.并非所有數據都適合做索引。取值不多的數據不需要索引。
D.索引用于數據過濾和數據排序。經常排序數據適合索引。
E.索引可以定義多個列。
F.用法:
create index product_name_index
on products(product_name);
G.索引必須唯一命名
H.索引效率歲數據增加而變化,過去創建的某個理想的索引經過幾個月的數據處理后可能變得不再理想。
最好定期檢查索引,并根據需要調整更新索引。
(22.3)觸發器
觸發器是特殊的存儲過程,他在特定的數據庫活動發生時自動執行。觸發器可以與特定表上的insert、update、delete操作相關聯。
A.觸發器可以在特定操作執行之前或之后執行。
B.用途:
1)保證數據一致
2)基于某個表的變動在其他表上執行活動。
比如,更新或刪除一行時將跟蹤記錄寫入某個日記表。
3)進行額外的驗證并根據需要回退數據。
4)計算計算列的值或更新時間戳。
C.寫法
create trigger customer_state
on customers for insert,update
as update customers set....
(22.4)數據庫安全
?
?
?
?
?
?