Select—没你想的那么复杂

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

51Testing软件测试网A-?/@ ?)[

  Select语句的基本结构如下:

Bk^ p}`W0
Select  [All | Distinct]  select_list51Testing软件测试网QO6g}u#Ath
[Into [new_table-name]]
|LOCc/a0Form. {table_name | view_name}
:]:v!_T)n$X_$E5^1E+u0[,{table_name2 | view_name2}
!v+Y8n+RfU$]t0….,{table_name10|view_name10}]
P&p8]op"H0K[Se I0[Where search_conditions]
\ a6ez7Hf E0[Group By group_by_list]
7d:Jmz#D8sg+dK C0[Having search_conditions]
KL{$D D.O)?0[Order By order_list [ASC| DESC]]

.S(]|%O O4VYNZ0  第一行语句中select_list表示需要检查的字段的列表,字段名称间用逗号分隔

:v/YYj*}gdHv0

L)jJ/tT.pb9q0  All 指明查询结果中可以显示值相同的列,且为系统默认

,D`9T@5mi9[0

W7_%YyQ7d@.M0  Distinct 指明查询结果中如有值相同的列,则只显示其中的一列51Testing软件测试网!g+G\4`h(R8`L

.?4q_:wtF7LY*Z q0  第二行语句中Into子句用于把查询结果存放到一个新建的表中

qr(SK6_%Jb0

AueLiwwP0  new_table-name 指明新建表的名称

LuLT:PB051Testing软件测试网%f e k6?2f`f Y

  第三行语句中Form. 子句指定需要查询的表注:只要Select中又要查询的列就必须使用From子句

q9?X!|-j(^_/Gl051Testing软件测试网0r3Ey1kzf9S$d%C&W3p

  table_name / view_name 指明Select 语句要用到的表,视图等数据源,该列表中的数据表名和视图名之间使用逗号分隔

5v7t&|#v7F_`GY0

9hT[,[S.Q0n0  第四行语句中 Where子句是制定数据检索的条件,以限制返回的数据行

W PJl fZj0

8c'\` AS6eGy `K0  第五行语句中Group By 子句指定查询结果的分组条件51Testing软件测试网(J1Z+G*CP}J

7W8tob4fWX:t$v0  第六行语句中 Having 子句指定分组搜索条件,通常与Group By子句一起使用,它与Where语句类似只是其作用对象不同,Where子句作用于表和视图,Having子句作用于组。

,V)BFV*Rzdd2Q1`051Testing软件测试网3h5tEqwu0am:S

  最后一行语句Order By 子句指定查询结果的排序方式,ASC是升序(系统默认),DESC 降序51Testing软件测试网EqiL0D4@&D2vu7X

51Testing软件测试网I T_0|c

  下面具体介绍一下Group By 子句

"Aj}0i ip!u-{051Testing软件测试网8BL/b`srr

  ALL:表示返回所有可能的查询结果组合,即使此组合中没有任何满足Where子句的数据,分组的统计列如果不满足查询条件,则将由null值构成其数据51Testing软件测试网NUHqR _q |1~+s

,J6r\+g oA9}0  Cube:除了返回由Group By子句指定的列外,还返回按组统计的行,返回的结果按分组的第一个条件列排序显示,以此类推。统计行包括了Group By子句指定的列的各种组合的数

`q u"~ j;J0H4W4\0

c h]/KB0fG%C-i0  据统计51Testing软件测试网}&|#C7oIka`s

2ScCw3\Y^J.J/i0  Rollup:只返回第一个分组条件指定的列的统计行,改变列的顺序会使返回的结果发生变化51Testing软件测试网,}DpT#i^ng&e5W F

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

_7cAI)XQ`;uR'B m P051Testing软件测试网 N$D$o T@

  下面两个图即分别是为Cube的返回结果和Rollup的返回结果51Testing软件测试网%W9~Luy2G3My

v-D+`Z/S0

1db-\&OE!{"\Q(V o0

  如何提高Select语句的效率51Testing软件测试网 f/k~)wiG-Vb"wr

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

'VQu |w9ptb0

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

  3、有效避免整表扫描:使用索引,除了缺失索引外,可能导致整表扫描的另一种情况是在like子句的匹配条件的开始使用了%,如果这样将会调用整表扫描。51Testing软件测试网9Y3U#|/o}B7J5X&A:{\


TAG:

 

评分:0

我来说两句

Open Toolbar