Select
语句
:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

SELECT Select_list

[WITH <Common_table_expression> ]

[INTO New_table]

FROM Table_source

[WHERE Search_condition]

[GROUP BY Group_by Expression]

[HAVING Search_condition]

[ORDER BY Order_expression[ASC|DESC]]

关键词

说明

注意点

Select_list

查询结果输出列,可以指定
FROM
指定表中的一个或多个字段,还可以是由字段、常量与函数所组成的表达式。

DISTINCT
:用于选择数据表中的唯一记录,每个
SELECT
语句只能有一个
DISTINCT
关键字。如果
DISTINCT
后面跟有多个字段,则要多个字段的组合相同才被看作重复记录;每个
SELECT
语句只能包含一个
DISTINCT
关键字。

INTO

查询结果输出,可用于建新表。

输出列中不能包含计算列

FROM

查询的表名。

为了使语句清晰而使用表的别名

WHERE

查询条件。

 

GROUP BY

显示
group by
子句所产生组的全部结果,没有的值用
NULL
填充。

 

HAVING

Group by
子句产生的分组提供细分条件,
having
子句用来搜索分组数据。

Having
是组内而
Where
是针对表

ORDER BY

ORDER BY
语句用于在输出的结果集中对指定的列进行排序。默认是按照升序对记录进行排序,可以是一个字段或表达式。

Asc
:升序;
Desc:
降序

 
运算符

符号

说明

举例

IN

判断数据记录是否出现在指定的各个数据值中

select c01 ×××号码,c02 姓名 from memberbaseinfo where c<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />07 IN ('哈萨克族','维吾尔族','藏族');

BETWEEN

判断数据在指定范围内,可判断日期;

选择出年龄在
30-35
岁之间并且本星期过生日的人:

select c02 姓名,c09 出生日期 from memberbaseinfo where month(c09)=month(getdate())and ( day(c09) BETWEEN 26 and 30 ) and ( datediff(year,c09,getdate()) between 30 and 35 );

LIKE

用于在
WHERE
子句中搜索指定条件。

 

 
通配符

*

表示源表中所有字段

%

替代一个或多个字符,只能用在
where
子句中,表示
0
个或
0
个以上的字符,通常和运算符
like
配合使用。

_

仅替代一个字符,只能用在
where
子句中,通常和运算符
like
配合使用。

查找姓名第三字为“军”或为“丽”、×××号码第一位在
0~3
之间且第
4
位在
6~9
之间、姓“李”或“张”的记录:

select c01 ×××号码,c02 姓名 from memberbaseinfo where ( c02 like '__%' or c02 like '__%' ) and c02 like '[李张]%' and ( c01 like '[0-3]__[6-9]%' );

[]

字符列中的任何单一字符,只能用在
where
子句中,用来限定单个字符介定于指定的范围或集合中,通常和运算符
like
配合使用。

下面的语句找出名字中第一个字符为
P
Z
之间,后面字符为
inger
的人名:

[^]

只能用在
where
子句中,用来限定任何单个字符不介定于指定的范围或集合中,通常和运算符
like
配合使用。

[!]

不在字符列中的任何单一字符

 
常用聚集函数
{[all|distinct]expression}|*

函数名

说明

举例

Count()

统计记录数

统计各个工龄的人数:

SELECT  count(*) 人数,datediff(yyyy,C10,getdate()) 工龄 from memberbaseinfo group by c10 order by datediff(yyyy,C10,getdate());

统计性别的人数:

select count(*),CASE C06

         WHEN '1' THEN ''

         WHEN '2' THEN ''

ELSE '其他' END

from memberbaseinfo group by C06

min()

计算一列中
expression
的最小值。

计算人员中的最大年龄:

select year(getdate())-year(min(c09)) as 最大年龄 from memberbaseinfo

或:

select datediff(yyyy,min(c09),getdate()) as 最大年龄 from memberbaseinfo

max()

计算一列中
expression
的最大值。

计算人员中的最大工龄:

select max(datediff(yyyy,c10,getdate())) as 最大工龄 from memberbaseinfo

avg()

计算一列中
expression
的平均值
 

计算男性员工的平均年龄:

select avg(year(getdate())-year(c09)) as 平均年龄 from memberbaseinfo where c06=''

计算女性员工的平均年龄:

select avg(datediff(yyyy,c09,getdate())) as 平均年龄 from memberbaseinfo where c06=''

SUM()

统计表达式中所有项的总和

 

 
注意点:

1

比较字段中的
NULL
值用
is null
is not null

2

’[1-4]%’
表示
1
4
之间,而
’[14]%’
表示
1
4

3

SQL
用单引号来环绕文本值
,
如果是数值不要使用引号。如果字段中包含_或者%等特殊字符的话用以下语句:用escape\转移字符,表示其后的字符是常量。

查找×××号码里包含了“%”或“_”的记录:

select c01 ×××号码,c02 姓名 from memberbaseinfo where ( c01 like '%\%%' escape '\' ) or ( c01 like '%\_%' escape '\' ) ;

4

可以直接进行函数练习:

Select substring('SQL Server 2000',1,3)

Select right(left('SQL Server 2000',10) ,6)

Select left('SQL Server 2000',10)

Select len('hello SQL Server 2000')

select replace('SQL Server 2000',' ','-')