MS SQL Server 学习⑵

本文详细介绍了SQL查询语句的基本语法及其组成部分,包括SELECT、FROM、WHERE等子句的使用方法,并提供了具体示例,帮助读者更好地理解和运用SQL进行数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
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配合使用。

下面的语句找出名字中第一个字符为PZ之间,后面字符为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]%’表示14之间,而’[14]%’表示14

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值