Transact-SQL語法速查手冊

第1章 Transact-SQL基礎sql

1.1 標識符數據庫

1、常規標識符express

1. 命名規則:安全

l 第一個字母必須是Unicode2.0標準定義的字母、下劃線、at符號(@)和數字符號(#);服務器

l 後續字符能夠是Unicode2.0標準定義的字母、來自基本拉丁字母或其餘國家/地區腳本的十進制數字、at符號(@)、美圓符號($)、數字符號(#)或下劃線;網絡

l 標識符不能是Transact-SQL的保留字;ide

l 不容許嵌入空格或其餘特殊字符;函數

l 標識符長度不大於128字符,本地臨時表標識符不大於116字符。操作系統

注:SQL Server2000中,常規標識符的格式規則取決於數據庫的兼容級別,兼容級別能夠用系統存儲過程sp_dbcmptlevel來設置。以上是兼容級別爲80時的規則。code

2. 特殊字符說明

如下字符位於標識符開始位置時具備特殊意義:

l 以@符號開始的標識符表示局部變量或參數;

l 以@@符號開始的標識符表示全局變量;

l 以#符號開始的標識符表示臨時表或過程;

l 以##符號開始的標識符表示全局臨時對象;

l --單行註釋;

l /*…*/多行註釋。(多行註釋不能跨越批處理)

2、分隔標識符

1. 命名規則:

l 標識符長度不大於128字符(不包括分隔符字符),本地臨時表標識符不大於116字符;

l 標識符的主體能夠是包含當前代碼頁內字母(分隔符自己除外)的任意組合。

2. 分隔標識符類型:

l 被引用的標識符用雙引號分隔開,例如SELECT * FROM 「My Table」;

l 括在括號中的標識符用方括號分隔,例如SELECT * FROM [My Table]。

3、使用標識符

在SQL Server2000中,一個對象的全稱語法格式爲:

server.database.owner.object

其中,server爲服務器名,database爲數據庫名,owner爲全部者,object爲對象名。默認狀況下,server爲本地服務器,database爲當前數據庫,owner爲在指定的數據庫中與當前鏈接會話的登錄標識相對應的數據庫用戶或者數據庫全部者。

4、通配符

1. %—包含零個或更多字符的任意字符串

例如:查找姓名中包含有「華」字的全部學生

WHERE sname LIKE ‘%華%’

2. _—任何單個字符

例如:查找姓王,名字包含3個字的學生

WHERE sname LIKE ‘王__’

3. [] —指定範圍或集合中的任何單個字符

例如:查找姓劉和姓王,名字包含3個字的學生

WHERE sname LIKE ‘[劉,王]__’

4. [^]—不屬於指定範圍或集合的任何單個字符

例如:查找除姓劉和姓王之外,名字包含3個字的學生其餘學生

WHERE sname LIKE ‘[^劉,王]__’

5、系統全局變量

變量名稱

說明

@@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 語句

1、BEGIN…END

1.【格式】

BEGIN

{

         sql語句|語句塊

}

END

2.【示例】

BEGIN

         DECLARE @MyVar float

         SET @MyVar = 456.256

         BEGIN

                   PRINT CAST (@MyVar AS varchar(12))

         END

END

2、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

3、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

4、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))

5、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學號的學生無成績’

6、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)

7、WAITFOR

1.【格式】

WAITFOR {DELAY ‘time’ | TIME ‘time’}

2.【示例】

BEGIN

         WAITFOR TIME ‘1:10:00’

         PRINT ‘如今是1:10:00’

END

1.5 函數

1、內置函數

函數分類

函數

說明

聚合函數

COUNT

SUM

AVG

MIN

MAX

配置函數

遊標函數

日期和時間函數

DAY

MONTH

YEAR

GETDATE

數學函數

元數據函數

行集函數

安全性函數

字符串函數

系統函數

系通通計函數

文本和圖像函數

2、用戶自定義函數

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

1、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 數據操做語言

1、INSERT

1.【格式】

INSERT INTO <table_name>

[(<column_name>[{,<column_name>}…])]

VALUES(<value>[{,<value>}…])

注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。

2.【示例】

INSERT INTO score

(sno,cno,score)

VALUES(1001,254,’95’)

2、UPDATE

1.【格式】

UPDATE<table_name>

SET<set clause expression>[{,< set clause expression >}…]

[WHERE <search_condition>]

注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。

2.【示例】

UPDATE 商品信息

SET 產地=

(SELECT 供應商所在城市

FROM 供應商信息

WHERE 供應商名稱=’南方電訊’),

備註=’貨億到’

WHERE 產地=’上海市’

3、DELETE

1.【格式】

DELETE FROM<table_name>

[WHERE <search_condition>]

注:「<>」爲必選項,「[]」爲可選項,「{}」爲可重複出現項。

2.【示例】

DELETE FROM 業務員信息

WHERE 業務員姓名 LIKE ‘黃__’

2.4 數據定義語言

1、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)

2、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.【示例】

3、DROP DATABASE

1.【格式】

DROP DATABASE database_name

2.【示例】

DROP DATABASE School

4、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)

)

5、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

6、DROP TABLE

1.【格式】

DROP TABLE table_name

2.【示例】

DROP TABLE book

7、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

8、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

9、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

10、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

11、DROP INDEX

1.【格式】

DROP INDEX ‘table.index | view.index’ [,…n]

2.【示例】

USE test

GO

DROP INDEX table1.Idx1

GO

12、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

十3、ALTER PROCEDURE

1.【格式】

2.【示例】

十4、DROP PROCEDURE

1.【格式】

DROP PROCEDURE procedure_name

2.【示例】

DROP PROCEDURE test_ret

十5、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

十6、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.【示例】

十7、DROP TRIGGER

1.【格式】

DROP TRIGGER {trigger_name} [,…n]

2.【示例】

DROP TRIGGER trig1

相關文章
相關標籤/搜索