【02单表查询】——04谓词和运算符

T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING)、CHECK约束等,在逻辑表达式中可以使用各种谓词(取值为true、false、unknown的表达式)和运算符。

——T-SQL支持的谓词
***IN
***BETWEEN
***LIKE

IN谓词
in谓词用于检查一个值(或者标量表达式)是否与一组元素中的至少一个相等,例如下面这个查询返回的就是orderid等于10248 、或10249 、或10250的数据

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE orderid IN(10248,10249,10250)

BETWEEN谓词
between这个谓词用于检查一个值是否在指定的范围之内,包括两个边界值,例如,下面这个查询返回的就是orderid在10300到10310之间的所有订单

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE orderid BETWEEN 10300 AND 10310

LIKE谓词
like这个谓词用于检查一个字符串的值是否与指定的模式相匹配。例如,以下查询返回lastname以字符“D”开头的所有数据

SELECT empid,firstname,lastname
FROM HR.Employees
WHERE lastname like N"D%";

D%前面那个N代表国际化National,用于表示字符串是Unicode数据类型。在后面的博文中再详细的说模式匹配和LIKE谓词。

——T-SQL支持的比较运算符
T-sql支持以下这些比较运算符

=,>,<,>=,<=,<>,!=,!>,!<

其中最后三个不是标准运算符,因为非标准运算符都可以使用响应的标准运算符来代替,所以建议尽量避免使用这些非标准的运算符。

例如,以下查询返回2008年1月1日之后的所有数据

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE orderdate >='20080101'

如果要把多个逻辑表达式组合起来,可以使用OR或者AND,如想对布尔类型取反,可以使用NOT运算符。
例如,以下查询返回2008年1月1日之后,empid为1、3、5的所有记录

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE orderdate >='20080101' AND empid IN(1,3,5)

——T-SQL支持的算术运算符
T-sql支持以下五种运算符

+,-,*,/,%(取模)

注意:T-SQL中,涉及两个运算对象的标量表达式的数据类型取决于数据类型的优先级,由优先级较高的运算对象决定。如果两个运算对象具有相同的数据类型,表达式的结果也为这样的数据类型。

例如:两个整数(INT)相除,得到的还是一个整数,表达式5/2,结果返回的是2,而不是2.5

如果两个运算对象具有不同的类型,则具有较低类型优先级的运算对象就会自动转换为更高级的类型
例如:在表达式5/2.0中,第一个运算对象是整数(INT),第二个是实数(NUMERIC),因为SQL认为NUMERIC比INT更高级,所以计算的时候会隐式把INT类型的运算对象5转化为5.0,这样就得到了结果2.5

——同一表达式中的运算符优先顺序

1、()
3、+,-
4、=,>,<,>=,<=,<>,!=,!>,!<
5、NOT
6、AND
7、BETWEEN,IN,LIKE,OR
8、=

例如,在以下查询中,AND的优先级比OR高

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE custid = 1 AND empid IN(1,3,5) OR custid = 85 AND empid IN(2,4,6)

这条查询返回有custid为1下,empid为1或3或5的数据;或者是custid为85下,empid为2或4或6的数据

圆括号的优先级最高,所以他拥有最高的控制权,处于以后让其他人审查和维护代码的需要,为了提高可读性,尽可能使用圆括号和代码缩进是一种良好的编码习惯,即使在一些情况下没必要添加括号

例如,以下查询在逻辑上和上面那个查询是一样的,但是它的逻辑显得清晰多了

SELECT orderid,empid,orderdate
FROM Sales.Orders
WHERE 
(custid = 1 AND empid IN(1,3,5))
 OR 
(custid = 85 AND empid IN(2,4,6))

期待你阅读下一篇博文【02单表查询】——05CASE表达式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值