第一章 關係數據庫基礎
- 基本概念
- 數據(Data):是描述事物的符號記錄,是數據庫中存儲的基本對象。
數據的種類:數字、文字、圖形、圖象、聲音、視頻等 - 數據庫(Database):是長期存儲在計算機內,有組織的、可共享的數據的集合。
- 數據庫管理系統(DBMS):是使用戶可以定義、創建和維護數據庫以及提供數據庫有限制訪問的軟件系統。負責對數據庫的數據進行統一的管理和控制。
- 數據庫系統(DBS):是採用數據庫技術的計算機系統。一般由計算機軟硬件系統、數據庫、數據庫管理系統及用戶組成。本質上是一個用計算機存儲數據的系統
- 數據模型三要素:
- 數據結構
- 數據的約束條件
- 數據操作(增刪改查)
- 數據模型:是對現實世界數據特徵的抽象
- 關係模型是目前應用最廣泛的數據庫系統
- 關係數據模型三要素:
- 數據結構:二維表
- 數據約束:不說了
- 數據操作:包括增(insert)刪(delete)改(update)查(select),操作對象是集合
- 關係模型的數據完整性約束
- 實體完整性:主鍵非空,不重複
- 參照完整性:定義外鍵與主鍵之間的引用規則
- 用戶定義的完整性:字段類型、長度
- 外鍵一般符合:值爲空或者等於鎖應用的關係中的某個元祖的主鍵
- SQL(結構化查詢語言)
特別特別重要的(很可能考)
where和having的區別
- where作用於基本表和視圖
- having作用於分組之後的數據
第二章 SQLServer基礎
沒有
第三章 數據庫創建與管理
數據文件最大大小無限制:maxsize = unlimited
每次增加xxx:filegrowth = 2MB
文件組:filegroup GROUP2
添加新文件:alter database 數據庫 add file
修改文件:alter database 數據庫 modify file
添加新的日誌文件:alter database 數據庫 add log file
收縮數據庫:dbcc shrinkfile(student_data1,4)
刪除文件:alter database 數據庫 remove file Students_data1
-
數據庫基本分類
-
數據文件: ‘.mdf’,’.ndf’
-
日誌文件:’.ldf’
-
特別注意:數據文件和日誌文件必須都有一個,次要數據文件可以有多個,日誌文件也可以有多個
-
文件組只作用在數據文件上
-
創建數據庫
create database on primary --基本文件組 ( name = students_data1, --邏輯文件名 filename = 'F:\Data\student_data1.mdf', --主數據文件 size = 5MB, --初始大小 maxsize = unlimited --最大大小無限制 ), --如果有次要數據文件,這裏必須加逗號 ( name = students_data2, filename = 'D:\Data\students_data2.ndf', size = 8MB, maxsize = 20MB, filegrowth = 2MB --每次增加xxx ) --不加逗號 log on ( name = students_log, filename = 'E:\log\students_log.ldf', size = 2MB, maxsize = 6MB, filegrowth = 10% ), filegroup GROUP2 --新的文件組 ...
-
添加新的數據文件
alter database 數據庫 add file ( name = ... .... )
-
修改數據文件的初始大小
alter database 數據庫 modify file ( name = Students, size = 8MB )
-
添加新的日誌文件
alter database 數據庫 add log file ( ... )
-
收縮數據庫
dbcc shrinkfile(student_data1,4)
-
刪除文件
alter database 數據庫 remove file Students_data1
-
創建文件組
alter database Students add filegroup Group1
-
刪除文件組
alter database Students remove filegroup Group
-
將文件組設爲默認文件組
alter database Students modify filegroup Group default
-
刪除數據庫
drop database Students
-
分離數據庫
exec sp_detach_db 'Students','true'
-
附加數據庫
create database Students on (filename = 'F:\Data\Students.mdf') for attach
第四章 SQL基礎
- 數據類型
數值類型數據類型 說明 存儲空間 bigint 從–263到263-1範圍的整數 8字節 int 從–231到231-1範圍的整數 4字節 smallint 從–215到215-1範圍的整數 2字節 tinyint 從0到255之間的整數 1字節 數據類型 說明 存儲空間 float[(n)] 存儲從-1.79E+308到-2.23E-308,0以及2.23E-308到1.79E+308範圍的浮點數 當1<=n<=24,佔四字節,當25<=n<=53,佔8字節,默認n=53 real 存儲從–3.40E + 38到3.40E + 38範圍的浮點型數 4字節
普通編碼字符串類型數據類型 說明 存儲空間 char(n) 固定長度的普通編碼字符串類型,n表示字符串的最大長度,取值範圍爲1~8000 n個字節。當實際字符串所需空間小於n時,系統自動在後邊補空格 varchar(n) 可變長度的字符串類型,n表示字符串的最大長度,取值範圍爲1~8000 字符數+2字節額外開銷 text 最多可存儲232-1個字符 每個字符1字節 數據類型 說明 存儲空間 nchar(n) 固定長度的統一編碼字符串類型,n表示字符串的最大長度,取值範圍爲1~4000 2n字節。當實際字符串所需空間小於2n時,系統自動在後邊補空格 nvarchar(n) 可變長度的統一編碼字符串類型,n表示字符串的最大長度,取值範圍爲1~4000 2*字符數+2字節額外開銷 ntext 最多存儲230-1個字符 每個字符2個字節 數據類型 存儲空間 date 3字節 time 3~5字節 datetime 8字節 - 標識符
- 常規標識符
規則
第一個字符:字母,_,@,#
其它:字母,數字,$,_,@,#
不能是保留字
不能有空格
字符數必須在1~128之間 - 分隔標識符
不符合標識符基本規則時用這個(一般不會出現,除非老闆特殊要求)select * from "Black in Table Name" select * from [Black in Table Name]
- 變量
局部變量:@變量名 用戶使用
全局變量:@@變量名 系統用於記錄信息
- 常規標識符
第五章 架構與基本表
主鍵:primary key
取值不重複:unique
默認值:default ‘x’
取值範圍:check(Sage>=15 and Sage<=45)
表級主鍵:primary key(Sno,Cno)
表級外鍵:foreign key(Sno) references Student(Sno)
自增:identity(1,1)
- 創建表
create table SC( Sno char(7) not null, Cno char(6) not null, Grade tinyint, primary key (Sno,Cno), foreign key (Sno) references Student(Sno), foreign key (Cno) references Student(Cno) )
- 創建有計算列的表
create table Test( low int, high int, myavg as (low+high)/2 )
- 爲已有表添加一個字段
alter table 表名 add 列名 屬性 alter table SC add Type NCHAR(1) NULL
- 爲已有字段添加取值範圍
alter table SC add check (type in ('必修','重修','選修'))
- 刪除某字段
alter table SC drop column 字段名
- 刪除表
drop table 表名
第六章 數據操作語言
distinct 去除重複值
top 幾 with ties
字符匹配
_:任意單個字符
%:0個或者多個任意字符
[]:裏邊的任意一個
[^]:除了裏邊的
只有count能出現*,sum,avg只能操作數值類型字段
insert into 表名 values (xxx)
update 表名 set 列名 = xxx
delete from 表名 where …
- 查詢年齡
select Sname,year(getdate())-year(Birthdate) from Student
- 去掉重複值
select distinct Sno from SC
- 在某個範圍
select Sno where Grade between 80 and 90
- 查詢信息系,機械系的學生
select Sname from Student where Dept in ('信息系','機械系')
- 字符串匹配
select * from Student where Sname like '章%'
- escape 轉義
-- 感嘆號後邊的一個字符作爲普通字符處理,不作爲通配符處理 select * from num where num like '%30!%%' escape '!'
- 排序
-- DESC是降序,默認是升序(ASC) select * from SC order by SCORE DESC
- 聚合函數
count(*)
count(distinct Sno) 去重統計
sum(列名)
avg(列名)
max(列名)
min(列名) - 分組 一旦出現每xxx,一定會有分組
特別注意:分組之後只能返回分組對象和聚合函數select count(*) from SC group by CNO
- 內聯
比如有兩張表T1和T2
T1:TNO TNUM 001 one 002 two TNO TNAME 001 la 002 lala 003 lalala select * from T1 join T2 on T1.TNO = T2.TNO
TNO TNUM TNAME 001 one la 002 two lala - 自連 :通過給表取別名實現
比如找和張小明同系的學生select S2.Sname from Student S1 join Student S2 on S1.Dept = S2.Dept where S1.Sname = '張小明' and S2.Sname != '張小明' --這句一定要記得加
- 外聯:主表中的數據全部返回,從表中有的字段值爲null
沒有選課的學生select * from Student left outer join SC on Student.Sno = SC.Sno where SC.SNO is null
- top :一定要搭配order by子句
select Top 3 with ties Sname from Student order by Grade desc
- 將查詢結果保存到新表中
select xxx into 新表名 from 表名
- 插入數據
insert into 表名 values (xxx) insert into 表名(字段名) values (xxx)
- 更新數據
update 表名 set 列名 = xxx
- 刪除數據
delete from 表名 where ...
第七章 高級查詢
- 子查詢
通常有以下幾種形式
例如:查詢選了C004課程的所有考試中,成績高於此課程平均成績的學生的學號和成績where 列名 [NOT] IN (子查詢語句) where 列名 比較運算符 (子查詢語句) where exists (子查詢語句)
select SNO,SCORE from SC where Cno = 'C004' and Grade > (select avg(Grade) from SC where Cno = 'C004')
- SOME和ALL
當子查詢返回一個結果集時,SOME表示符合子查詢中的其中一個就行,ALL表示要符合子查詢中的所有數據
題目標誌:有一次、全部
例如:查詢至少有一次成績大於或等於90的學生的姓名、所修課程的課程號和成績select Sname,Cno,Grade from Student S join SC on S.Sno = SC.Sno where S.Sno = SOME( select Sno from SC where Grade >=90 )
- 上邊的都是不相關子查詢,相關子查詢是兩個select語句存在一定的交流
如:查詢每門課程考試成績最高的兩個學生的學號以及相應的課程號和成績。不包括沒考試的課程select Sno,Cno,Grade from SC SC1 where Sno in( select top 2 with ties Sno from SC SC2 where SC1.Cno = SC2.Cno order by Grade desc ) and Grade is not null order by Cno ASC,Grade DESC
- exists
存在則返回TRUE,不存在則返回FALSE
如:查詢選了C002課程的學生的姓名select Sname from Student where exists ( select * from SC where Sno = Student.Sno and Cno = 'C002' )
- 查詢的交差並
並
交:intersectselect COL1 from T1 union select COL3 from T2
差:except
第八章 索引
- 聚集索引和非聚集索引的區別
數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個聚集索引,相當於字典中拼音查詢的。
非聚集索引的邏輯順序與磁盤上行的物理存儲順序不同,一個表中可以擁有多個非聚集索引,相當於字典中的偏旁字典。 - 創建聚集索引
create clustered index Idx_Sname on Student(Sname)
- 創建唯一非聚集索引
create unique index AK_UnitMeasure_Name on Production.UnitMeasure(Name)
- 刪除索引
drop index Idx_Sname on Student
- 例題
在Teacher表的TNAME列上按升序和AGE列上按降序創建非聚集索引IND_TNO_AGE
爲Course表在CNAME列上按升序創建唯一索引IND_CN。create index IND_TNO_AGE on Teacher(TNAME ASC,AGE DESC)
索引根據存儲結構分爲聚集索引和非聚集索引兩類。create unique index IND_CN on Course(CNAME ASC)
索引在執行插入、修改、刪除時節省時間? ×
索引加快數據的查詢效率? ×
索引節省磁盤空間? ×
在數據庫中建立的索引越多越能提高操作效率? ×
聚集索引一定是唯一索引? ×
第九章 視圖
只有單表時才能進行增刪改
有函數或者連接時不能進行增刪改
透過視圖的操作也就是對基本表做的操作
- 創建視圖
創建視圖View_S,利用視圖可以查詢學生學號、姓名、性別和系別。create view View_S(SNO,SNAME,SEX,DEPT) as select SNO,SNAME,SEX,DEPT from Student
- 修改視圖View_S,利用視圖可以查詢學生學號、姓名和系別。
alter view View_S(SNO,SNAME,DEPT) as select SNO,SNAME,DEPT from Student
- 創建視圖View_S_CS,通過視圖只能對計算機系學生信息進行操作,其他系學生信息操作均非法。
create view View_S_CS as select * from Student where DEPT = '計算機' with check option
- 刪除視圖
drop view View_S
補充
- union
union操作符用於合併兩個或多個select語句的結果集
union內部的select語句必須有相同數量的列,列也必須有相同的數據類型,同時,每條select語句中的列的順序必須相同 - 全局變量(@@)是系統內部的變量,不能自定義
- 系統數據庫不能分離
- 在SQL Server服務器上,存儲過程是一組預先定義並編譯的T-SQL語句
- 數據庫中只存放視圖的定義
- 各個連接的區別
比如有表a,b
a表x y z 1 2 3 2 3 4 3 4 5 x q w 1 2 3 2 3 4 3 4 5 4 5 6
返回表 最多返回條數是條數最小的那張表的條數a.x y z b.x q w 1 2 3 1 2 3 2 3 4 2 3 4 3 4 5 3 4 5
返回條數是主表的條數,即主表的數據全部返回
如a left outer join b
返回結果爲a.x y z b.x q w 1 2 3 1 2 3 2 3 4 2 3 4 3 4 5 3 4 5 b left outer join a
返回結果爲b.x q w a.x y z 1 2 3 1 2 3 2 3 4 2 3 4 3 4 5 3 4 5 4 5 6 NULL NULL NULL
如查詢a表中和x=1的w相等的數據
select from a a1 join a a2 on a1.x = a2.x
a.1x a1.y a1.z a2.x a2.y a2.z 1 2 3 1 2 3 2 3 4 2 3 4 3 4 5 3 4 5
課後習題答案:https://www.docin.com/p-1996215595.html