首页 > 代码库 > SQL Server 查询

SQL Server 查询

 

from子句

在查询语句中from应该是必须的,虽然可以没有,但是那样没有意义。

因为from子句是其他部分的基础,输出、where条件、order by等所有要访问的表都必须包含在from子句中。

简单的可以包含一个表,也可以合并多个数据源的数据和多个数据类型的数据。最大访问数量是256个表。

可以接受的数据来源:本地SQL SERVER表、子查询、视图、表值用户定义的函数返回的行和列、分布式数据源。。。

表的别名:from子句中 “表名 AS 别名”这种格式为表起一个别名。AS可以省略,但最好不要这样。

如果表名、别名、列名等等名称与关键字冲突,可以将名称放在中括号[]中,以表示其不是关键字。(非标准SQL)

同样 如果表名、列名等名称中间包含空格,也可以放在中括号[]中,但绝不建议这样做。

完全限定的名称 由4部分组成:Server.Database.Schema.Table   在当前数据库中则不需要服务器和数据库名,也就是一般情况下我们需要些后面两部分就可以了。使用限定的名称有两个好处,①避免意外的错误,②提高查询的性能,所以建议养成好的习惯。

 

where条件

筛选from子句的输出结果,并限制结果集中返回的行。

比较运算符 标准的六个 >、>=、=、=<、<、<>      SQL Server特有的三个 !=、!<、!>

代数的使用 子句条件中的 col+20=60 与col=60-20 等价,但是后者可以提高性能,这个简单的例子,道理是一样的,所以一定要注意书写习惯,改掉坏毛病。

其他比较运算符 BETWEEN  IN  LIKE  IS  SOME  ANY  ALL

BETWEEN x and z 相当于大于等于x且小于等于z;它经常与日期一起使用,日期时间

IN  用例一  region IN (‘Hebei’,‘Henan’);                   用例二 ‘Hebei‘ IN (col1,col2,col3…)

LIKE 包含通配符的条件。SQL通配符与DOS通配符不同,避免混淆,现在只说SQL的通配符:%代表任意个数的任意字符,  _代表一个任意字符,   []所附字符中的一个,  [^]不在所附字符中。举例说明:‘Able’ LIKE ’A%’       ‘Able’ LIKE ’Abl_’        ‘A’ LIKE ‘[A-E]’     ‘a’ LIKE ‘abf’    ‘A’ LIKE ‘[^WXYZ]’

逻辑运算符 NOT AND OR 连接多个where条件 ,运算顺序即 NOT AND OR。可以加()以增强可读性。

SELECT…WHERE…    SELECT ‘abc’ AS col  WHERE 条件。如果条件为真,则返回 abc ,如果条件为假,返回为空。

 

返回结果

星号* 特殊通配符 代表表顺序的所有列;如果多个表也是所有表的所有列。tablename.*则只包括来自该表的列。

别名显示在结果集中;如果没有别名,表达式和常量一般显示为空白列标题;包含空格或者关键字的别名放在方括号、单引号或者双引号内(不过最好还是不用那些)。

限定的列用表名限定列,防止产生误会和错误。

 

结果集排序

通过列名指定排序 order by  col1,col2…

使用表达式指定排序 order by 表达式

使用列别名指定排序  (where子句不允许使用列别名,OK)

使用列的顺序位置 order by 1;  不是很好,因为有时候列的顺序位置会改变

升序、降序:默认升序ASC;降序DESC。例,ORDER BY col1 DESC;

排序规则

 

谓词

首先解释一下谓词的意思,根据《现代汉语》的定义,词语分两类:体词包括名词、数词、量词;谓词包括动词和形容词。在计算机语言的环境下,谓词是指条件表达式的求值返回真或假的过程。SQL中的谓词跟在SELECT后面

ALL/DISTINCT   ALL返回所有行(默认); DISTINCT把重复的行删除,保留一个。

TOP(n) 在order by的条件下,TOP(n)表示返回结果的前n行;TOP(n) PERCENT 则返回结果集中的前n%。

WITH TIES 与TOP(n)一起使用,表示允许并列第n名等情况的发生

随即行选择  用ORDER BY NewID()排序,然后选择第一行。newID是一个随机数,这种方法对性能有一定影响。

SQL Server 查询