表达式概述
在查询中任何用到列名的地方都可以使用表达式。表达式可用以计算显示值、作为搜索条件的一部分、或合并数据列的内容。一个表达式可以由数值计算或字符串组成,也可以包含列名、文字、运算符及函数的任何组合。
在查询中使用表达式的一些示例包括:
- 在“
产品 ”表中,显示比零售价低 10% 的折价。
- 只显示电话号码的前三位数字 — 区号。
- 以 last_name, first_name 的格式显示雇员名字。
- 连接两张表(“
订单 ”表和“产品 ”表),并按总价(定货数量乘以产品价格)排序查询。
- >在“
订单 ”表中,复制并删除所有一年前发出的订单。
表达式结构与表达式示例
表达式的一般创建准则
表达式可以包含列名、原义字符、运算符或函数的任意组合。在将这些元素组合成表达式时应遵循下列准则:
表达式示例
下表列出在查询中使用表达式的示例。
表达式 |
结果 |
SELECT (price * .9)
FROM products |
显示打折价格(价格列下调 10% 后的结果)。 |
SELECT (lname + ', ' + fname)
FROM employee |
显示用逗号把姓与名列相连接后的结果。 |
SELECT sales.qty, titles.price
FROM sales INNER JOIN titles ON
sales.title_id = titles.title_id
ORDER BY
(sales.qty * titles.price)
|
联接两个表之后,按订单的总值(数量乘以价格)对结果集进行排序。 |
SELECT au_lname, au_fname
FROM authors
WHERE
(SUBSTRING(phone, 1, 3) = '415') |
显示区域代码为 San Francisco 地区的作者。 |
SELECT ord_num, ord_date
FROM sales
WHERE
(ord_date >=
DATEADD(day, -10, GETDATE())) |
在sales 表中查找在近 10 天内制作的表。当天的日期由 GETDATE(?) 函数返回。 |
用于表达式的运算符
可以使用多种运算符来构造查询的表达式,包括数学和文本运算符。
数学运算符
下表列出了可用于构造表达式的数学运算符。
运算符 |
含义 |
+、- |
单运算符正、负号 |
+ |
加法 |
- |
减法 |
* |
乘法 |
/ |
除法 |
注释可以使用其他可用的运算符,如“%”运算符来确定算术运算中的模数或余数。有关模数算术运算符的详细信息,请参阅 Microsoft SQL Server 文档。
如果在一个表达式中有多个数学运算符,则“查询设计器”按照如下所示的运算符优先级处理表达式。若要改写默认的优先级,可在要优先计算的表达式前后加上括号。如果表达式中有多个相同优先级的运算符,则按照从左向右的次序计算运算符。
- 单运算符 + 号和 - 号
- * 和 /
- + 和 -
文本运算符
可对文本执行下列操作之一:连接或链接字符串。可以使用单个运算符连接字符串并执行其他运算(如删除多余的空格)。若要连接字符串,可以在“网格”窗格中使用“+”运算符。
表达式的预定义变量
在表达式中,除了使用列名、文字、运算符和函数外,还可使用定义过含义或值的预定义变量。例如,可用预定义变量显示当前用户的用户名,还可用于搜索包含空值 (Null) 的数据列。
下面的列表包含预定义变量的示例。
预定义变量 |
说明 |
示例 |
CURRENT_USER |
当前用户的用户名
安全性使用此功能时要格外小心。其他用户可能看到敏感信息或机密信息。
|
UPDATE accountsSET salesperson = CURRENT_USERWHERE region = 'NW'
更改在当前用户名称的西北地区的所有帐户的salesperson 列。
|
NULL |
空值 (Null),用于搜索表达式
IS NULL 和
IS NOT NULL |
SELECT emp_id, lname, fname, minitFROM employeeWHERE minit IS NULL
查找名称中没有中间名首字母的作者。
注释关键字 IS 是与 Null 一起使用的特殊运算符。
|
|