SQLServer複習筆記

第一章 關係數據庫基礎

  1. 基本概念
  • 數據(Data):是描述事物的符號記錄,是數據庫中存儲的基本對象
    數據的種類:數字、文字、圖形、圖象、聲音、視頻等
  • 數據庫(Database):是長期存儲在計算機內,有組織的、可共享的數據的集合
  • 數據庫管理系統(DBMS):是使用戶可以定義、創建和維護數據庫以及提供數據庫有限制訪問的軟件系統。負責對數據庫的數據進行統一的管理和控制
  • 數據庫系統(DBS):是採用數據庫技術的計算機系統。一般由計算機軟硬件系統、數據庫、數據庫管理系統及用戶組成。本質上是一個用計算機存儲數據的系統
  1. 數據模型三要素:
  • 數據結構
  • 數據的約束條件
  • 數據操作(增刪改查)
  1. 數據模型:是對現實世界數據特徵的抽象
    數據模型
  2. 關係模型是目前應用最廣泛的數據庫系統
  3. 關係數據模型三要素:
  • 數據結構:二維表
  • 數據約束:不說了
  • 數據操作:包括增(insert)刪(delete)改(update)查(select),操作對象是集合
  1. 關係模型的數據完整性約束
  • 實體完整性:主鍵非空,不重複
  • 參照完整性:定義外鍵與主鍵之間的引用規則
  • 用戶定義的完整性:字段類型、長度
  1. 外鍵一般符合:值爲空或者等於鎖應用的關係中的某個元祖的主鍵
  2. SQL(結構化查詢語言)
    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

  1. 數據庫基本分類
    數據庫

  2. 數據文件: ‘.mdf’,’.ndf’

  3. 日誌文件:’.ldf’

  4. 特別注意:數據文件和日誌文件必須都有一個,次要數據文件可以有多個,日誌文件也可以有多個

  5. 文件組只作用在數據文件上

  6. 創建數據庫

    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 --新的文件組
    ...
    
  7. 添加新的數據文件

    alter database 數據庫
    add file
    (
    name = ...
    ....
    )
    
  8. 修改數據文件的初始大小

    alter database 數據庫
    modify file
    (
    name = Students,
    size = 8MB
    )
    
  9. 添加新的日誌文件

    alter database 數據庫
    add log file
    (
    ...
    )
    
  10. 收縮數據庫

    dbcc shrinkfile(student_data1,4)
    
  11. 刪除文件

    alter database 數據庫
    remove file Students_data1
    
  12. 創建文件組

    alter database Students
    add filegroup Group1
    
  13. 刪除文件組

    alter database Students
    remove filegroup Group
    
  14. 將文件組設爲默認文件組

    alter database Students
    modify filegroup Group default
    
  15. 刪除數據庫

    drop database Students
    
  16. 分離數據庫

    exec sp_detach_db 'Students','true'
    
  17. 附加數據庫

    create database Students
    on (filename = 'F:\Data\Students.mdf')
    for attach
    

第四章 SQL基礎

  1. 數據類型
    數值類型
    數據類型 說明 存儲空間
    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字節
  2. 標識符
    • 常規標識符
      規則
      第一個字符:字母,_,@,#
      其它:字母,數字,$,_,@,#
      不能是保留字
      不能有空格
      字符數必須在1~128之間
    • 分隔標識符
      不符合標識符基本規則時用這個(一般不會出現,除非老闆特殊要求)
      select * from "Black in Table Name"
      select * from [Black in Table Name]
      
    1. 變量
      局部變量:@變量名 用戶使用
      全局變量:@@變量名 系統用於記錄信息

第五章 架構與基本表

主鍵:primary key
取值不重複:unique
默認值:default ‘x’
取值範圍:check(Sage>=15 and Sage<=45)
表級主鍵:primary key(Sno,Cno)
表級外鍵:foreign key(Sno) references Student(Sno)
自增:identity(1,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)
    )
    
  2. 創建有計算列的表
    create table Test(
    low int,
    high int,
    myavg as (low+high)/2
    )
    
  3. 爲已有表添加一個字段
    alter table 表名 add 列名 屬性
    alter table SC add Type NCHAR(1) NULL
    
  4. 爲已有字段添加取值範圍
    alter table SC
    add check (type in ('必修','重修','選修'))
    
  5. 刪除某字段
    alter table SC drop column 字段名
    
  6. 刪除表
    drop table 表名
    

第六章 數據操作語言

