谓词和运算符配合使用是咱们获得理想数据的最佳途径。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 | =(赋值) |
因为运算符数量不小,死记硬背下来要花点功夫。分析规律咱们能够以类型来制定顺序,记住个大概:(圆括号)>算术运算符>比较运算符>逻辑运算符。