码迷,mamicode.com
首页 > 数据库 > 详细

第二章 单表查询 T-SQL语言基础(2)

时间:2015-12-04 14:51:46      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

单表查询(2)

2.2 谓词和运算符

T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING),CHECK约束,等等.

在逻辑表达式中可以使用各种谓词(取值为TRUE,FALSE,或UNKNOWN的表达式)和运算符.

 

T-SQL支持的谓词包括IN,BETWEEN,以及LIKE等.

-- Predicates: IN, BETWEEN, LIKE
SELECT orderid, empid, orderdate
FROM Sales.Orders
WHERE orderid IN(10248, 10249, 10250);
--IN这个谓词用于检查一个值(或标量表达式)是否与一组元素的至少一个相等.

SELECT orderid, empid, orderdate
FROM Sales.Orders
WHERE orderid BETWEEN 10300 AND 10310;
--BETWEEN用于检查一个值是否在指定的范围内,包括两个指定的边界值

SELECT empid, firstname, lastname
FROM HR.Employees
WHERE lastname LIKE ND%;
--LIKE这个谓词用于检查一个字符串值是否与指定的模式匹配
--N‘D%‘,N用于表示字符串是Unicode数据类型(NCHAR或NVARCHAR),与之相对应的是常规的字符数据类型(CHAR或VARCHAR)

 

T-SQL支持的比较运算符: =,>,<,>=,<=,<>,!=,!<,!>,其中最后3个运算符不是标准运算符.因为非标准运算符都可以用相应的标准运算符来替代,尽量避免使用非标准运算符.

-- Comparison operators: =, >, <, >=, <=, <>, !=, !>, !< 
SELECT orderid, empid, orderdate
FROM Sales.Orders
WHERE orderdate >= 20080101;
--查询返回2008年1月1日之后生成的所有订单

 

如果要把多个逻辑表达式组合起来,可以使用逻辑运算符OR和AND.如果想对布尔型表达式取反,可以使用NOT运算符.

-- Logical operators: AND, OR, NOT
SELECT orderid, empid, orderdate
FROM Sales.Orders
WHERE orderdate >= 20080101
  AND empid IN(1, 3, 5);
--查询返回2008年1月1日之后,由ID为1,3,5的雇员处理过的所有订单

 

T-SQL支持的算术运算符:+,-,*,/,以及%(取模)运算符,它返回一个整数除法运算的余数.

-- Arithmetic operators: +, -, *, /, %
SELECT orderid, productid, qty, unitprice, discount,
  qty * unitprice * (1 - discount) AS val
FROM Sales.OrderDetails;

 

注:涉及两个运算对象的标量表达式的数据类型取决于数据类型的优先级,由优先级较高的运算对象决定.

如果两个运算对象具有相同的数据类型,表达式的结果也为相同的数据类型.

如果两个运算对象具有不同的类型,则具有较低类型优先级的运算对象就自动转换成更高级的类型

 

T-SQL运算符优先级规则:

1.()

2.*,/,%

3.+,-,

4.=,>,<,>=,<=,<>,!=,!<,!>

5.NOT

6.AND

7.BETWEEN,IN,LIKE,OR

8. =

-- Operators Precedence

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

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

-- *, / precedes +, -
SELECT 10 + 2 * 3   -- 16

SELECT (10 + 2) * 3 -- 36

 

111

第二章 单表查询 T-SQL语言基础(2)

标签:

原文地址:http://www.cnblogs.com/youguess/p/5019100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!