SQL Server
第十一章 连接查询和分组查询
连接查询和分组查询
分组查询
select.........from <表名>
where.......
group by.........
注意: 跟order by 一样 group by后面可以写多个列 写多个列则按照多列分组 having:对分组之后的结果进行筛选
having 必须卸载group by后面,没有group by having也不能写
对查询的列,要么出现在聚合函数,要么出现在分组,否则会出错
一条SQL语句同时出现where group by having order by 则排序顺序为:
select...from 表名 ...where...group by...having...order by
在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据技照某列来汇总统计),这时就需要用到group by语句。select语句中可以使用group by语句。然后,使用聚组函数返回每个组的汇总信息。
------当使用了分组语句(group by)或者是聚合函数的时候,
在select的查询列表中不能在包含其他列名,
除非该列同时也出现在了group by子句中,或者该列也包含在了某个聚合函数中
GROUP BY子句必须放到WHERE语句的之后,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。
没有出现在GROUP BY子句中的列是不能放到SELECT语句后的列名列表中的(聚合函数除外)
where和having的区别:
(1)位置:
where可以用于select、update、delete和insert into values(select * from table where ..)语句中。
having只能用于select语句中
(2)执行顺序:
where的搜索条件是在执行语句进行分组之前应用
having的搜索条件是在分组条件后执行的
即如果where和having一起用时,where会先执行,having后执行
(3)子句的区别:
where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;
having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以
总结:
1.WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
2.GROUP BY 子句用来分组 WHERE 子句的输出。
3.HAVING 子句用来从分组的结果中筛选行
连接查询
多表联接查询实际上是通过各个表之间共同列的关联性来查询数据的
select ...... select .......
from 表1 等 from 表1,表2
inner join 表2 价 where ......
on ......

浙公网安备 33010602011771号