distinct 去除重複值
top 幾 with ties
字符匹配
_:任意單個字符
%:0個或者多個任意字符
[]:裏邊的任意一個
[^]:除了裏邊的
只有count能出現*,sum,avg只能操作數值類型字段
insert into 表名 values (xxx)
update 表名 set 列名 = xxx
delete from 表名 where …

  1. 查詢年齡
    select Sname,year(getdate())-year(Birthdate) from Student
    
  2. 去掉重複值
    select distinct Sno from SC
    
  3. 在某個範圍
    select Sno where Grade between 80 and 90
    
  4. 查詢信息系,機械系的學生
    select Sname from Student where Dept in ('信息系','機械系')
    
  5. 字符串匹配
    select * from Student where Sname like '章%'
    
  6. escape 轉義
    -- 感嘆號後邊的一個字符作爲普通字符處理,不作爲通配符處理
    select * from num where num like '%30!%%' escape '!' 
    
  7. 排序
    -- DESC是降序,默認是升序(ASC)
    select * from SC order by SCORE DESC
    
  8. 聚合函數
    count(*)
    count(distinct Sno) 去重統計
    sum(列名)
    avg(列名)
    max(列名)
    min(列名)
  9. 分組 一旦出現每xxx,一定會有分組
    select count(*) from SC group by CNO
    
    特別注意:分組之後只能返回分組對象和聚合函數
  10. 內聯
    比如有兩張表T1和T2
    T1:
    TNO TNUM
    001 one
    002 two
    T2:
    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
    然後就可以從裏邊找東西了
  11. 自連 :通過給表取別名實現
    比如找和張小明同系的學生
    select S2.Sname 
    from Student S1 join Student S2
    on S1.Dept = S2.Dept 
    where S1.Sname = '張小明' and S2.Sname != '張小明' --這句一定要記得加
    
  12. 外聯:主表中的數據全部返回,從表中有的字段值爲null
    沒有選課的學生
    select * from Student left outer join SC 
    on Student.Sno = SC.Sno
    where SC.SNO is null
    
  13. top :一定要搭配order by子句
    select Top 3 with ties Sname from Student order by Grade desc
    
  14. 將查詢結果保存到新表中
    select xxx into 新表名 from 表名
    
  15. 插入數據
    insert into 表名 values (xxx)
    insert into 表名(字段名) values (xxx)
    
  16. 更新數據
    update 表名 set 列名 = xxx
    
  17. 刪除數據
    delete from 表名 where ...
    

第七章 高級查詢

  1. 子查詢
    通常有以下幾種形式
    where 列名 [NOT] IN (子查詢語句)
    where 列名 比較運算符 (子查詢語句)
    where exists (子查詢語句)
    
    例如:查詢選了C004課程的所有考試中,成績高於此課程平均成績的學生的學號和成績
    select SNO,SCORE from SC
    where Cno = 'C004' and 
    Grade > (select avg(Grade) from SC where Cno = 'C004')
    
  2. 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
    )
    
  3. 上邊的都是不相關子查詢,相關子查詢是兩個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
    
  4. exists
    存在則返回TRUE,不存在則返回FALSE
    如:查詢選了C002課程的學生的姓名
    select Sname from Student
    where exists
    (
    select * from SC where Sno = Student.Sno and Cno = 'C002'
    )
    
  5. 查詢的交差並
    select COL1 from T1
    union
    select COL3 from T2
    
    交:intersect
    差:except

第八章 索引

  1. 聚集索引和非聚集索引的區別
    數據行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個聚集索引,相當於字典中拼音查詢的。
    非聚集索引的邏輯順序與磁盤上行的物理存儲順序不同,一個表中可以擁有多個非聚集索引,相當於字典中的偏旁字典。
  2. 創建聚集索引
    create clustered index Idx_Sname on Student(Sname)
    
  3. 創建唯一非聚集索引
    create unique index AK_UnitMeasure_Name
    on Production.UnitMeasure(Name)
    
  4. 刪除索引
    drop index Idx_Sname on Student
    
  5. 例題
    在Teacher表的TNAME列上按升序和AGE列上按降序創建非聚集索引IND_TNO_AGE
    create index IND_TNO_AGE on Teacher(TNAME ASC,AGE DESC)
    
    爲Course表在CNAME列上按升序創建唯一索引IND_CN。
    create unique index IND_CN on Course(CNAME ASC)
    
    索引根據存儲結構分爲聚集索引非聚集索引兩類。
    索引在執行插入、修改、刪除時節省時間? ×
    索引加快數據的查詢效率? ×
    索引節省磁盤空間? ×
    在數據庫中建立的索引越多越能提高操作效率? ×
    聚集索引一定是唯一索引? ×

第九章 視圖

只有單表時才能進行增刪改
有函數或者連接時不能進行增刪改
透過視圖的操作也就是對基本表做的操作

  1. 創建視圖
    創建視圖View_S,利用視圖可以查詢學生學號、姓名、性別和系別。
    create view View_S(SNO,SNAME,SEX,DEPT)
    as
    select SNO,SNAME,SEX,DEPT from Student
    
  2. 修改視圖View_S,利用視圖可以查詢學生學號、姓名和系別。
    alter view View_S(SNO,SNAME,DEPT)
    as
    select SNO,SNAME,DEPT from Student
    
  3. 創建視圖View_S_CS,通過視圖只能對計算機系學生信息進行操作,其他系學生信息操作均非法。
    create view View_S_CS
    as
    select * from Student where DEPT = '計算機'
    with check option
    
  4. 刪除視圖
    drop view View_S
    

補充

  1. union
    union操作符用於合併兩個或多個select語句的結果集
    union內部的select語句必須有相同數量的列,列也必須有相同的數據類型,同時,每條select語句中的列的順序必須相同
  2. 全局變量(@@)是系統內部的變量,不能自定義
  3. 系統數據庫不能分離
  4. 在SQL Server服務器上,存儲過程是一組預先定義並編譯的T-SQL語句
  5. 數據庫中只存放視圖的定義
  6. 各個連接的區別
    比如有表a,b
    a表
    x y z
    1 2 3
    2 3 4
    3 4 5
    b表
    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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章