您好,登錄后才能下訂單哦!
小生博客:http://xsboke.blog.51cto.com
-------謝謝您的參考,如有疑問,歡迎交流
一、T-SQL語言組成
T-SQL主要有三種語言組成:
1. DML:數據操縱語言(data manipulation language)
查詢、插入、刪除和修改數據
SELECT、INSERT、UPDATE、DELETE
2. DDL:數據定義語言(data definition language)
建立數據庫、數據庫對象和定義其列
CREATE(新建數據庫或者表)、ALTER(增加數據表中的列)、DROP(刪除數據庫或表)
3. DCL:數據控制語言(data control language)
控制數據庫組件的存取許可、存取權限等
GRANT(授予權限)、REVOKE(回收權限)、DENY(拒絕)
二、SELECT語法結構
1. select語句的語法。
SELECT select_list
[INTO new_table_name]
FROM table_name
[ WHERE search_conditions ]
[GROUP BY group_by_expression] [HAVING search_conditions]
[ORDER BY order_expression [ASC|DESC] ]
參數解釋:
SELECT子句:指定查詢內容
INTO子句:把查詢結果存放到一個新表中
FROM子句:指定查詢源
WHERE子句:查詢條件
GROUP BY子句:指定查詢結果的分組條件
HAVING子句:指定分組后在執行的條件,與GROUP BY子句一起使用,和where的功能一樣,但是分組后的條件不能使用where只能使用having
ORDER BY子句:指定查詢結果的排序方式,默認是升序asc,降序是desc。
2. 表達式,一般用于設置條件時。
1)條件表達式
①常量:表示單個指定數據值的字母、數字或符號
②列名:表中列的名稱
③一元運算符:僅有一個操作數的運算符:“+”表示正數,“-”表示負數
④二元運算符:將兩個操作數組合執行操作的運算符:算術運算符、位運算符、邏輯運算符、比較運算符
2)邏輯表達式
用邏輯運算符將條件連接起來,運算結果是一個邏輯值:TRUE(真)或FALSE(假)
關鍵字“in”可以用來限制范圍,
例:限制付款時可以使用的信用卡種類
付款方式=‘信用卡’ and 信用卡 in (‘牡丹卡’,‘金穗卡’,‘龍卡’,‘陽光卡’)
3. as的用法(as就是給某個輸出結果的列名設置別名,然后輸出時列名用別名顯示)
優點是可以事查詢結果更人性化顯示,比如把英文的列名輸出成為中文的列名。
例:查詢表student中所有學員的平均分
1) 不加as時
Select AVG(成績)
From student
2) 加as時
Select AVG(成績) as 平均成績
From student
4. Like的用法(用于不完全匹配的條件)
例:查詢出表student中姓張的學員
5. In的用法(限制范圍)
例:查詢出student表中成績為89、90、91的學生。
6. Top的用法(限制查詢返回值的行數)
例:查詢student表中的前五行的學員
7. 函數count的用法(統計行)
例:查詢出表中每種職位的總人數
三、多表查詢
1. 表的連接類型
1)內連接(INNER JOIN)
只返回兩個數據集合之間完全匹配關系的行
2)外連接(左右外連接其實差不多,記住一個即可)
①左外連接(LEFT JOIN/leftouter join)
結果集包括左表的所有行
②右外連接(RIGHT JOIN/rightouter join)
結果集包括右表的所有行
③完整外連接(FULL JOIN/fullouter join)
返回左表和右表中的所有行
3)交叉連接(cross join,一般不用)
返回左表與右表挨個連接的所有行
2. 內連接:只返回兩個表中完全匹配的行
例:在表A和表B中使用內連接查詢學生姓名和職業(兩個表中存在的姓名是不完全一樣的)
1) 方法1:結果顯示如下圖
select A.name,a.school,b.job
from A,B
where a.name=b.name
2) 方法2:結果顯示如下圖
select A.name,a.school,b.job
from A innerjoin B
on A.name=b.name
3. 外連接
1) 左外連接
例:在表A和表B中用左外連接查詢學生姓名、學校和職業
2) 右外連接
例:在表A和表B中用左外連接查詢學生姓名、學校和職業
3) 完整外連接:不再舉例,完整外連接將只顯示兩張表中完全匹配的內容
4. 事務(如果執行的語句中有一條錯誤,此語句將不執行,并數據恢復語句執行前)
1) 事務簡介
① 概念
事務是一個不可分割的工作邏輯單元,包括一組命令,這組命令要么都執行,要么都不執行。
② 屬性
原子性:事務是一個完整的操作。事務的各元素是不可分的。
一致性:當事務完成時,數據必須處于一致狀態。
隔離性:事務是獨立的,它不以任何方式依賴于或影響其他事務。
持久性:一旦事務被提交,事務的效果會被永久的保留在數據庫中。
2) 執行事務的語法
①開始事務:BEGIN TRANSACTION
②提交事務:COMMITTRANSACTION
③回滾(撤銷)事務:ROLLBACKTRANSACTION
3) 例:
張三卡中余額只有1000,李四向張三借1000,但是銀行限制余額最少為1,這時就需要使用事務,否則結果將導致張三的余額不變,而李四的余額多了1000.
select *from bank
updatebank set 余額=余額-1000
where 賬戶='張三'
updatebank set 余額=余額+1000
where 賬戶='李四'
print '查看轉帳事務前的余額'
select *from bank
/*--開始事務(指定事務從此處開始,后續的T-SQL語句都是一個整體--*/
begintransaction
/*--定義變量,用于累計事務執行過程中的錯誤--*/
declare@errorsum int --聲明變量,用于保存所有T-SQL語句錯誤號的和
set@errorsum=0
/*--轉帳:張三的帳戶少1000元,李四的帳戶多1000元--*/
updatebank set 余額=余額-1000
where 賬戶='張三'
set@errorsum=@errorsum+@@ERROR --累計是否有錯誤
updatebank set 余額=余額+1000
where 賬戶='李四'
set@errorsum=@errorsum+@@ERROR --累計是否有錯誤
print '查看轉帳事務過程中的余額'
select *from bank
/*--根據是否有錯誤,確定事務是提交還是撤銷--*/
if@errorsum<>0 --如果有錯誤
begin
print '交易失敗,回滾事務'
rollbacktransaction
end
else
begin
print '交易成功,提交事務,寫入磁盤,永久地保存'
committransaction
end
go
print '查看轉帳事務后的余額'
select *from bank
go
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。