VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之T-SQL语言基础

 T-SQL语言基础
7.1  注释
在SQL Server中,可以使用两种类型的注释字符:
一种是ANSI标准的注释符“--”,它用于单行注释;
另一种是与C语言相同的程序注释符号,即“/*  */”。“/*”用于注释文字的开头,“*/”用于注释文字的结尾。
例7-1 使用两种注释类型的例子。
     程序清单如下:
       USE test
    GO
     -- First line of a multiple-line comment.
     -- Second line of a multiple-line comment.
    SELECT * FROM s
    GO
    /* 注释语句的第一行.
    注释语句的第二行. */
    SELECT * FROM sc
    GO
    -- 在T-SQL语言调试过程中使用注释语句。
7.2 变量
T-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。
1. 局部变量
局部变量的作用范围仅限制在程序内部。局部变量被引用时要在其名称前加上标志“@”,而且必须先用DECLARE命令定义后才可以使用。 
定义局部变量的语法形式如下:
DECLAER {@local_variable   data_type} […n]
其中,参数@local_variable用于指定局部变量的名称,
参数data_type用于设置局部变量的数据类型及其大小.data_type可以是任何由系统提供的或用户定义的数据类型。但是,局部变量不能是 text,ntext 或 image 数据类型。
使用DECLARE命令声明并创建局部变量之后,会将其初始值设为NULL,如果想要设定局部变量的值,必须使用SELECT命令或者SET命令。其语法形式为:
 SET  { @local_variable = expression } 
或者
SELECT { @local_variable = expression } [ ,...n ]
其中,参数@local_variable是给其赋值并声明的局部变量,参数expression是任何有效的SQL Server表达式。
例7-2 创建一个@myvar 变量,然后将一个字符串值放在变量中,最后输出 @myvar 变量的值。
     程序清单如下:
     DECLARE @myvar  char(20)
     select  @myvar = 'This is a test'
     SELECT @myvar
     GO
例7-3 通过查询给变量赋值。
     程序清单如下:
     USE test
     GO
     DECLARE @rows int
     SET @rows = (SELECT COUNT(*)  FROM  sc)
2. 全局变量
除了局部变量之外,SQL Server系统本身还提供了一些全局变量。全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是T-SQL命令执行后的状态值。在使用全局变量时应该注意以下几点:
(1)全局变量不是由用户的程序定义的,它们是在服务器级定义的。
(2)用户只能使用预先定义的全局变量。
(3)引用全局变量时,必须以标记符“@@”开头。
(4)局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果。
例7-4 显示到当前日期和时间为止试图登录SQL Server的次数。
   程序清单如下:
   SELECT GETDATE( )  AS  '当前的时期和时间',
   @@CONNECTIONS AS  '试图登录的次数'
