zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    msp430入门学习30
    msp430入门学习03
    msp430入门学习27
    msp430入门学习26
    msp430入门学习25
    msp430入门学习24
    msp430入门学习23
    msp430入门学习22
    去掉xcode中警告的一些经验
    CocoaPods详解之----使用篇
  • 原文地址:https://www.cnblogs.com/sczw-maqing/p/3623806.html
Copyright © 2011-2022 走看看