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