Select—没你想的那么复杂

上一篇 / 下一篇  2012-07-17 11:25:07 / 个人分类:数据库

o'j#B%[1tg6]$T*v0  Select语句的基本结构如下:

_ XT'tTr-n8~i0
Select  [All | Distinct]  select_list
MF$]qdB%Q0[Into [new_table-name]]51Testing软件测试网g6Vf niW
Form. {table_name | view_name}51Testing软件测试网0}7b{#luY
[,{table_name2 | view_name2}51Testing软件测试网i9yt3T%sF$fp
….,{table_name10|view_name10}]
K`+@$TJ2M"{,I0[Where search_conditions]
f2D;N wrU d i%Qb0[Group By group_by_list]
NB%a q2`4x2@0r$S0[Having search_conditions]51Testing软件测试网tk;o6l;]/j@W
[Order By order_list [ASC| DESC]]
51Testing软件测试网#Y0W})WH \ N1iQ

  第一行语句中select_list表示需要检查的字段的列表,字段名称间用逗号分隔51Testing软件测试网(i#D#^M4J

51Testing软件测试网|/e hf&j$R nA*B

  All 指明查询结果中可以显示值相同的列,且为系统默认

I7lZ4b-\e051Testing软件测试网p^m;kRy8O

  Distinct 指明查询结果中如有值相同的列,则只显示其中的一列51Testing软件测试网b:R3N^"G

51Testing软件测试网a EHP%H a7a

  第二行语句中Into子句用于把查询结果存放到一个新建的表中

m:S%B)|Y~ t*j9V051Testing软件测试网2GpVXj#MSc`Oo

  new_table-name 指明新建表的名称

#J ?B R(u HK0

6h/\"}oGk0  第三行语句中Form. 子句指定需要查询的表注:只要Select中又要查询的列就必须使用From子句51Testing软件测试网L5qf"pR hS'n

w5^w Hw3Us-a#K2|'`0  table_name / view_name 指明Select 语句要用到的表,视图等数据源,该列表中的数据表名和视图名之间使用逗号分隔51Testing软件测试网+X7OHc8]p

8z['b-X9hV1BG)a\0  第四行语句中 Where子句是制定数据检索的条件,以限制返回的数据行51Testing软件测试网-T9~9\N4h3Cc

_v%UZ)??Uw0  第五行语句中Group By 子句指定查询结果的分组条件

:I5WUD a0E0Z5L*J051Testing软件测试网t5@"U n6b

  第六行语句中 Having 子句指定分组搜索条件,通常与Group By子句一起使用,它与Where语句类似只是其作用对象不同,Where子句作用于表和视图,Having子句作用于组。51Testing软件测试网:J;jK"g e7m

51Testing软件测试网#r*A"c c CS3Bw

  最后一行语句Order By 子句指定查询结果的排序方式,ASC是升序(系统默认),DESC 降序

A:pbequ8W(\Xw0

)kF)u ?yW-\9u0  下面具体介绍一下Group By 子句51Testing软件测试网]r[[d)u G\ QX-rW

4lXi'L1a"C+S0  ALL:表示返回所有可能的查询结果组合,即使此组合中没有任何满足Where子句的数据,分组的统计列如果不满足查询条件,则将由null值构成其数据51Testing软件测试网 dq'OZ7_x d

51Testing软件测试网u0A&|&nR

  Cube:除了返回由Group By子句指定的列外,还返回按组统计的行,返回的结果按分组的第一个条件列排序显示,以此类推。统计行包括了Group By子句指定的列的各种组合的数51Testing软件测试网8A0Ye#lD9J'?)_2k.l

51Testing软件测试网}#u@&r$h(c%O}I(NY"e_

  据统计

7V `(O*HST c$d0

t(@ cRR%T0  Rollup:只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果发生变化

5nU|w3N/x051Testing软件测试网^1MX2nS2{n@

  举例:按所属部门分类,找出工资大于来2000的所有员工

V4MJdH;B P,N6P;]051Testing软件测试网9wu(uoM @+K(m

  下面两个图即分别是为Cube的返回结果和Rollup的返回结果

@ A4X,^I yf(^0

51Testing软件测试网2i)Q2P;q _b5v8}

51Testing软件测试网"P:R3s1W"I

  如何提高Select语句的效率51Testing软件测试网1],g!Rb,dNd?C

  1、使用exists关键字检查结果集:不要用count(*)来检查结果集中是否包含行

PBpy Y?]c|So1t6q0

  2、使用标准连接代替嵌套查询:在执行嵌套查询时,SQLServer将执行内部的子查询,然后将查询结果返回给外部查询作为检索的数据源,最后执行外部的主查询。而在执行包含标准联接的查询时,SQL Server将要查询的仅仅是一个查询51Testing软件测试网{n)ct*U6h

  3、有效避免整表扫描:使用索引,除了缺失索引外,可能导致整表扫描的另一种情况是在like子句的匹配条件的开始使用了%,如果这样将会调用整表扫描。51Testing软件测试网J0Jn[ n,p


TAG:

 

评分:0

我来说两句

Open Toolbar