Transact-SQL語法速查手冊

Transact-SQL語法速查手冊
第1章          Transact-SQL基礎
1.1 標識符
一、常規標識符
1.        命名規則:
l          第一個字母必須是Unicode2.0標準定義的字母、下劃線、at符號(@)和數字符號(#);
l          後續字符可以是Unicode2.0標準定義的字母、來自基本拉丁字母或其他國家/地區腳本的十進制數字、at符號(@)、美元符號($)、數字符號(#)或下劃線;
l          標識符不能是Transact-SQL的保留字;
l          不允許嵌入空格或其他特殊字符;
l          標識符長度不大於128字符,本地臨時表標識符不大於116字符。
注:SQL Server2000中,常規標識符的格式規則取決於數據庫的兼容級別,兼容級別可以用系統存儲過程sp_dbcmptlevel來設置。以上是兼容級別爲80時的規則。
2.        特殊字符說明
以下字符位於標識符開始位置時具有特殊意義:
l          以@符號開始的標識符表示局部變量或參數;
l          以@@符號開始的標識符表示全局變量;
l          以#符號開始的標識符表示臨時表或過程;
l          以##符號開始的標識符表示全局臨時對象;
l          --單行註釋;
l          /*…*/多行註釋。(多行註釋不能跨越批處理)
二、分隔標識符
1. 命名規則:
l          標識符長度不大於128字符(不包括分隔符字符),本地臨時表標識符不大於116字符;
l          標識符的主體可以是包含當前代碼頁內字母(分隔符本身除外)的任意組合。
2. 分隔標識符類型:
l          被引用的標識符用雙引號分隔開,例如SELECT * FROM “My Table”;
l          括在括號中的標識符用方括號分隔,例如SELECT * FROM [My Table]。
三、使用標識符
在SQL Server2000中,一個對象的全稱語法格式爲:
server.database.owner.object
其中,server爲服務器名,database爲數據庫名,owner爲所有者,object爲對象名。默認情況下,server爲本地服務器,database爲當前數據庫,owner爲在指定的數據庫中與當前連接會話的登陸標識相對應的數據庫用戶或者數據庫所有者。
四、通配符
1.        %—包含零個或更多字符的任意字符串
例如:查找姓名中包含有“華”字的所有學生
WHERE sname LIKE ‘%華%’
2.        _—任何單個字符
例如:查找姓王,名字包含3個字的學生
WHERE sname LIKE ‘王__’
3.        [] —指定範圍或集合中的任何單個字符
例如:查找姓劉和姓王,名字包含3個字的學生
WHERE sname LIKE ‘[劉,王]__’
4.        [^]—不屬於指定範圍或集合的任何單個字符
例如:查找除姓劉和姓王以外,名字包含3個字的學生其他學生
WHERE sname LIKE ‘[^劉,王]__’
五、系統全局變量
變量名稱 說明
@@CONNECTIONS 返回自SQL Server本次啓動以來,所接受的連接或試圖連接的次數
@@CPU_BUSY 返回自SQL Server本次啓動以來,CPU工作的時間,單位爲毫秒
@@CURSOR_ROWS 返回遊標打開後,遊標中的行數
@@DATEFIRST 返回SET DATAFIRST參數的當前值
@@DBTS 返回當前數據庫的當前timestamp數據類型的值
@@ERROR 返回上次執行SQL語句產生的錯誤編號
@@FETCH_STATUS 返回FETCH語句遊標的狀態
@@IDENTITY 返回最新插入的IDENTITY列值
@@IDLE 返回自SQL Server本次啓動以來,CPU空閒的時間,單位爲毫秒
@@IO_BUSY 返回自SQL Server本次啓動以來,CPU處理輸入和輸出操作的時間,單位爲毫秒
@@LANGID 返回本地當前使用的語言標識符
@@LANGUAGE 返回當前使用的語言名稱
@@LOCK_TIMEOUT 返回當前的鎖定超時設置,單位爲毫秒
@@MAX_CONNECTIONS 返回SQL Server允許同時連接的最大用戶數目
@@MAX PRECISION 返回當前服務器設置的decimal和numeric數據類型使用的精度
@@NESTLEVEL 返回當前存儲過程的嵌套層數
@@OPTIONS 返回當前SET選項信息
@@PACK_RECEIVED 返回自SQL Server本次啓動以來,通過網絡讀取的輸入數據包數目
@@PACK_SENT 返回自SQL Server本次啓動以來,通過網絡發送的輸出數據包數目
@@PACKET_ERRORS 返回自SQL Server本次啓動以來,SQL Server中出現的網絡數據包的錯誤數據
@@PROCID 返回當前的存儲過程標識符
@@REMSERVER 返回註冊記錄中顯示的遠程數據服務器名稱
@@ROWCOUNT 返回上一個語句所處理的行數
@@SERVERNAME 返回運行SQL Server的本地服務器名稱
@@SERVICENAME 返回SQL Server運行時註冊鍵名稱
@@SPID 返回服務器處理標識符
@@TEXTSIZE 返回當前TESTSIZE選項的設置值
@@TIMETICKS 返回一個計時單位的微秒數,操作系統的一個計時單位是31.25毫秒
@@TOTAL_ERRORS 返回自SQL Server本次啓動以來,磁盤的讀寫錯誤次數
@@TOTAL_READ 返回自SQL Server本次啓動以來,讀磁盤的次數
@@TOTAL_WRITE 返回自SQL Server本次啓動以來,寫磁盤的次數
@@TRANCOUNT 返回當前連接的有效事務數
@@VERSION 返回當前SQL Server服務器的日期,版本和處理器類型

 
1.2 數據類型
類別 數據類型 字節 取值範圍 精度
整數型 bigint 8    
int 4    
smallint 2    
tinyint 1 0~255  
邏輯數值型 bit   1,0或NULL  
小數數據型 decimal      
numeric      
貨幣型 money 8   4
smallmoney 4   4
近似數值型 float 4   7
real 8   15
字符型 char 1~8000    
varchar      
text      
Unicode字符型 nchar 1~8000    
nvarchar      
ntext      
二進制數據 binary 1~8000    
varbinary 1~8000    
image      
日期時間型 datetime      
smalldatetime      
其他類型 cursor      
sal_variant      
table      
timestamp      
uniqueidentifier      

1.3 運算符
SQL Server中的運算夫及其優先級如下所示(優先級由高到低)
l          +(正)、-(負)、~(按位取反)
l          *(乘)、/(除)、%(取模,及求餘)
l          +(加)、+(連接)、-(減)
l          =、>、<、>=、<=、<>、!= 、!< 、!>
l          ^(位異或)、&(位與)、|(位或)
l          NOT
l          AND
l          ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
l          =(賦值)
注:所有運算符均遵循左結合型,即同一表達式中若出現多個優先級相同的運算符時,將按從左到右的順序對表達式進行求值
1.4 語句
一、BEGIN…END
1.【格式】
BEGIN
{
         sql語句|語句塊
}
END
2.【示例】
BEGIN
         DECLARE @MyVar float
         SET @MyVar = 456.256
         BEGIN
                   PRINT CAST (@MyVar AS varchar(12))
         END
END
二、IF…ELSE
1.【格式】
IF Boolean_expression
         {sql語句|語句塊}
[ELSE
         {sql語句|語句塊}]
2.【示例】
USE School
IF (SELECT AVG(degree) FROM score WHERE cno=’3-105’)>80
BEGIN
                   PRINT ‘課程:3-105’
                   PRINT ‘考試成績還不錯’
END
ELSE
BEGIN
         PRINT ‘課程:3-105’
         PRINT ‘考試成績一般’
         END
三、CASE
1.【簡單CASE格式】
CASE input_expression
WHEN when_expression THEN result_expression
[…n]
         [ELSE else_result_expression]
END
2.【簡單CASE示例】
USE School
GO
SELECT tname AS ‘姓名’,depart AS ‘單位’,
         CASE prof
                   WHEN ‘教授’ THEN ‘高級職稱’
                   WHEN ‘副教授’ THEN ‘高級職稱’
                   WHEN ‘講師’ THEN ‘中級職稱’
                   WHEN ‘助教’ THEN ‘初級職稱’
         END AS ‘職稱類型’
FROM teacher
GO
3.【搜索CASE格式】
CASE
WHEN Boolean_expression THEN result_expression
[…n]
         [ELSE else_result_expression]
END
4.【搜索CASE示例】
USE School
GO
SELECT sno AS ‘學號’,cno AS ‘課程號’,
         CASE
                   WHEN degree>=90 THEN ‘A’
                   WHEN degree>=80 THEN ‘B’
                   WHEN degree>=70 THEN ‘C’
                   WHEN degree>=60 THEN ‘D’
                   WHEN degree<60 THEN ‘E’
         END AS ‘成績’
FROM score ORDER BY sno
GO
四、WHILE
1.【格式】
WHILE Boolean_expression
{sql語句|語句塊}
[BREAK]
{sql語句|語句塊}
[CONTINUE]
2.【示例】
DECLARE @s int,@i int
SET @i = 0
SET @s = 0
WHILE @i<=100
         BEGIN
                   SET @s = @s+@i
                   SET @i = @i+1
         END
PRINT ‘1+2+…+100=’+CAST(@s AS char(25))
五、GOTO
1.【格式】
GOTO lable
2.【示例】
DECLARE @avg float
USE School
If(SELECT COUNT(*) FROM score WHERE sno=’108’)=0
         GOTO label1
BEGIN
         PRINT ‘108學號學生的平均成績:’
         SELECT @avg=AVG(degree) FROM score WHERE sno=’108’
         PRINT @avg
         RETURN
END
Label1:
         PRINT ‘108學號的學生無成績’
六、RETURN
1.【格式】
RETURN [integer_expression]
2.【示例】
USE School
GO
CREATE PROC MyPro @no char(5)
AS RETURN(SELECT AVG(degree)FROM score WHERE sno=@no)
七、WAITFOR
1.【格式】
WAITFOR {DELAY ‘time’ | TIME ‘time’}
2.【示例】
BEGIN
         WAITFOR TIME ‘1:10:00’
         PRINT ‘現在是1:10:00’
END
1.5 函數
一、內置函數
函數分類 函數 說明
聚合函數 COUNT  
SUM  
AVG  
MIN  
MAX  
配置函數    
遊標函數    
日期和時間函數 DAY  
MONTH  
YEAR  
GETDATE  
數學函數    
元數據函數    
行集函數    
安全性函數    
字符串函數    
系統函數    
系統統計函數    
文本和圖像函數    

二、用戶自定義函數
1.【格式】
 
2.【示例】
USE test
GO
CREATE FUNCTION CubicVolume
--輸入參數
(@CubeLength decimal(4,1),@CubeWidth decimal(4,1),@CubeHeight decimal(4,1))
RETURNS decimal(12,3)   --返回立方體的體積
AS
         BEGIN
                  RETURN(@CubeLength*@CubeWidth*CubeHeight)
         END
GO


第2章          Transact-SQL 語句
2.1 Transact-SQL語句一覽表
語句類型 語句 說明
數據查詢語言DQL SELECT 從數據庫表中檢索數據和列
數據操作語言DML INSERT 向數據庫表中添加新數據行
UPDATE 更新數據庫表中的數據
DELETE 從數據庫表中刪除數據行
數據定義語言DDL CREATE DATABASE 創建數據庫
ALTER DATABASE 修改數據庫
DROP DATABASE 刪除數據庫
CREATE TABLE 創建數據庫表
ALTER TABLE 修改數據庫表結構
DROP TABLE 從數據庫中刪除表
CREATE VIEW 創建視圖
ALTER VIEW 修改視圖
DROP VIEW 從數據庫中刪除試圖
CREATE INDEX 創建索引
DROP INDEX 刪除索引
CREATE PROCEDURE 創建存儲過程
DROP PROCEDURE 刪除存儲過程
CREATE TRIGGER 創建觸發器
DROP TRIGGER 刪除觸發器
CREATE SCHEMA 添加模式
DROP SCHEMA 刪除模式
CREATE DOMAIN 創建數據值域
ALTER DOMAIN 改變域定義
DROP DOMAIN 刪除域
數據控制語言DCL CRANT 授予用戶訪問權限
DENY 拒絕用戶訪問
REVOKE 解除用戶訪問權限
事務控制 COMMIT 結束當前事務
ROLLBACK 終止當前事務
SET TRANSACTION 定義當前事務數據訪問特徵
程序化SQL DECLARE 爲查詢設定遊標
EXPLAN 爲查詢描述數據訪問計劃
OPEN 檢索查詢結果打開一個遊標
FETCH 檢索一行查詢結果
CLOSE 關閉遊標
PREPARE 爲動態執行準備SQL語句
EXECUTE 動態執行SQL語句
DESCRIBE 描述準備好的查詢

2.2 數據查詢語言DQL
一、SELECT
1.【格式】
SELECT 列名錶
[INTO 新表名]
FROM 表或視圖名
[WHERE 查詢限定條件]
[GROUP BY 分組表達式]
[HAVING 分組條件]
[ORDER BY 次序表達式]
2.【示例】查詢score表中至少有5名學生選修的並以3開頭的課程號的平均分數。
SELECT cno,AVG(degree) AS ‘平均分’
FROM score
WHERE cno LIKE ‘3%’
GROUP BY cno
HAVING COUNT(*)>5
注:SQL的執行順序是:
①執行WHERE子句,從表中選取行;
②由GROUP BY對選區的行進行分組;
③執行聚合函數;
④執行HAVING子句選區滿足條件的分組(HAVING子句聚合函數的作用域爲每一分組)。
2.3 數據操作語言
一、INSERT
1.【格式】
INSERT INTO <table_name>
[(<column_name>[{,<column_name>}…])]
VALUES(<value>[{,<value>}…])
注:“<>”爲必選項,“[]”爲可選項,“{}”爲可重複出現項。
2.【示例】
INSERT INTO score
(sno,cno,score)
VALUES(1001,254,’95’)
二、UPDATE
1.【格式】
UPDATE<table_name>
SET<set clause expression>[{,< set clause expression >}…]
[WHERE <search_condition>]
注:“<>”爲必選項,“[]”爲可選項,“{}”爲可重複出現項。
2.【示例】
UPDATE 商品信息
SET 產地=
(SELECT 供應商所在城市
FROM 供應商信息
WHERE 供應商名稱=’南方電訊’),
備註=’貨億到’
WHERE 產地=’上海市’
三、DELETE
1.【格式】
DELETE FROM<table_name>
[WHERE <search_condition>]
注:“<>”爲必選項,“[]”爲可選項,“{}”爲可重複出現項。
2.【示例】
DELETE FROM 業務員信息
WHERE 業務員姓名 LIKE ‘黃__’
2.4 數據定義語言
一、CREATE DATABASE
1.【格式】
CREATE DATABASE database_name
[
[ON [filespec]]
[ LOG ON [filespec]]
]
filespec定義爲
([NAME=logical_file_name,]
FILENAME=’os_file_name’
[,SIZE=size]
[,MAXSIZE={max_size | UNLIMITED}]
[,FILEGROWTH=growth_increment])
2.【示例】
CREATE DATABASE School
ON
(NAME= School,
FILENAME='d:/Program Files/Microsoft SQL Server/MSSQL/Data/ School_Data.mdf',
SIZE=50MB,
MAXSIZE=2000,
FILEGROWTH=20)
LOG ON
(NAME= School_Log,
FILENAME='d:/Program Files/Microsoft SQL Server/MSSQL/Data/ School_Log.ldf',
SIZE=50MB,
MAXSIZE=2000,
FILEGROWTH=20)
二、ALTER DATABASE
1.【格式】
ALTER DATABASE database_name
{ ADD FILE filespec
| ADD LOG FILE filespec
| REMOVE FILE logical_file_name
| MODIFY FILE filespec
| MODIFY NAME=new_dbname
}
filespec定義爲
([NAME=logical_file_name,]
FILENAME=’os_file_name’
[,SIZE=size]
[,MAXSIZE={max_size | UNLIMITED}]
[,FILEGROWTH=growth_increment])
2.【示例】
 
三、DROP DATABASE
1.【格式】
DROP DATABASE database_name
2.【示例】
DROP DATABASE School
四、CREATE TABLE
1.【格式】
CREATE TABLE table_name
(
         column_name1 data_type [NULL | NOT NULL] [PRIMARY | UNIQUE][FOREIGN KEY [(column_name)]] REFERENCES ref_table [(ref_column)]
         [column_name2 data_type…]
         …
)
2.【示例】
CREATE TABLE book (
         bid int NOT NULL PRIMARY KEY,
         bname char(8) NOT NULL,
         authorid int FOREIGN KEY REFERENCES authors(authorid)
)
五、ALTER TABLE
1.【格式】
ALTER TABLE table_name
ADD [column_name data_type]
         [PRIMARY KEY | CONSTRAIN]
         [FOREIGN KEY (column_name)
         REFERENCES ref_table(ref_column)]
DROP [CONSTRAINT] constraint_name | COLUMN column_name
2.【示例】
ALTER TABLE book ADD price int
六、DROP TABLE
1.【格式】
DROP TABLE table_name
2.【示例】
DROP TABLE book
七、CARETE VIEW
1.【格式】
CREATE VIEW [database_name.][owner.]view_name [(column [,…n])]
[WITH view_attribute [,…n]]
AS
Select_statement
[WITH CHECK OPTION]
view_attribute定義爲:
{ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
2.【示例】
USE School
GO
CREATE VIEW st2_degree
AS
SELECT student.sname AS ‘姓名’,course.cname AS ‘課程’,score.degree AS ‘成績’
FROM student,course,score
WHERE student.sno=score.sno AND course.cno=score.cno
GO
八、ALTER VIEW
1.【格式】
ALTER VIEW [database_name.][owner.]view_name [(column [,…n])]
[WITH view_attribute [,…n]]
AS
select_statement
[WITH CHECK OPTION]
view_attribute定義爲:
{ENCRYPTION | SCHEMABINDING | VIEW_METADATA}
2.【示例】
ALTER VIEW 珠寶信息_VIEW(商品名稱,單價)
AS
SELECT 名稱編號,單價
FROM 商品信息
WHERE 單價>1000
九、DROP VIEW
1.【格式】
DROP VIEW {view_name} [,…n]
2.【示例】
USE test
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS _
                            WHERE TABLE_NAME=’View1’)
DROP VIEW View1
GO
十、CREATE INDEX
1.【格式】
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name
ON {table_name | ivew_name} (column [ASC | DESC][,…n])
[WITH index_option [,…n]]
[ON filegroup]
index_option定義爲
{ PAD_INDEX | FILLFACTOR=fillfactor | IGNORE_DUP_KEY | DROP_EXISTING | STATISTICS_NORECOMPUTE | SORT_IN_TEMPDB}
2.【示例】
USE School
IF EXISTS(SELECT name FROM sysindexes WHERE name=’IDX_tno’)
         DROP INDEX teacher.IDX_tno
GO
USE School
CREATE INDEX IDX_tno ON teacher(tno)
GO
十一、DROP INDEX
1.【格式】
DROP INDEX ‘table.index | view.index’ [,…n]
2.【示例】
USE test
GO
DROP INDEX table1.Idx1
GO
十二、CREATE PROCEDURE
1.【格式】
CREATE PROC[EDURE] procedure_name [; number]
[{@parameter data_type} [VARYING ][ = default][OUTPUT]]
[,…n]
[WITH
         {RECOMPILE | ENCRYPTION | RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement [,…n]
2.【示例】
USE School
IF EXISTS(SELECT name FROM sysobjects WHERE name=’stud_degree’ AND type=’P’)
         DROP PROCEDURE stud_degree
GO
USE school
GO
CREATE PROCEDURE stud_degree
AS
         SELECT student.sno,student.sname,course.cname,score.degree
         FROM student,course,score
         WHERE student.sno=score.sno AND course.cno=score.cno
         ORDER BY student.sno
GO
十三、ALTER PROCEDURE
1.【格式】
 
2.【示例】
 
十四、DROP PROCEDURE
1.【格式】
DROP PROCEDURE procedure_name
2.【示例】
DROP PROCEDURE test_ret
十五、CREATE TRIGGER
1.【格式】
CREATE TRIGGER trigger_name ON { table_name | view_name }
[WITH ENCRYPTION]
{
         { {FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [DELETE]}
                   [WITH APPEND]
                   [NOT FOR REPLICATION]
                   AS
                   [{IF UPDATE (column)
                            [{ AND | OR UPDATE (column)}
                                     […n]
                   | IF (COLUMNS_UPDATED() {bitwise_operator} updated_bitmask)
                            {comparison_operator} column_bitmask […n]
                   }]
                  sql_statement […n]
         }
}
2.【示例】
CREATE TRIGGER [Hotel_Department_Update] ON dbo.Hotel_Department
FOR INSERT, UPDATE
AS
IF NOT EXISTS (SELECT * FROM Hotel WHERE ItemID IN (SELECT ItemID FROM inserted))
         BEGIN
                   PRINT '更新數據庫失敗,所屬記錄不存在!'
                  ROLLBACK TRAN                 --撤消操作
         END
         RETURN
GO
十六、ALTER TRIGGER
1.【格式】
ALTER TRIGGER trigger_name ON (table_name | view_name)
[WITH ENCRYPTION]
{
         {(FOR | AFTER | INSTEAD OF ) {[DELETE] [,] [INSERT] [,] [UPDATE]}
                   [NOT FOR REPLICATION]
                   AS
                  Sql_statement […n]
         }
         |
         {(FOR | AFTER | INSTEAD OF) {[INSERT] [,] [UPDATE] }
                   [NOT FOR REPLICATION]
                   AS
                   {IF UPDATE (column)
                   [{AND | OR} UPDATE (column)]
                   […n]
                   | IF (COLUMNS_UPDATED() {bitwise_operator}
                            updated_bitmask)
                  {comparison_operator} column_bitmask […n]
                   }
                  sql_statement […n]
         }
}
2.【示例】
 
十七、DROP TRIGGER
1.【格式】
DROP TRIGGER {trigger_name} [,…n]
2.【示例】
DROP TRIGGER trig1

發佈了54 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章