創建表: 表數據的增刪改查: 修改表結構: 去除重覆記錄: 排序: 查詢數據前多少條: 模糊查詢: 通配符:_ 表示任意的單個字元 % 匹配任意多個字元 [] 表示範圍內的單個字元 [^] 不在指定範圍內的單個字元 自定義轉義符:escape 空值判斷: 類型轉換函數:cast(表達式 as 數據類 ...
創建表:
1 create table 表名 2 { 3 //定義列名 4 id int identify(1,1) primary key,//自動編號:從1開始每次增長1,約束:主鍵約束 5 name nvarchar(50) not null //非空約束 6 }
表數據的增刪改查:
1 insert into 表名 values() 2 delete from 表名 3 update 表名 set 4 select * from 表名 5 註:當刪除表中所有數據還可使用truncate table 表名,它不能加where條件但是比delect所有表數據效率高,因為它通過釋放數據頁來刪除數據,在事務日誌中只記錄數據頁的釋放;而且刪除數據後計數器重置為定義的種子,如果沒有定義種子,則使用預設值1。
修改表結構:
1 alter table 表名 2 add 列名 數據類型 //增加一列 3 drop column 列名 //刪除一列 4 alter column 表名 數據類型 not null //修改一列,並添加非空約束 5 add constraint PK_表名_列名 primary key(列名) //添加主鍵約束 6 add constraint UQ_表名_列名 unique(列名) //添加唯一約束 7 add constraint DF_表名_列名 default(值) for 列名 //添加預設約束 8 add constraint CK_表名_列名 check(列的條件表達式) //添加檢查約束 9 add constraint FK_表名_列名 foreign key(外鍵表的列名) references 主鍵表名(主鍵表的列名) //添加外鍵約束 10 drop constraint 約束名1,約束名2............ //刪除約束
去除重覆記錄:
1 select distinct .... from 表名 ...... //對查詢的結果集去重(針對每一列都相同的情況)
排序:
1 select * from 表名 order by 列名 desc //按照列名降序排序,預設為asc升序排序 2 註:order by語句必須放在整個sql語句的後面。
查詢數據前多少條:
1 select top 2 值 //如:5,則表示查詢該表前5條 3 (表達式) //如:(2*2),則表示查詢該表的前4條 4 值 percent //如:30 percent,則表示查詢該表的前30% 5 * from 表名
模糊查詢:
通配符:_ 表示任意的單個字元
1 例如:select * from 表名 where 列名 like '張_' //表示查詢出 張字開頭,單個任意字元結尾 的數據
% 匹配任意多個字元
1 例如:select * from 表名 where 列名 like '%張%' //表示查詢出 包含張字 的數據
[] 表示範圍內的單個字元
1 例如:select * from 表名 where 列名 like '張[0-9]' //表示查詢出 張開頭,0-9中任意數字結尾 的數據
[^] 不在指定範圍內的單個字元
1 例如:select * from 表名 where 列名 like '[^0-9]' //表示查詢出 不是0-9中任意數字 的單個字元
自定義轉義符:escape
1 例如:select * from 表名 where 列名 like '%/[%' escape '/' //定義/為轉義符,此語句表示查詢出所有包含[的數據
空值判斷:
1 select * from 表名 where 列名 2 is null //判斷為空 3 is not null //判斷部位空
類型轉換函數:cast(表達式 as 數據類型)、convert(數據類型,表達式[,格式])
註:[]表示參數可寫可不寫。
聯合結果集:union,union all
1 例如:select 列名1,列名2 from 表1 2 union all 3 select 列名3,列名4 from 表2 4 註意:聯合的結果集列名預設使用第一個結果集中的列名,每個結果集必須有相同的列數,每一列的數據類型必須相容。 5 區別:union會去除重覆列,所以效率較低。
T-SQL:
聲明變數:
1 declare @name nvarchar(50),@age int = 18
變數賦值:
1 set @name = '張三'
迴圈:
1 while 條件 2 begin 3 .......... 4 end
條件判斷:
1 if 條件 2 begin 3 .... 4 end 5 else 6 begin 7 ... 8 end
事務:
特性ACID:
原子性(Atomicity):事務是一個完整的操作,事務的各個步驟是不可分割的,要麼全部執行,要麼全都不執行。
一致性(Consistency):當事務完成時,數據必須處於一致狀態。
隔離性(Isolation):對數據進行修改的所有併發事務是彼此隔離的。
持久性(Durability):事務完成後,它對資料庫的修改被永久保持。
1 例子: 2 begin transaction //開始一個事務 3 declare @sum int = 0 //聲明一個變數,記錄sql語句出錯次數 4 sql語句1 5 set @sum = @sum + @@error //@@error:如果sql語句沒有錯返回0 6 sql語句2 7 set @sum = @sum + @@error 8 if @sum <> 0 //如果sum不等於0,表示有sql語句出錯 9 begin 10 rollback //回滾 11 end 12 else 13 begin 14 commit //提交該事務 15 end
存儲過程:
執行存儲過程:exec 存儲過程名稱
創建存儲過程:
1 create proc 存儲過程名稱 2 as 3 begin 4 ....... 5 end
創建帶參數的存儲過程及執行:
1 create proc usp_test //創建代參的存儲過程 2 @name nvarchar(50), //定義參數 3 @age int output //定義輸出參數 4 as 5 begin 6 set @age = select 表.age from 表 where 表.name = @name //參數的使用 7 end 8 9 declare @num int //聲明一個變數,傳遞給輸出參數 10 exec usp_test @name = '張三',@age = @num output //執行帶參的存儲過程 11 print @num //輸出變數,即輸出參數的值
例子(存儲過程實現分頁):
1 create proc usp_getPage 2 @pageSize int = 6, //每頁的條數 3 @pageIndex int = 1, //當前要查看第幾頁 4 @pageCount int output, //共多少頁,輸出參數 5 @recordCount int output //共多少條記錄,輸出參數 6 as 7 begin 8 select * 9 from (select * ,rownumber = row_number() over(order by id asc) from 表名) as temp 10 where temp.rownumber between (@pageIndex - 1)*@pageSize + 1 and @pageSize*pageIndex 11 set @recordCount = (select count(*) from 表名) //計算表中記錄 12 set @pageCount = ceiling(@recordCount*1.0/pageSize) //計算頁數,ceiling()向上取整13 end 14
15 declare @rc int,@pc int //用於傳遞給輸出參數 16 exec usp_getPage @pageSize = 6, @pageIndex = 1, @recordCount = @rc output, @pageCount = @pc output //執行帶參數的存儲過程 17 print @rc //列印總記錄條數 18 print @pc //列印總頁數
創建觸發器:
1 create trigger 觸發器名稱 on 表名 2 after insert,delete,update //當進行增加、刪除、修改時觸發 3 as 4 begin 5 ........ 6 end