Sql Sever知識點總結
1.資料
描述事物的符號記錄。可以是數字、文字、圖形、影象等
2.資料庫的特點
(1) 資料結構化
資料庫面向全組織, 具有整體的結構化。 描述資料時不僅描述資料本身, 還描述
資料之間的聯絡。
(2) 資料的共享性高,冗餘度低,易擴充
資料庫從整體角度看待和描述資料, 資料面向整個系統,可被多個使用者共享,減
少了資料冗餘, 節約了儲存空間, 避免了資料之間的不一 致性。(資料的不一致
性指同一資料不同拷貝的值不一樣)
(3) 資料庫由資料庫管理系統統一管理和控制。
常見的網路DBMS:
Oracle(甲骨文)公司:Oracle,大型DBMS,市場佔有率50%左右。
IBM公司:DB2,大型DBMS,市場佔有率近10%左右。
MS(微軟)公司:SQL Server,中小型DBMS,市場佔有率約20%。
常見的小型資料庫(或稱桌面資料庫)DBMS:
MS(微軟)公司:Visual Foxpro(VF),Office系列中的Access
以前流行過的小型資料庫(或稱桌面資料庫)DBMS:
Dbase,Foxbase
(4) 資料獨立性高。
使用者程式與資料庫結構相互獨立,資料庫結構變化不會影響程式。
3.DBMS的功能:
(1)資料庫的建立與維護
(2)資料存取操作
(3)資料庫控制(安全性保護、完整性檢查、併發控制、資料庫恢復)
(1)資料庫的安全性控制
資料庫的安全性是指保護資料庫以防止不合法的使用所造成的資料洩露,更
改或破壞。即不合法的使用者不能使用資料庫。
(2)DB的完整性控制
資料庫的完整性:合法使用者更新資料庫時,還有可能因各種原因出錯。完整
性約束條件確保合法使用者對資料庫的更新是正確的。
(3)DB安全控制內容
①定義使用者及許可權,記入資料字典
②合法許可權檢查
4.關係的性質
(1)列是同質的
(2)列必須取原子值
(3)列的次序無所謂
(4)行的次序無所謂
(5)任意兩行不能完全相同
5.DB邏輯模型的組成要素
資料機構、資料操作、完整性約束
6.關係的查詢操作
選擇:選擇滿足給定條件的元組(行)
投影:選擇若干屬性列組成新的關係
連線運算:笛卡爾積中滿足一定條件的元組
7.關係的完整性約束:
實體完整性:屬性A是關係B的主屬性,則不能為空 primary key
參照完整性:外碼列取值為空或者等於被參照關係中的主碼值
foreign key references
使用者定義完整性:使用者針對具體的資料庫定義的約束條件
check/null/not null/unique/
(1)DBMS完整性控制功能
①定義:提供定完整性約束條件的機制
②檢查:檢查使用者發出的操作請求是否違背了完整性約束條件
③糾正:發現違背約束時採取一定策略進行處理
(2)違反參照完整性處理策略
①拒絕執行(預設)
②級聯操作(同時刪除外來鍵所在表對應的行)
③置空值:②中操作改為將對應的資料置為空
8.SQL特點
語言統一;高度非過程化;面向集合的操作方式;兩種使用方式(自含,內嵌);語
言簡潔,易學易用
9.框架
10.應用程式的作用:
應用程式用Java等計算機語言編寫。它提供視窗接受使用者的要求,根據要求構造SQL命令,將SQL命令(通過網路)傳送給資料庫伺服器。伺服器中的DBMS執行SQL命令,完成資料庫操作,將查詢資料(通過網路)傳送給應用程式,應用程式以適當的方式使用資料,完成具體事務的處理。
11.資料庫檔案
主資料檔案(.mdf):每個DB均有一個,儲存資料庫中的表和資料
日誌檔案(.ldf):每個DB均有一個,儲存對DB的各種修改資訊,是維護資料庫完
整性的重要工具
12.命令彙總:
Create database 庫名: 建庫
drop database 庫名 : 刪除資料庫
create table 表名(name varchar(20),):建表(最後一行可不加逗號,括號後邊可不加;)
constraint c1 約束:約束命名
primary key(學號,班號):雙列主鍵
alter table 表名:修改已經建立的表結構
create index 索引名 on 表名(列明):索引建立
drop index 索引名:刪除索引
insert… values…:向表中新增屬性行
update 表名 set 修改資料where 條件:修改行資料
update 表名 set 修改資料:修改多行資料
delete from 表名 where 條件:刪除資料行
select … from 表名 where 條件:*表示全表查詢
order by 列名 asc/desc:對查詢結果排序(升序/降序)
group by 分組標準(列名):對查詢結果進行分組統計
having 分組篩選條件:對分組結果篩選
From 表1 inner join 表2on 表1.主碼 = 表2.外碼 : 等值內連線
From 表1 left outer join 表2 on 表1.主碼 = 表2.外碼 : 等值外連結(左)
Create view 表名(屬性1, …) as … : 建立檢視
13.資料型別彙總:
Bit tinyint smallint int
Real float
Char(8) varchar(20)
Smalldatetime(4) datetime(8)
14.SQL中表名、列名命名規則:
(1)區分大小寫
(2)首字母用字母、漢字、-、@、#
(3)其餘字元:字母、漢字、-、@、#、數字、$
(4)不能使用保留字
(5)不合規定識別符號用[ ]括起來
15.unique(使用者定義完整性)與主鍵約束區別:
(1)用於非主鍵一列或者多列,確保資料唯一
(2)允許該列我null
(3)同一關係可有多個unique但只能有一個主鍵約束
16.索引
(1)DBMS一般自動為主鍵列建立索引
(2)unique索引,聚簇索引
(3)DBMS維護索引
17.資料字典
在DB中建立的各種表的結構、約束、索引結構、檢視、使用者存取許可權等資訊均存出來資料字典當中。資料字典以多個表的形式存在,由DBMA管理、維護。
(1)元資料
在資料庫系統中,需要create命令建立資料庫、表、約束、視用圖、使用者、角色
等。這些內容稱為“元資料”,是描述資料庫中的資料和資料庫環境的的資料,
存放在資料庫中的資料字典中
18.資料庫的基本操作
(1) 插入資料行
(2) 刪除資料行
(3) 修改資料行中資料
(4) 查詢表中需要的資料
(5) 根據表中資料進行統計
19.資料庫的更新包括:
更新時不能違背資料的完整性,特別是參照完整性(foreign key references)
(1) 向表中插入資料 insert 表名(列明) values(新增值)
(2) 修改表中資料 update 表名 set 修改資料 where 條件
(3) 刪除表中資料
20.單表查詢:
查詢(統計)命令的關鍵詞是select,查詢結果不在資料庫中儲存,對資料庫中的資料沒有任何影響。
(1)查詢滿足條件的行和列(where)
滿足條件:=/<>/>/</!>/!<
確定範圍:between … and .. / not between … and …
確定集合:in / not in
模糊查詢:列名 like 匹配串(% _:用單引號引起來)
涉及空值的查詢:列號 is null
多重條件查詢:and or
消除結果重複行:select distinct 學號 from 選修 where 成績 > 60
(2)對查詢結果進行排序(order by … asc/desc降序)(where之後單獨成句)
按某一列排序:order by 列名 asc/desc
多列排序:order by 列名1 asc/desc,列名2 asc/desc
(3)查詢並計算
查詢簡單計算:selcet 姓名, 2017-年齡as 出生年份 from 學生
數學函式計算:abs(-3) = 3 / asci(‘d’) = 100 / ower(2, 3) = 8
as Sqrt(4) = 2 / sign(-3) = -1 / round(scores/10,2) 保留兩位小數
字元函式計算(as):len(‘abc’) = 3 / left(‘abc’, 1) = a / right(‘abc’, 1) = c
Substring(‘abcdef’,2,4) =c / upper(‘ab’) = AB / lower(‘AB’)
Space(3) = 三個空格 /ltrim(‘ test’) =’ test’ / rtrim(‘test ’)
Charindex(‘abcdef’,’cd’,1)= 3
Str(123.456, 8, 1) =‘123.5000’
Char(65) = ‘A’
使用日期函式計算:getdate() 返回當前系統時間
Datepart(部分名(year,month,day),getdate())
Datename(部分名,getdate()) = March(英文顯示)
Date(部分名,+3,getdate()) =27+3 = 30 (sql sever 2017無)
Datediff(month,‘2016/3/5’,’2016/5/5’) = 2
Day/month/year(日期) 求指定部分的值
常用其他函式:isdate(日期):判斷日期的合法性 cast(表示式,型別)
(4)統計函式處理查詢結果
Count(distinct *) 統計元組個數
Count(distinct 列名) 統計指定列中值的個數
Sum(distinct 列名) 只算指定列和(數值)
Avg(distinct 列名) 計算指定列的平均值(數值)
Max(列名) Min(列名)
(5)對查詢結果進行分組統計
Group by 分組標準(列名)
執行步驟:from\whereà group à select à order by
注意:只要select後面有一列使用了統計函式,則對其每一列,要麼出現
在統計函式中,要麼同時出現在group by後面作為分類標準
(6)分組統計結果進行篩選
Having 篩選條件
執行步驟:from\where à group à select à having à order by
注意:where作用與基本表或檢視,having作用與組
21.連線查詢
(1)等值(內)連線:
Where表1.主碼 = 表2.外碼
From 表1inner join 表2 on 表1.主碼 = 表2.外碼
多表連線用and
(2)等值(外)連線:
From 表1left outer join 表2 on 表1.主碼 = 表2.主碼
From 表1right outer join 表2 on 表1.主碼 = 表2.主碼
From 表1 full outer join 表2 on 表1.主碼 = 表2.主碼
(3)表格別名(自身連線)
Select *
From 表1(as) s1, 表2 (as) s2
Where s1.列1 = s2.列2
22.巢狀查詢
(1)定義:
一個查詢巢狀在另一個查詢的where子句或having短語條件中
(2)形式:
Select … from 學生where 85 <= (select avg(成績))
From 選修
Where 學號 = 學生.學號)
(3)帶有any all的子查詢
【例】查詢其它班比信管1班某一學生年齡小的學生姓名和年齡
Select 姓名 from 學生where 年齡 < any(select 年齡
From 學生
Where 班號 = ‘信管1’)
And 班號 <> ‘信管1’
(4)帶有exists not exists的子查詢
【例】查詢信管班選修了’002’號課程的學生姓名
Select 姓名
From 學生
Where exists (select *
From 選修
Where 學號 = 學生.學號 and 課號 = ‘002’)
And 班號 like ‘信管%’
(5)基於派生表的查詢
【例】找出某個學生選修課成績超過自己選修課程平均分的課程號
Select 學號,課號
From 選修,(select 學號,avg(成績)
From 選修
Group by 學號) as 平均(學號,平均分)
Where 選修.學號 = 平均.學號 and 成績 > 平均分
23.集合查詢:
每一個select命令的結果都是一個表,每個表都代表一個集合。
(1)並(union)運算
【例】查詢選修了01號課程,或者選修了03號課程的學生
Select 學號 from 選修 where 課號 =‘01’
Union
Select 學號 from 選修 where 課號 =‘03’
(2)交(intersect)運算
【例】查詢既選修了01號課程,又選修了03號課程的學生
Select 學號 from 選修 where 課號 =‘01’
Intersect
Select 學號 from 選修 where 課號 =‘03’
(3)差(except)運算
【例】查詢選修了01號課程,但沒有選修03號課程的學生
Select 學號 from 選修 where 課號 =‘01’
Except
Select 學號 from 選修 where 課號 =‘03
24.巢狀查詢更新資料庫
(1)向表中插入子查詢的結果
【例】向選課表中插入信管1班所有同學選修’005’號課程的記錄
Insert 選修(學號,課號,成績)
Select 學號,‘005’,null
From 學生
Where班號 = ‘信管1’
(2)帶子查詢的修改命令
【例】將信管1班全體學生的’001’號課程成績置零
Update
Set 成績 = 0
Where 課號 = ‘001’ and 學號 in (select 學號
From 學生
Where 班號 = ‘信管1’)
25.檢視
(1)提出的願意
①每個關係表中僅儲存一類資料,故需要綜合資訊時,需要進行連線、巢狀等查
詢費時費力
②資料庫中一般不儲存統計資料
(2)檢視是一個虛表
(3)典型檢視
行列子集檢視:從單個表中匯出,去掉某些行列,保留了碼
從多表匯出的檢視:
帶表示式的檢視:select語句中含有表示式(例如:datepart(year,getdate()))
分組檢視:select語句中含有統計函式
(4)更新檢視
通過檢視更新表中的資料,有的情況下是可行的,有的情況下,則因為對檢視的
更新不能轉換成對錶的更新而無法進行。例如:更新表出生年(出生年份)就會
失敗,因為出生年份是通過表示式計算出來的。一般來講,行列子集檢視是可更
新的,表示式檢視、分組檢視就不允許更新,從多個表匯出的檢視則不一定。
(5)檢視的作用
①簡化使用者操作
②使使用者多角度看待同一資料
③對重構資料庫提供了一定的邏輯獨立性
④對機密資料進行安全保護
26.DB安全性控制
(1)建立使用者
Create user 使用者名稱
With 許可權
(connect:資料庫連線 Resource:表檢視建立(可授權他人) dba:超級使用者)
(2)授權
Grant 許可權 (select insert update delete / all privileges / alterindex)
On 物件型別 物件名 (table)
To 使用者
With great option (可傳播許可權)
(3)撤銷許可權命令
Revoke 許可權
On 物件型別 物件
From 使用者
Cascade (傳播的許可權一併撤銷)
(4)角色
Create role 角色名
Grant 許可權
On 物件型別 物件名
To 角色名
Grant 角色1,角色2,…
To 角色,使用者
Revoke 許可權
On 物件型別 物件名
From DB使用者1, …
(5)SQLSever授權機制
在伺服器級和資料庫級採用基於“角色”的授權機制。即先將一系列許可權授予
不同的“角色”,然後再將角色享有的許可權授予使用者。角色授權機制能簡化數
據庫的授權工作。
(6)SQL Sever安全機制