语句模板查询
/*
select [all | distinct] --all 结果集中可包含重复行,distinct则相反*/
select * from 饲养员 --*代表统配查询所有字段
select * from 姓名,年龄,家庭地址 from 饲养员 --查询选定字段
select DISTINCT 性别 from 饲养员 --结果去重
select all 性别 from 饲养员
select top 2 * from 饲养员 --查询前2个记录
select top 50 percent * from 饲养员 --查询前50%的记录
修改列标题
1.使用关键字AS,AS也可省略
select a.ID as '编号',a.性别 as 'SEX' from 饲养员 a
select a.ID '编号',a.性别 'SEX' from 饲养员 a
2.使用等号“=
select '编号'=a.ID ,'SEX=a.性别 ' from 饲养员 a”
查询结果中显示字符串
select '姓名:',班级名,'辅导员编号:',辅导员 from 班级信息 --加入字符串为字段添加注释
select a.名字 ,a.性别,a.年龄,a.年龄+10 现在的年龄 from 饲养员 a --注意此处别名没有加引号'',引号可省略
条件查询
条件可为 >,<,=,>=,<=,<>,IN,BETWEEN AND,LIKE(%,_),[],[^字符集合],IS NULL,EXISTS,
排序
1.根据单列排序
select * from 饲养员 order by 年龄 --默认从上到下升序
2.根据多列排序
select * from 饲养员 order by 年龄,ID --默认从上到下升序
select * from 饲养员 order by ID,年龄 --这两个语句查询结果不同,
分组
SELECT 性别,COUNT(*) AS 人数 order by 性别
多字段分组
SELECT 性别,年龄,COUNT(*) AS 人数 order by 性别,年龄
使用HAVING对分组结果过滤
SELECT 年龄,COUNT(*) AS 人数 order by 年龄 having count(*)>5 --只查询分组人数大于5的分组
where 与 having 的区别
having用在数据分组后进行过滤1,即用来选择分组;而where在分组前用来选择记录。另外where排除的记录不再包括在分组中。
--使用union合并查询结果集
/*
SELECT column,column1,column2.... from table1
UNION [ ALL ] --不使用all,去重复,有all,只是把选择集合并到一起,不去重
SELECT column,column1,column2.... from table2 --table1与table2可以相同;合并时两个表对应的列数与数据类型要相同
*/聚合函数常和 group by 联用
count(*)计算总的行数,不管是否为NULL,count(字段名):计算指定列下的总行数,忽略NULL
子查询即在查询中加入查询作为过滤条件
动态查询
DECLARE @id int;
DECLARE @sql varchar(8000);
select @id=101;
select @sql='SELECT name,age, FROM 饲养员 WHERE ID = ';
exec(@sql + @ id);