共計 2776 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹 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
@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
以上是“SQL SERVER 基礎語法有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!