SQL Server常用關(guān)鍵字與功能詳解
1. 控制流關(guān)鍵字
控制流關(guān)鍵字用于控制 SQL 腳本的執(zhí)行邏輯,包括條件判斷和循環(huán)等操作。
1.1 IF 和 ELSE
- 用于條件判斷并執(zhí)行不同的分支。
IF EXISTS (SELECT 1 FROM Users WHERE UserID = 1)
PRINT 'User exists'
ELSE
PRINT 'User does not exist'
1.2 IIF
- 三元操作符,類(lèi)似于
CASE WHEN,用于簡(jiǎn)單的條件判斷。
SELECT IIF(Age >= 18, 'Adult', 'Minor') AS AgeGroup FROM Users
1.3 CASE
- 用于多條件分支選擇。
SELECT
CASE
WHEN Age >= 18 THEN 'Adult'
ELSE 'Minor'
END AS AgeGroup
FROM Users
1.4 BEGIN 和 END
- 用于定義一個(gè)邏輯代碼塊。
BEGIN
PRINT 'Start of block'
SELECT * FROM Users
END
1.5 WHILE
- 用于循環(huán)操作。
DECLARE @Counter INT = 0
WHILE @Counter < 5
BEGIN
PRINT @Counter
SET @Counter = @Counter + 1
END
2. 數(shù)據(jù)操作關(guān)鍵字
這些關(guān)鍵字主要用于對(duì)數(shù)據(jù)進(jìn)行增刪改查操作。
2.1 SELECT
- 用于查詢(xún)數(shù)據(jù)。
SELECT * FROM Users
2.2 INSERT
- 用于插入數(shù)據(jù)。
INSERT INTO Users (UserID, UserName) VALUES (1, 'John')
2.3 UPDATE
- 用于更新數(shù)據(jù)。
UPDATE Users SET UserName = 'Jane' WHERE UserID = 1
2.4 DELETE
- 用于刪除數(shù)據(jù)。
DELETE FROM Users WHERE UserID = 1
2.5 MERGE
- 用于合并數(shù)據(jù)(插入、更新或刪除)。
MERGE INTO TargetTable AS Target
USING SourceTable AS Source
ON Target.ID = Source.ID
WHEN MATCHED THEN
UPDATE SET Target.Name = Source.Name
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID, Name) VALUES (Source.ID, Source.Name)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
3. 數(shù)據(jù)處理函數(shù)
SQL Server 提供了豐富的內(nèi)置函數(shù),用于處理數(shù)據(jù)。
3.1 字符串函數(shù)
RTRIM和LTRIM: 去除字符串右側(cè)或左側(cè)的空格。
SELECT RTRIM('Hello ') AS Trimmed
STUFF: 替換字符串中指定位置的子字符串。
SELECT STUFF('abcdef', 2, 3, '123') AS Result -- 輸出: a123ef
LEN: 返回字符串的長(zhǎng)度。
SELECT LEN('Hello') AS StringLength
3.2 數(shù)學(xué)函數(shù)
ABS: 返回絕對(duì)值。ROUND: 四舍五入。POWER: 計(jì)算冪次方。
SELECT POWER(2, 3) AS Result -- 輸出: 8
3.3 日期函數(shù)
GETDATE: 返回當(dāng)前系統(tǒng)時(shí)間。DATEADD: 在日期上加上指定的時(shí)間間隔。
SELECT DATEADD(DAY, 1, '2024-01-01') AS NextDay
DATEDIFF: 計(jì)算兩個(gè)日期之間的差異。
SELECT DATEDIFF(DAY, '2024-01-01', '2024-01-10') AS DaysDifference
4. 窗口函數(shù)關(guān)鍵字
窗口函數(shù)用于在查詢(xún)中執(zhí)行分組或排序相關(guān)的操作。
4.1 OVER
- 配合聚合函數(shù)使用,為每一行提供額外的計(jì)算結(jié)果。
SELECT Name, Salary, RANK() OVER (ORDER BY Salary DESC) AS Rank FROM Employees
4.2 PARTITION BY
- 用于分組,配合
OVER使用。
SELECT Name, Department, RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS Rank FROM Employees
5. 臨時(shí)表關(guān)鍵字
5.1 TEMPDB
- 系統(tǒng)數(shù)據(jù)庫(kù),用于存儲(chǔ)臨時(shí)表和對(duì)象。
5.2 # 和 ##
#: 創(chuàng)建本地臨時(shí)表。##: 創(chuàng)建全局臨時(shí)表。
CREATE TABLE #TempTable (ID INT, Name NVARCHAR(50)) INSERT INTO #TempTable VALUES (1, 'John') SELECT * FROM #TempTable
6. 事務(wù)管理關(guān)鍵字
用于管理數(shù)據(jù)操作的事務(wù)性。
6.1 BEGIN TRAN 和 COMMIT
- 用于開(kāi)啟和提交事務(wù)。
BEGIN TRAN UPDATE Users SET Name = 'NewName' WHERE ID = 1 COMMIT
6.2 ROLLBACK
- 用于回滾事務(wù)。
BEGIN TRAN UPDATE Users SET Name = 'NewName' WHERE ID = 1 ROLLBACK
7. 安全與權(quán)限管理關(guān)鍵字
7.1 GRANT 和 REVOKE
- 用于分配和撤銷(xiāo)權(quán)限。
GRANT SELECT ON Users TO UserRole REVOKE SELECT ON Users FROM UserRole
7.2 DENY
- 用于顯式禁止權(quán)限。
DENY SELECT ON Users TO UserRole
8. 高級(jí)關(guān)鍵字
8.1 WITH (NOLOCK)
- 用于減少鎖的開(kāi)銷(xiāo),允許讀取未提交的數(shù)據(jù)。
SELECT * FROM Users WITH (NOLOCK)
8.2 FOR XML PATH
- 用于將結(jié)果集轉(zhuǎn)換為 XML 格式。
SELECT Name FROM Users FOR XML PATH('User')
8.3 CROSS APPLY 和 OUTER APPLY
- 用于將表值函數(shù)應(yīng)用到每一行數(shù)據(jù)。
SELECT * FROM Users u CROSS APPLY dbo.GetDetails(u.ID)
總結(jié)
SQL Server 的關(guān)鍵字涵蓋了數(shù)據(jù)操作、查詢(xún)優(yōu)化、數(shù)據(jù)處理、事務(wù)管理等方方面面。在實(shí)際開(kāi)發(fā)中,靈活運(yùn)用這些關(guān)鍵字和函數(shù),可以高效地完成各種復(fù)雜的數(shù)據(jù)操作。
建議
- 多用關(guān)鍵字組合優(yōu)化查詢(xún)。
- 注意
WITH (NOLOCK)和事務(wù)的使用,避免不一致的數(shù)據(jù)問(wèn)題。 - 使用窗口函數(shù)簡(jiǎn)化復(fù)雜的分組計(jì)算。
以上就是SQL Server常用關(guān)鍵字與功能詳解的詳細(xì)內(nèi)容,更多關(guān)于SQL Server關(guān)鍵字與功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SQL Server安裝完成后3個(gè)需要立即修改的配置選項(xiàng)
SQL Server里你總要去改變的3個(gè)配置選項(xiàng),大家知道是哪三個(gè)嗎?想要知道答案的朋友就仔細(xì)閱讀下文2015-08-08
SQL Server 2016 查詢(xún)存儲(chǔ)性能優(yōu)化小結(jié)
SQL Server 2016已經(jīng)發(fā)布了有半年多,相信還有很多小伙伴還沒(méi)有開(kāi)始使用,今天我們來(lái)談?wù)凷QL Server 2016 查詢(xún)存儲(chǔ)性能優(yōu)化,希望大家能夠喜歡2016-01-01
SqlServer數(shù)據(jù)庫(kù)中文亂碼問(wèn)題解決方法
SQL版的亂碼問(wèn)題還是出現(xiàn)在SQL SERVER的安裝設(shè)置上。默認(rèn)安裝時(shí)系統(tǒng)默認(rèn)的排序規(guī)則是拉丁文的排序規(guī)則,但一般人在安裝時(shí)沒(méi)有考慮到這一點(diǎn),安裝時(shí)只是點(diǎn)取下一步,安裝完成后,造成了SQL版在使用過(guò)程中出現(xiàn)亂碼2020-03-03
根據(jù)表名和索引獲取需要的列名的存儲(chǔ)過(guò)程
根據(jù)表名和索引獲取需要的列名的存儲(chǔ)過(guò)程,需要的朋友可以參考下。2011-09-09
sqlserver中在指定數(shù)據(jù)庫(kù)的所有表的所有列中搜索給定的值
最近因ERP項(xiàng)目,我們需要知道前臺(tái)數(shù)據(jù)導(dǎo)入功能Application操作的導(dǎo)入字段都寫(xiě)入到了后臺(tái)數(shù)據(jù)庫(kù)哪些表的哪些列2011-09-09
SQL Server存儲(chǔ)過(guò)程入門(mén)學(xué)習(xí)
存儲(chǔ)過(guò)程(Stored Procedure),是一組為了完成特定功能的SQL 語(yǔ)句,集經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù),如果該存儲(chǔ)過(guò)程帶有參數(shù)來(lái)執(zhí)行2013-08-08
SQL Server Alwayson創(chuàng)建代理作業(yè)的注意事項(xiàng)詳解
在工作中有時(shí)為了避免數(shù)據(jù)庫(kù)增長(zhǎng)太大所以需要定時(shí)來(lái)刪除某段時(shí)間前的數(shù)據(jù),所以使用代理作業(yè)的方式來(lái)實(shí)現(xiàn)定時(shí)刪除的功能,下面這篇文章主要給大家介紹了關(guān)于SQL Server Alwayson創(chuàng)建代理作業(yè)的注意事項(xiàng),需要的朋友可以參考下。2017-09-09
SQL Server中將查詢(xún)結(jié)果轉(zhuǎn)換為Json格式腳本分享
這篇文章主要介紹了SQL Server中將查詢(xún)結(jié)果轉(zhuǎn)換為Json格式腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-02-02

