SQL進階文法匯總

來源:互聯網
上載者:User

SQL進階文法匯總
http://hi.baidu.com/vstudycn/blog/item/d34791d8292982e039012fb4.html
CUBE ROLLUP 及COMPUTE關鍵詞
CUBE 關鍵詞是用來將所要進行查詢的各分組欄位內的資料求和的運算。
COMPUTE關鍵字則是用來將分組做小計,也就是說將欄位內進行分組並且將每一組產生一或多個總和 平均值等

範例
select cust_id,SUM(pay1) AS pay11 from pay_list GROUP BY pay1 WITH CUBE
go
以上代碼導致錯誤因為在SUM彙總函數所指定的欄位名稱pay1與CUBE關鍵詞一併使用所導致發生的錯誤訊息
修改
SELECT cust_id,SUM(pay1) as pay11 FROM pay_list GROUP BY cust_id WITH CUBE
GO

ROLLUP關鍵詞
將GROUP BY後面所加的第一個欄位名稱來求和而其他的欄位並不做
ROLLUP以及CUBE關鍵詞二者之間不同的地方就是ROLLUP只會將GROUP BY後面的第一個欄位名稱求總和而CUBE則會將每一個欄位都求總和的操作

範例
SELECT 廠商編號,產品名稱,SUM(數量) AS 總數量 FROM proced GROUP BY 廠商編號,產品名稱 WITH ROLLUP
GO
COMPUTE關鍵詞
用來將分組小計也就是在欄位內進行分組,並且將每一組產生一或多個總和 平均值等
範例
select 廠商編號,產品名稱,數量 from proced compute sum(數量)
go

以廠商編號作為分類根據時
select 廠商編號,產品名稱,數量 from proced order by 廠商編號 COMPUTE SUM(數量) BY 廠商編號
go

RETURN 語句
將目前正在執行的批處理T-SQL語句,退出程式或語句中斷,並返回或不返回數值。
當RETURN語句與預存程序一起使用時,其RETURN並不會返回一個NULL值。但當某程式嘗試返回NULL值時,則會產生警告訊息,接著會返回一個為0的數值。

文法聲明
return [integer_expression]
integer_expression指要返回的整數值

範例
--return的使用範例
create procedurecheck_maxdata
as
if(select state from authors where au_id='123-34-45')
return 1
else
return 2
WAITFOR語句
WAITFOR語句是用來指定觸發語句組,預存程序或事物執行的時間,時間間隔或事件。執行WAITFOR語句之後,必須等到指定的時間或指定的事件發生後,才能使用到SQL Server 的串連。
如果 想知道目前誰在使用或等待時,可以使用系統預存程序sp_who來瞭解。

聲明文法
WAITFOR{DELAY 'time'|TIME 'time'}
參數說明
DELAY用來設定要SQL Server必須要等待所到指定的時數已淘汰,才可以使用SQL Server的串連
time 用來指定要等待的時間
只能指定時間而不能設定日期。其等待時間的設定最多可指定到24小時。

TIME用來指示SQL Server等待到所指定的時間。

範例
--此範例會在下午6:00時會執行select_data 預存程序
begin
waitfor TIME '18:00'
EXEC select_data
end

begin
waitfor TIME '15:20'
print 'ninhao'
end

範例
--WAITFOR DELAY的使用範例
use pubs
go
--設定要sql server 等待一分鐘再執行下列語句
waitfor delay '00:01:00'
select * from authors
go
CASE
根據條件列表之後來執行運算式,其CASE可分為兩種格式:
1 一種格式是屬於簡單的CASE格式,這種CASE會比較運算式與一組簡單運算式,以便決定結果。
2 另一種格式是屬於搜尋的CASE格式,這種格式會評估一組布林運算式,以便決定其結果。

簡單CASE聲明
CASE input_expression
WHEN when_expression THEN result_expression
[..n]
[
ELSE else_result_expression
END

如果想使用搜尋CASE格式時,可以根據下面的文法來進行聲明
CASE
WHEN Boolean_expression THEN result_expression
[..n]
[
ELSE else_result_expression
END

RAISERROR 陳述式
RAISERROR語句會返回使用者所自訂的錯誤訊息,並且設定系統旗標,記錄曾發生過的錯誤。
使用RAISERROR指定使用者自訂的錯誤訊息時,請使用大於50,000的錯誤訊息代碼和0至18的重要性層級。

使用系統預存程序sp_addmessage來建立自訂的錯誤訊息

RAISERROR語句其文法聲明

使用RAISERROR語句來建立並返回使用者自訂的錯誤資訊時,請使用sp_addmessage來添加使用者自訂的錯誤訊息,並使用sp_dropmessage來刪除使用者自訂的錯誤訊息。
發生錯誤時,錯誤碼會放置在@@ERROR函數中,此函數存放著最近產生的錯誤碼。

範例
--使用RAISERROR的範例
--使用sp_addmessage來建立自訂錯誤訊息,其中76548是指錯誤碼,9是代表嚴重程度,而"錯誤訊息測試"則是代表訊息內容
EXEC sp_addmessage 76548,9,'錯誤訊息測試'
GO
RAISERROR(76548,9,1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.