2.2 SQL常量和表达式
常量,也称为文字值或标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。在SQL中提供了对常量的支持,以方便用户更好更灵活地使用SQL语句。
2.2.1 SQL常量
SQL中的常量分为4种,分别为数字常量、字符串常量、日期和时间常量以及符号常量。下面以SQL Server 2005数据库为例讲解SQL语法,具体的三种数据库中SQL语句的用法将在后面的章节中讲解。
1. 数字常量
整数和浮点数类型的数据都可以作为数字常量使用。整数型常量以没有用引号括起来并且不包含小数点的数字字符串来表示。整数型常量必须全部为数字;它们不能包含小数,例如1000。浮点型常量以没有用引号括起来并且不包含小数点的数字字符串来表示,例如5.55。
【例2-1】打开Id值为3的帖子。
【实例说明】应用WHERE子句,条件为Id=3。
在查询分析器中运行如下命令:
SELECT * FROM Msg WHERE Id=3; |
图2-1 根据Id值查询帖子信息 |
2. 字符串常量
字符串常量括在单引号内,并包含字母、数字字符(a~z、A~Z 和0~9)以及特殊字符,如感叹号 (!)、at 符 (@) 和数字号 (#)。将为字符串常量分配当前数据库的默认排序规则,除非使用 COLLATE 子句为其指定了排序规则。用户输入的字符串通过计算机的代码页计算,如有必要,将被转换为数据库的默认代码页。字符串常量的引入,极大地方便了使用SQL语句进行查询、添加等操作。例如liujun就是字符串常量。
【例2-2】搜索帖子信息表中标题为“我爱看小说”的帖子信息。
【实例说明】应用WHERE子句,条件为Msg='我爱看小说'。
在查询分析器中运行如下命令:
SELECT * FROM Msg WHERE Msg=' 我爱看小说'; |
运行结果如图2-2所示。
图2-2 根据标题查询帖子 |
3. 日期和时间常量
datetime常量使用特定格式的字符日期值来表示,并被单引号括起来。例如'April 15, 1998'为日期常量,'14:30:24'为时间常量。
大多数数据库系统都提供了时间和日期的转换函数,以使其系统中时间和日期的格式得以统一。
注意:
通常时间和日期的使用都必须结合转换函数一起使用,以保证进行操作时时间和日期的格式是相同的。
【例2-3】搜索帖子信息表中日期为2005-4-4的帖子信息。
【实例说明】应用WHERE子句,条件为Regtime='2005-4-4'。
在查询分析器中运行如下命令:
SELECT * FROM Msg WHERE Regtime='2005-4-4'; |
图2-3 根据发帖日期查询帖子信息 |
4. 符号常量
SQL语言还包含了许多特殊的符号常量,如CURRENT_DATE、CURRENT_TIME、USER、SYSTEM_USER、SESSION_USER等。这些都是在当前数据库系统中使用得比较多的,也很有用的符号常量。
2.2.2 表达式
一个SQL表达式构成了一个SQL语句的全部或部分。
1. 表达式的含义
表达式是符号与运算符的组合,简单的表达式可以是一个常量、变量、列或标量函数,也可以用运算符将两个或更多的简单表达式连接起来组成复杂的表达式。表达式在SQL查询中的应用,使SQL的查询操作有了更大的灵活性。一个表达式返回一个值,不仅可以用来计算查询返回的数据,而且还可以用于限制查询返回的行的筛选条件中。表达式中可以包含的数据类型非常广泛,数据库中基本的数据类型,如数字数据类型、字符串数据类型、时间和日期数据类型等,都可以在表达式中使用。
2. 表达式中的符号
SQL标准中规定了4种用于表达式的符号:加号(+)、减号(-)、乘号(*)和除号(/)。在SQL中,这4种符号的优先权与数学中的优先权相同,乘除的优先权高于加减的优先权,乘除具有相同的优先权,加减之间也具有相同的优先权。它们都可以在同一表达式中使用,具有相同优先权的符号按照从左到右的顺序来计算。
另外,在表达式中还可以使用比较操作符(=,<>,<,>,>=,<=)、逻辑操作符(AND,OR,NOT,ANY,ALL)等很多其他的操作符。算术操作符是在表达式中使用比较简单的一种。如果两个表达式是用比较或者逻辑运算符组合的,则结果的数据类型是布尔型,值有3种:TRUE、FALSE或UNKNOWN。如果两个表达式是用算术运算符、位运算符或字符串运算符组合的,则结果的数据类型由运算符确定。复杂的表达式由很多符号与运算符构成,得出一个单值结果,通过对组件表达式进行组合来确定结果表达式的数据类型、排序规则、精度和值,每次组合两个表达式,直到得到最后结果。表达式中元素组合的顺序由表达式中运算符的优先级决定。
【例2-4】查询Users表中用户名为liujia22,密码为123的用户信息。
【实例说明】应用WHERE子句,条件为username='liujia22' AND password='123'。
在查询分析器中运行如下命令:
SELECT * FROM Users WHERE username='liujia22' AND password='123'; |
图2-4 根据用户名和密码查询帖子信息 |