DML语句包含了很多Transact-SQL的语法元素。其中包括批处理命令(Batch directives )、注释语句(Comments )、标识符(Identifiers )、数据类型、变量(Variables )、系统函数、运算符、表达式、流控制语句和保留的关键字。
当保留关键字被用作对象名或对象部分的名字时。
当限定标识符出现在Transact-SQL语句中时,必须使用中括号或双引号把限定标识符括起来。
用中括号表示括起来的标识符([])
SELECT * FROM [Blanks In Table Name]
注意 :括起来的标识符总是可以被使用,不管SET QUOTED_IDENTIFER选项的状态如何。
用双引号表示引用的标识符(””)
SELECT * FROM “Blanks in Table Name”
只有SET QUOTED_IDENTIFIER选项为on时,才能使用引用的标识符。
3、标识符的命名原则
给数据库中的对象起名时,应该:
名字尽量短;
尽量使用有意义的名字;
使用简单的清晰的命名习惯;
使用能够区分出对象类型的标识符,尤其是视图和存储过程的名字;
保持对象名和用户名的唯一性。
对一个集合中的值进行运算,然后返回一个单个的、汇总的值。
下面的例子计算products表中unitprice字段的平均值。
USE northwind
SELECT AVG(unitprice) AS AvgPrice
FROM products
GO
运行结果:
AvgPrice
28.8663
(1row(S)affected)
2、 标量(scalar)函数
只对单个值进行运算并返回单一的值。只要一个表达式是正确的就可以使用这些函数。标量函数可被分为以下几种。
函数类型 描述
设置函数 返回关于当前设置信息的值
游标函数 返回关于游标信息的函数
日期和时间函数 根据输入的日期和时间,运算并返回一个字符串、数值或日期、时间值
数学函数 根据输入的值进行数学计算,并返回一个数字值
元数据函数 返回关于数据库和数据库对象的信息
安全函数 返回关于用户和角色的值
字符串函数 根据输入字符的值(char或varchar ),返回一个字符串或数字值
系统函数 进行相应运算后,返回SQL Server内部关于值、对象和设置的信息
系统统计函数 返回关于系统的统计信息
下面的例子显示了一个元数据函数的使用,它返回当前所使用的数据库的名字。
USE northwind
SELECT DB_NAME() AS‘database’
GO
运行结果:
database
Northwind
(1row(s)affected)
3、 行集(Rowset)函数
在Transact-SQL语句中,行集函数可以用作表参考(table reference)。
下面的例子对表titles中的信息进行分布式的查询。
SELECT *
FROM OPENQUERY(OracleSvr , ’SELECT name,id FROM owner,titles,)
GO
下面是另外一些系统函数的例子:
SELECT ’ANSI:’, CONVERT(varchar(30), GETDATE(), 102) AS
Style
UNION
SELECT ’Japanese:’, CONVERT(varchar(30), GETDATE(), 111)
UNION
SELECT ’European:’, CONVERT(varchar(30), GETDATE(), 113)
GO
. 〉 大于
. < 小于
. >= 大于或等于
. <= 小于或等于
. <> 不等于
字符串运算符
字符串运算符(+)把两个字符串连起来。所有其它的字符操作都需使用字符操作函数进行。空字符不等于空值。
逻辑运算符
逻辑运算符与(AND)、或(OR)和非(NOT)用于连接WHERE子句中的查询条件。
2、运算符优先级
如果在表达式中,你需要结合使用多种运算符(逻辑或数学运算符),SQL Server按照这些运算符的优先级别来处理这些运算符,这种顺序将会影响返回的值。各种运算符的优先级别如下(由高到低排列)。
类型 运算符 符号
分组 基本分组 ()
算术运算符 乘法 */%
算术运算符 加法 -+
其余 字符串联 +
逻辑运算符 非 NOT
逻辑运算符 与 AND
逻辑运算符 或 OR
SQL Server首先处理最深一层的嵌套表达式。然后,如果表达式中所有的算术运算符的优先级别一致的话,由左到右处理各运算符。
注意:在SQL Server中,逻辑运算符的优先级别和其他编程语言的不一样。
IF.ELSE块, 使用这个语句时,如果满足条件,SQL Server将执行IF中的语句,否则,执行ELSE中的语句。
WHILE块,只要满足条件,则WHILE下的语句将被重复执行。BREAK和CONTINUE能够在WHILE循环中控制语句的执行。
下面的例子中,演示了根据某顾客是否还有订单的情况,把顾客从顾客列表中相应地删除。
USE northwind
IF EXISTS (SELECT * FROM orders
WHERE customerid = ’fran’ )
PRINT ‘*** Customer cannot be deleted ***’
ELSE
BEGIN
DELETE customers WHERE customerid = ’frank’
PRINT ‘*** Customer deleted ***’
END
GO
2、行级(Row level)
在CASE语句中,列出几种可能的值,并逐一进行检测。如果表达式返回值是true,则CASE表达式返回WHEN子句中的值。如果表达式的返回值是false,并且指定了ELSE语句的话,SQL Server将返回ELSE子句中的值。你可以在使用表达式的任意地方使用CASE语句。
语法
CASE expression
{WHEN expression THEN result} [,.n]
[ELSE result]
END
下例声明了一个局部变量,并且检测它的值是等于4、5或6,根据它具体的值,进入WHILE循环判断当前值是奇数还是偶数。
DECLARE @n tinyint
SET @n = 5
IF (@n BETWEEN 4 and 6)
BEGIN
WHILE (@n > 0)
BEGIN
SELECT @n AS ‘Number’
,CASE
WHEN (@n%2) = 1
THEN ’ODD’,
ELSE ‘EVEN’
END AS ‘Type’
SET @n = @n - 1
END
END
ELSE
PRINT ‘NO ANALYSIS’
GO
运行结果:
Number Type
5 EVEN
(1 row(s) affected)
Number Type
4 ODD
(1 row(s) affected)
Number Type
3 EVEN
(1 row(s) affected)
Number Type
2 ODD
(1 row(s) affected)
Number Type
1 EVEN
(1 row(s) affected)
注意:在这个例子中的块语句(BEGIN/END)的使用能够改善脚本语句的可读性。
| 上篇文章: Transact-SQL语句的类型 下篇文章:使用SQL查询分析器 使用osql工具 |
| 相关文章: 没有相关文章 |