网络数据

当前位置:永利402游戏网站-永利402com官方网站 > 网络数据 > Sql Server中的谓词和平运动算符

Sql Server中的谓词和平运动算符

来源:http://www.xtcsyb.com 作者:永利402游戏网站-永利402com官方网站 时间:2019-11-08 04:05

  

iOS开发入门 ☞ C语言(运算符),ios运算符

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

算术运算符:

% 取模(取余)运算符的注意事项:

1)取模运算符的操作数只能是整数  

2)取模运算符的正负性取决于前面那个操作数正负

3)如果取模运算的左边小于右边, 那么结果就是左边

取余(模运算):5%3=2; -5%3=-2; 5%-3=2; -5%-3=-2 (余数的符号与被除数一致!)

2%9=2;

图片 1

 

算术运算的注意点:

    int a = 10.6;

    int b = 10.5 + 1.7;

    int b = 10.5 + 10; //将右边的10提升为了double类型

    自动将大类型转换为了小类型,会丢失精度

  (相同数据类型的值才能进行运算(比如加法运算),而且运算结果依然是同一种数据类型。系统会自动对占用内存较少的类型做一个“自动类型提升”的操作)

    float a = 10 + 3.45f;//int 提升为 float    

    int b = 'A' + 32; // char 提升为 int

    double c = 10.3f + 5.7; // float 提升为 double

    double b = 1.0 / 2;

  (将大范围的数据赋值给小范围变量时,系统会自动做一个强制类型转换的操作,这样容易丢失精度)

    double a = (double)1 / 2;

    double b = (double)(1 / 2);

    int i = 10.7;  //系统转

    int i = (int) 10.7;  //自己强转

    int a = 198l; // long 转换为 int    

    char b = 65; // int 转换为 char

    int c = 19.5f; // float 转换为 int

 

赋值运算符的结合方向是:从右到左,而且优先级比算术运算符低

赋值运算符是所有运算符中除了逗号运算符以外优先级最低的

 

 

一、浅谈谓词

自增自减写在前面和后面的区别:

  • 如果++写在变量的前面, 那么会先将变量自增再用自增之后的结果参与运算
  • 如果++写在变量的后面, 那么会先将变量的值参与运算再将变量自增
  • 总结一句话: ++在前, 先自增再运算, ++在后, 先运算再自增

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

++a和a++的区别:

    int b = ++a;  //等价于 a=a+1;  b=a;

    int b = a++; //等价于 b=a;  a=a+1;

  运算规则:先左++,再赋值,最后右++。

 

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

sizeof()运算符:

sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

注意:sizeof是一个运算符, 不是一个函数

          利用sizeof计算的格式: sizeof(变量/常量/数据类型);

 

sizeof一共有3种形式:

  1. sizeof(变量常量)
  2. sizeof  变量常量
  3. sizeof(数据类型)

 

举例:

#include <stdio.h>

int main() {

    char c='a';

    printf("%lu, %lun", sizeof(10), sizeof(c));//4, 1

    printf("%lu, %lun", sizeof 10, sizeof c);//4, 1

    printf("%lun", sizeof(int));//4

    return 0;

}

 

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

逗号运算符和逗号表达式

    例如:a=a+1,b=3*4

        它的一般形式为:表达式1,表达式2,… …,表达式n

    逗号表达式的运算过程是:先算表达式1,再算表达式2,依次算到表达式n

    整个逗号表达式的值是最后一个表达式的值

//逗号运算符

#include <stdio.h>

//逗号运算符类似于加减乘除运算符,逗号运算符取最后一个表达式的值。

int main(){

    int num,num1;

    num=4,7; //逗号运算符的优先级低于赋值运算符

    num1=(4,7); //提高逗号运算符的优先级,先逗号运算,再赋值运算

    printf("num=%d num1=%dn",num,num1); // num=4 num1=7

    return 0;

}

 

  

关系运算符

<    小于运算符

<=  小于等于运算符

>    大于运算符

>=  大于等于运算符

==   等于运算符

!=   不等于运算符

  关系运算符的返回值只有两种, 要么真, 要么假. 1(真)和0(假)

 

使用注意(优先级):

  1. (算术运算符)的优先级大于(关系运算符)

如:3+4>8-2;//结果为1; 等价于:(3+4)>(8-2);

  1. 关系运算符的结合方向为“从左往右”

如:4>3>2;//结果为0

  1. (<,>,<=,>=)的优先级大于(==,!=)

如:2==3>1;//结果为0; 等价于:2==(3>1);

int a=3>4+7;//结果为0

int b=(3>4)+7;//结果为7

int c=5!=4+2*7>3==10;//结果为0

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

逻辑运算符

  && 逻辑与 、|| 逻辑或 、! 逻辑非

  使用注意:

  • 若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3) && (a<5)
  • 可以多次连续使用逻辑非运算符:!(4>2)结果为0,是"假",!!(4>2)结果为1,是"真",!!!(4>2)结果为0,是“假”
  • C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。  
  • 比如:
    • 5 && 4的结果是1,为“真”;-6 && 0的结果是0,为“假”。
    • 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。
    • !5、!6.7、!-9的结果都为0,!0的结果为1。

  && 和 || 都具有短路特征:

  如果前一个表达式能决定最终结果则不会计算后一个表达式!

#include <stdio.h>

int main() {

    //逻辑运算符&&和||的短路特征

    int a=3,b=4,c=5,r;

    r=(a>b)&&(++b>c);

    printf("%d,%d,%d,%dn", a, b, c, r);//3, 4, 5, 0

    r=(a<b++)||(b<c++);

    printf("%d,%d,%d,%dn", a, b, c, r);//3, 5, 5, 1

    

    //非短路的逻辑运算符&和|

    a=3;b=4;c=5;

    r=(a>b)&(b>++c);

    printf("%d,%d,%d,%dn", a, b, c, r);//3, 4, 6, 0

    r=(a<b)|(b<c++);

    printf("%d,%d,%d,%dn", a, b, c, r);//3, 4, 7, 1

    return 0;

}

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

优先级: 

  逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||

 条件运算符(三目运算符 " ? : "):表达式1?表达式2:表达式3

如果表达式1为真,三目运算符的运算结果为表达式2的值,否则为表达式3的值

单目运算符:操作数只有一个(-1;)

双目运算符:操作数有两个(1 - 2;)

三目运算符:操作数有三个(5 > 4 ? 1 : 0)

 

当我们不确定某些运算符的优先级的时候,可以使用() 来明确优先级

图片 2

 

☞ C语言(运算符),ios运算符 算术运算符: % 取模 ( 取余 )运算符的注意事项: 1 ) 取模运算符的操作数只能是整数 2 )...

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

  

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

  其中常用的包括:

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

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

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

 

 

二、运算符

    比较运算符:

=(等于) 等于
>(大于) 大于
<(小于) 小于
>=(大于或等于) 大于或等于
<=(小于或等于) 小于或等于
<>(不等于) 不等于
!=(不等于) 不等于(非 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中运算符分为标准和非标准,如 “!=” 可用 "<>" 替代,建议使用标准的运算符。

 

 

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

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

 

    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

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

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

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

    

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

      可以查阅MSDN最新的“数据类型优先级顺序”:

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

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

 

 

 

四、运算符优先级

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

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

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

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

   

  

本文由永利402游戏网站-永利402com官方网站发布于网络数据,转载请注明出处:Sql Server中的谓词和平运动算符

关键词:

上一篇:MySQL常用命令(二)

下一篇:没有了