標籤:多行 ring 全串連 參數 outer 復原 values 邏輯運算 unicode編碼
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 [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基礎文法