7.3 运算符
在SQL Server 2005中,运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符和字符串串联运算符。
1.算术运算符
算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括加(+)、减(-)、乘(*)、除(/)和取模(%)。
2.赋值运算符
T-SQL 中只有一个赋值运算符,即(=)。赋值运算符使我们能够将数据值指派给特定的对象。另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。 
3.位运算符
位运算符使我们能够在整型数据或者二进制数据(image 数据类型除外)之间执行位操作。此外,在位运算符左右两侧的操作数不能同时是二进制数据。
4.比较运算符
比较运算符亦称为关系运算符,用于比较两个表达式的大小或是否相同,其比较的结果是布尔值,即TRUE(表示表达式的结果为真)、FALSE(表示表达式的结果为假)以及UNKNOWN。除了 text,ntext 或 image 数据类型的表达式外,比较运算符可以用于所有的表达式。
5.逻辑运算符
逻辑运算符可以把多个逻辑表达式连接起来。逻辑运算符包括AND、OR和NOT等运算符。逻辑运算符和比较运算符一样,返回带有 TRUE 或 FALSE 值的布尔数据类型。
三个运算符的优先级别为:NOT,AND,OR。
6.字符串串联运算符
字符串串联运算符允许通过加号(+)进行字符串串联,这个加号即被称为字符串串联运算符。例如对于语句SELECT ’abc’+’def’,其结果为abcdef。
在SQL Server 2005中,运算符的优先等级从高到低如下所示,如果优先等级相同,则按照从左到右的顺序进行运算。
(1)括号:();
(2)乘、除、求模运算符:*,/,%;
(3)加减运算符:+,-;
(4)比较运算符:=,>,<,>=,<=,<>,!=,!>,!<;
(5)位运算符:^,&,|;
(6)逻辑运算符:NOT;
(7)逻辑运算符:AND;
(8)逻辑运算符:OR。
7.4 函数
在T-SQL语言中,函数被用来执行一些特殊的运算以支持SQL Server的标准命令。SQL Server包含多种不同的函数用以完成各种工作,每一个函数都有一个名称,在名称之后有一对小括号,如:gettime( )。大部分的函数在小括号中需要一个或者多个参数。
1、字符串函数
例7-5 使用 LTRIM 函数删除字符变量中的起始空格。
程序清单如下:
DECLARE @string_to_trim varchar(60)
SET @string_to_trim = '    Five spaces are at the beginning of this    string.'
SELECT 'Here is the string without the leading spaces: ' +
LTRIM(@string_to_trim)
2、日期和时间函数
日期和时间函数用于对日期和时间数据进行各种不同的处理和运算,并返回一个字符串、数字值或日期和时间值。与其他函数一样,可以在SELECT语句的SELECT和WHERE子句以及表达式中使用日期和时间函数。
例7-6 从GETDATE函数返回的日期中提取月份名。
程序清单如下:
SELECT DATENAME(month, getdate())  AS  'Month Name'
3、数学函数
数学函数用于对数字表达式进行数学运算并返回运算结果。
例7-7
select  round(rand()*100,0.5)
4、系统函数
系统函数用于返回有关SQL Server系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后,使用条件语句,根据返回的信息进行不同的操作。
例7-8 返回服务器的主机名称
程序清单如下:
SELECT host_name()
7.5 流程控制语句
流程控制语句是指那些用来控制程序执行和流程分支的语句,在SQL Server 2005中,流程控制语句主要用来控制SQL语句、语句块或者存储过程的执行流程。
1. IF…ELSE语句
IF…ELSE语句是条件判断语句,其中,ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。IF…ELSE语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。SQL Server允许嵌套使用IF…ELSE语句,而且嵌套层数没有限制。
IF…ELSE语句的语法形式为:
   IF Boolean_expression
    { sql_statement | statement_block }
[ ELSE
    { sql_statement | statement_block } ]
例7-9 如果李四的平均成绩为60分以上,显示其成绩情况,否则显示文本:成绩状态不理想。
declare @avgs int
select @avgs=avg(grade)
from s,sc
where s.sno=sc.sno and sname='李四'
if(@avgs>=60)
select s.sno,sname,cno,grade
from s,sc
where s.sno=sc.sno and sname='李四'
else
print '成绩不理想'
2. BEGIN…END语句
 BEGIN…END语句能够将多个T-SQL语句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,就需要使用BEGIN…END语句。
 BEGIN…END语句的语法形式为:
BEGIN
         { sql_statement
         | statement_block
         }
       END
3.GO 语句
Go 语句是批的结束语句。批是一起提交并作为一个组执行的若干SQL语句。
例7-10  用Go 语句作为批的结束语句。
程序清单如下:
USE adventureworks
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg 在Go语句后失效。
4.CASE语句
CASE语句可以计算多个条件式,并将其中一个符合条件的结果表达式返回。CASE语句按照使用形式的不同,可以分为简单CASE语句和搜索CASE语句。
简单CASE表达式:
CASE 表达式
        WHEN 表达式 THEN 表达式
WHEN 表达式 THEN 表达式        [ ...n ]
        [ELSE 表达式]
