Sql Server中的谓词和运算符

  

   谓词和运算符配合使用是咱们获得理想数据的最佳途径。sql

 

1、浅谈谓词app

  谓词的概念:一个运算结果为True、False或Unknown的逻辑表达式。它的运用范围有:where子句、Having子句、Check约束、联接查询的联接条件等。less

示例1,用于实施数据完整性为数据表添加约束:在员工表中,仅容许工资大于0的员工存储在表中。其中的谓词是“工资大于0”(SQL表达式:工资>0)。ide

示例2,用于查询筛选数据的条件:查询员工表要求只返回销售部的员工。其中谓词是“部门等于销售部”(SQL表达式:部门='销售部')。spa

  

  谓词和运算符的相互使用:server

    1.经过逻辑运算符链接多个谓词(逻辑表达式),如使用AND和OR。blog

    2.谓词中使用比较运算符,如某个属性值大于或小于某指定个值。ip

  

  SQL Server中有一些关键字能够替代谓词语义的含义,也能够称为SQL Server中的谓词。ci

  其中经常使用的包括:element

    1.IN,在...以内,检查一个值是否存在于指定的集合内。     

    2.BETWEEN,检查一个值是否在指定的区间范围内,范围包括两个边界值。

    3.LIKE,判断字符串是否知足指定的格式,例如,查询名字姓氏为黄的员工(where name like '黄%')。

 

 

2、运算符

    比较运算符:

=(等于) 等于
>(大于) 大于
<(小于) 小于
>=(大于或等于) 大于或等于
<=(小于或等于) 小于或等于
<>(不等于) 不等于
!=(不等于) 不等于(非 ISO 标准)
!<(不小于) 不小于(非 ISO 标准)
!>(不大于) 不大于(非 ISO 标准)

   算术运算符:

+(加)
-(减)
*(乘)
/ (Divide)
%(取模) 返回一个除法运算的整数余数。 例如,12 % 5 = 2,这是由于 12 除以 5,余数为 2。

    

    逻辑运算符:

ALL 若是一组的比较都为 TRUE,那么就为 TRUE。
AND 若是两个布尔表达式都为 TRUE,那么就为 TRUE。
ANY 若是一组的比较中任何一个为 TRUE,那么就为 TRUE。
BETWEEN 若是操做数在某个范围以内,那么就为 TRUE。
EXISTS 若是子查询包含一些行,那么就为 TRUE。
IN 若是操做数等于表达式列表中的一个,那么就为 TRUE。
LIKE 若是操做数与一种模式相匹配,那么就为 TRUE。
NOT 对任何其余布尔运算符的值取反。
OR 若是两个布尔表达式中的一个为 TRUE,那么就为 TRUE。
SOME 若是在一组比较中,有些为 TRUE,那么就为 TRUE。

 

     在SQL Server中运算符分为标准和非标准,如 “!=” 可用 "<>" 替代,建议使用标准的运算符。

 

 

3、关于表达式中涉及两个操做数的运算(重点)

  当表达式涉及两个操做数使用算术运算符运算时,其运算结果的数据类型,根据两方面断定。

 

    1.两个数据类型相同的数值进行运算,其结果数值的数据类型和两个操做数的数据类型同样:

    例如,两个整数(int)相除生成一个整数,4/2返回整数类型2。

    根据这样的一个定论,存在着一个隐患,例如用5/2的时候正常结果由于2.5,而后sql Server返回整数类型2。固然在建立表的时候能够对此类型的列设为小数类型,那就是5.0/2.0=2.5,

    但就此状况非要运算,还要获得正确的结果时。能够像两个操做数进行数据类型转换,即:CAST(5 as Numeric(2,1)) / CAST(2 as Numeric(2,1))。

    Numeric(2,1)数据类型的含义:数值一共占2位,其中小数占一位

    

  2.数值数据的精度和小数位:

    精度的意思是数值中有多少位数,小数位指小数点精确到几位,小数位的位数包含在精度里,故指定数据类型的小数位必须小于小于指定的精度。

    

    3.两个数据类不一样的数值进行运算,其结果的数据类型为两操做数中数据类型优先级较高的数据类型:

      例如,5/2.0中,5的数据类型为INT,2.0的数据类型为NUMERIC。根据SQL Server的数据类型优先级的规则。断定NUMERIC优先于INT,

      则,在运算以前会把操做数5隐式地转换为5.0,获得结果就为2.5(符合其定论)。

    

    4.SQL Server数据类型优先级顺序:

      能够查阅MSDN最新的“数据类型优先级顺序”:https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017

      在查阅后能够发现一个规律,就是在同一特定的范围内,数据容量大的数据类型优先级大于数据容量小的数据类型。例如int和decimal后者的精度长度大于int,

      那么在运算时能够判断decimal优先级较高与int,运算结果为decimal数据类型。

 

 

 

4、运算符优先级

  SQL中出现复杂的表达式,那么相应就会在表达式中出现多个运算符。那么这个时候,就要依靠SQL Server中的运算符优先级规则,按顺序计算。   

    运算符的优先级别以下表中所示。 在较低级别的运算符以前先对较高级别的运算符进行求值。

级别 运算符
1 ()圆括号
2 *(乘)、/(除)、%(取模)
3 +(正)、-(负)、+(加)、+(串联)、-(减)、&(位与)、^(位异或)、|(位或)
4 =、>、<、>=、<=、<>、!=、!>、!<(比较运算符)
5 NOT
6 AND
7 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8 =(赋值)

   因为运算符数量不小,死记硬背下来要花点功夫。分析规律咱们能够以类型来制定顺序,记住个大概:(圆括号)>算术运算符>比较运算符>逻辑运算符。

相关文章
相关标签/搜索