SQL数据库开发知识总结:基础篇(二)
ect getDate()。
数据汇总
(1) SQL聚合函数:max(最大值),min(最小值),avg(平均值),sum(和),count(数量)。
数据排序
(1) order by子句位于select语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排序,ASC)还是降序(从大到小排序,DESC)。 (2) 按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序 select * from T_Employee order by FAge Desc,FSalary Desc (3) order by子句要放到where子句之后: select * from T_Employee where FAge>23 order by FAge Desc,FSalary Desc
通配符过滤(模糊匹配)
(1) 通配符过滤使用Like。
(2) 单字符匹配的通配符为半角下划线”_”,它匹配单个出现的字符,以任意字符开头,剩余部分为”erry”:
select * from T_Employee where FName like ‘_erry’
(3) 多字符匹配的通配符为半角百分号”%”,它匹配任意次数(零或者多个)出现的任意字符,”K%”匹配以K开头,任意长度的字符串。检索姓名中包含”n”的员工的信息:
select * from T_Employee where FName like ‘%n%’
空值处理
(1) 数据库中,一个列如果没有指定值,那么值就为null,这个null和C#中的null不一样,数据库中的null表示”不知道”,而不是表示没有,因此select null+1结果是null,因为”不知道”加1的结果还是”不知道”。
(2)
select * from T_Employee where FName=null and select * from T_Employee where FName!=null。都没有任何返回结果,因为数据库”不知道”。
(3) SQL中使用is null,is not null来进行空值判断。
select * from T_Employee where FName is null select * from T_Employee where FName is not null
多值匹配
(1) select FAge,FNumber,FName from T_Employee where FAge in(34,23,35) (2) 范围值: 1) select * from T_Emploee where FAge>=23 and FAge<=27 2) select * from T_Employee where Fage Between 23 and 27
数组分组
(1) 按照年龄进行分组统计各个年龄段的人数:
select FAge,Count(*) from T_Employee Group by Fage
(2) Group by子句必须放在where语句的后面
(3) 没有出现在Group by子句中的列是不能放到select语句后的列名列表中的(聚合函数除外)。
1) 错误:select FAge,FSalary from T_Employee group by Fage。 2) 正确:select Fage,Avg(FSalary) from T_Employee group by Fage
Having子句
(1) 在where中不能使用聚合函数,必须使用Having,Having要位于Group by之后。
select Fage,Count(*) as 人数 from T_Employee Group by FAge Having Count(*)>1
(2) 注意Having中不能不能使用为参数分组的列,Having不能代替where,作用不一样,Having是对组进行过滤。
限制结果集行数
(1) select top 5 * from T_Employee order by FSalary Desc (2) (*)检索按照工资从高到低排序检索从第六名开始一共三个人的信息 select top 3 * from T_Employee where FNumber not in (select top 5 FNumber from T_Employee order by Fsalary desc) order by FSalary Desc。 (3) SQL Server2005后增加了Row_Number函数简化实现
去掉数据重复
(1) select FDepartment from T_Employee——>select distinct FDepartment from T_Employee (2) distinct是对整个结果集进行数据重复处理的,而不是针对某一个列,因此下面的语句并不会只保留Fdepartment进行重复值处理。 select distinct FDepartment,FSubcompany from T_Employee