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