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',' ','-') |