[SQL] SQL SERVER基礎語法
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
[email protected] int,@param2 int output
as
[email protected] [email protected] * @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
[SQL] SQL SERVER基礎語法