Struct Query Language
1.3NF
a.原子性
b.不能資料備援
c.引用其他表的主鍵
2.限制
a.非空限制
b.主鍵限制
c.唯一限制
d.預設限制
e.檢查限制
f.外鍵限制
3.外鍵與關系
外鍵是限制,不做外鍵處理,關系也是存在的.
4.char varchar nchar nvarchar
char:是固定字元,如果不夠,會用空格來處理. 不需要計算長度,速度快.
varchar:是動态的大小.需要計算長度,速度慢,存儲占用小.
nvarchar:是以unicode編碼存儲.每個字元占2個位元組.可以在任何sql server都能正常顯示中文.不帶n的英文占1個位元組.中文占2個位元組
5.crud
[select]:
取前5:select top 5
取前5%:select top 5 percent
去除重複:select distinct
條件:select * from 表名 where
[insert]:insert into 表名[(字段名,字段名)] values(字段值,字段值)
[update]:update 表名 set 字段名=字段值 [where]
[delete]:delete [from] 表名 [where]
6.運算符優先級
[邏輯運算符]: and or not(!)
[比較運算符]:< > = !=
比較運算符一般邏輯運算符優先級要高,除了not.!隻比小括号的優先級低.
7.模糊查詢
like:select * from 表名 where 字段名 like 值
_:比對任意一個字元
%:比對任意多個字元
[%]:比對字元%
8.空值處理
ISNULL:select ISNULL(english,'缺考') from Scroe 英語成績為空則顯示缺考
is [not] null:select * from Scroe where english is null 把英語成績為null的查詢出來
9.聚合函數
SUM AVG COUNT MAX MIN
聚合函數一般和group by配合使用,having可以對group by後再過濾
10.完整查詢語句順序
select top 5 distinct * from T where field = fieldValue group by field2 having field2>5 order by field
1:from T 2:* 3:where 4:distinct 5:group by field2 6:having field2>5 7:order by 8:top 5
11.常用函數
[類型轉換]:CAST(值 as 類型) CONVERT(類型,值)
[字元串]:LTRIM(值) RTRIM(值) LOWER(值) UPPER(值) LEN(值) SUBSTRING(值,開始位置,長度)
[日期]:GETDATE()取現在時間 DATEADD(datepart,number,date)加時間date+num DATEDIFF(datepart,startdate,enddate)取時間差end-start DATEPART(datepart,date)
取消/強制插入辨別列:set identity_insert 表名 off/on
清空表:truncate table 表名
12.複制表
select * into 新表 from 原表 where 1=1
13.聯合查詢
當2個結果集列數相同,類型相同,可以合并為一個結果集.
union:會自動去除重複行
union all:顯示所有行.
14.連接配接查詢
分内連接配接和外連接配接
内連接配接:[inner ]join
select * from T1 inner join T2 on T1.ID2 = T2.ID
自連接配接是特殊的内連接配接,樹結構存儲: select * from T as T1 join T as T2 where T2.PID = T1.ID
外連接配接:
left [outer] join:左連接配接,左表内容全部顯示.右邊沒有的用NULL标示
right [outer] join:右連接配接,右表内容全部顯示.左邊沒有的用NULL标示
full [outer] join:全連接配接,左右表内容全部顯示,沒有的用NULL标示
15.開窗函數
可以将多行合并為一個區來看待.可以對一個區進行統計.差別于group by,可以查詢所有列.
開窗函數:over() 裡面可以跟order by和partition by(類似 group by)
排名:rank() over(order by id)
排序:row_number() over(order by id)
小計:avg(cost) over(partition by cost)(平均費用)
16.視圖
本質封裝一個sql語句,不會存儲任何資料.
建立: create view viewName as sql語句
檢視sql: exec sp_helptext viewName
17.事務
事務是保證多個操作同時成功或者同時失敗
begin tran(開始事務) commit tran(送出事務) rollback tran(復原事務)
打開/關閉事務自動送出:set implicit_transactions off/on
18.存儲過程
存儲過程本質是封裝一段代碼.
建立: create proc procName
@param1 int,@param2 int output
as
set @param2 =@param1 * @param1
參數預設值:存儲過程隻有最後一個參數可以有預設值.
19.索引
[聚焦索引]:
[非聚焦索引]:
create index indexName on tableName(fieldName)
20.觸發器
對某個表的進行增删改操作時,自動執行一個操作.有2種方式執行,1是觸發源操作前替換執行 2是觸發源操作後執行
臨時表:inserted deleted
2種方式:after | instead of
3種觸發源:insert update delete
建立:
create trigger triggerName
after insert
as begin
insert into T select * from inserted
end
建議:影響效率 謹慎使用
21.遊标
逐行的操作資料
對每條資料執行指定的
使用:(讓T表中每個人的年齡增1)
declare c1 cursor for
select id,age from T
declare @id int
declare @age int
open c1
fetch c1 into @id,@age
while(@@FETCH_STATU = 0)
begin
set @age= 1 + @age
update T set age = @age where id = @id
fetch c1 into @id,@age
end
close c1
deallocate c1