END
例7-11 根据sdept的数据显示其详细内容
use test
go
declare @dept varchar(50)
select @dept=
case sdept
       when 'cs' then '计算机系'
       when 'info' then '信息系'
       when 'ma' then '数学系'
else '出错'
end
from s
where sno='001'
--显示其值
select @dept as系部
搜索CASE:
CASE
WHEN 布尔表达式 THEN 表达式
WHEN 布尔表达式 THEN 表达式        [ ...n ]
       [ELSE 表达式]
END
例7-12 使用搜索CASE,根据成绩的范围将显示其对应系的文本
use test
go
declare @score char(1)
select @score=
case
when grade>=90 and grade<=100 then 'A'
when grade>=80 and grade<90 then 'B'
when grade>=70 and grade<80 then 'C'
when grade>=60 and grade<70 then 'D'
else 'E'
end
from sc
where cno='100' and sno='001'
 
select @score
5.WHILE…CONTINUE…BREAK语句 
WHILE…CONTINUE…BREAK语句用于设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。其中,CONTINUE语句可以使程序跳过CONTINUE语句后面的语句,回到WHILE循环的第一行命令。BREAK语句则使程序完全跳出循环,结束WHILE语句的执行。
其语法形式为:
 WHILE Boolean_expression
    { sql_statement | statement_block }
    [ BREAK ]
    { sql_statement | statement_block }
    [ CONTINUE ]
例7-13 计算1到10之间的奇数之和
declare @i tinyint,@sum int
set @sum=0
set @i=0
while @i>=0
begin
if(@i>=10)
       begin
              select '总和'=@sum
              break
       end
else
       begin
              set @i=@i+1
              if(@i % 2) = 0
                     continue
              else
                     set @sum=@sum+@i
       end
end
6.GOTO语句
GOTO语句可以使程序直接跳到指定的标有标识符的位置处继续执行,而位于GOTO语句和标识符之间的程序将不会被执行。GOTO语句和标识符可以用在语句块、批处理和存储过程中,标识符可以为数字与字符的组合,但必须以“: ”结尾。如:‘a1: ’。在GOTO语句行,标识符后面不用跟“: ”。GOTO语句的语法形式为:
GOTO label
……
label:
 
例7-57 利用GOTO语句求出从1加到5的总和。
程序清单如下:
declare    @sum   int,   @count   int
select   @sum=0,   @count=1
label_1:
select   @sum=@sum+@count
select   @count=@count+1
if   @count<=5
goto   label_1
select   @count   @sum
7.WAITFOR语句
WAITFOR语句用于暂时停止执行SQL语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。
WAITFOR语句的语法形式为:
WAITFOR { DELAY 'time' | TIME 'time' }
其中,DELAY用于指定时间间隔,TIME用于指定某一时刻,其数据类型为datetime,格式为‘hh:mm:ss’。
例7-14 使用WAITFOR TIME语句,以便在晚上10:20执行存储过程 update_all_stats。
程序清单如下:
BEGIN
   WAITFOR TIME '22:20'
   EXECUTE update_all_stats
END
8.RETURN语句
RETURN语句用于无条件地终止一个查询、存储过程或者批处理,此时位于RETURN语句之后的程序将不会被执行。
RETURN语句的语法形式为:
RETURN [ integer_expression ]
其中,参数integer_expression为返回的整型值。存储过程可以给调用过程或应用程序返回整型值。
例7-15 显示如果在执行 findjobs 时没有给出用户名作为参数,RETURN 则将一条消息发送到用户的屏幕上然后从过程中退出。如果给出用户名,将从适当的系统表中检索由该用户在当前数据库内创建的所有对象名。
程序清单如下:
CREATE PROCEDURE findjobs @nm sysname = NULL
AS
IF @nm IS NULL
   BEGIN
     PRINT 'You must give a username'
      RETURN
   END
ELSE
   BEGIN
      SELECT o.name, o.id, o.uid
      FROM sysobjects o INNER JOIN master..syslogins l
         ON o.uid = l.sid
      WHERE l.name = @nm
   END
 

相关教程