1、分组查询的语法:
select 列(或者聚合函数)
from 表名
where 条件
group by 分组依据
对分组后的每个组内的记录进行一个聚集,通常用到聚合函数
注:分组查询所查询的列
(1)分组列——CourseID
(2)聚合函数计算出的列—— AVG(Score) AS 课程平均成绩
注:在分组查询的只能有两项:
(1)查询的结果(可以多个,比如可以同时查询平均分和总分)
(2)分组的依据(用哪个列分组)
2、分组筛选语句:
select …… --要查询的结果或者分组的列
from <表名> --从哪一张表中查询
where …… --查询的条件,列名作为判断条件
group by …… --分组
having…… --聚合函数得到的结果作为条件、
order by…… --排序选择哪一个列
WHERE和HAVING的区别
WHERE子句:
用来筛选 FROM 子句中指定的操作所产生的行,WHERE子句只能对没有分组的数据进行筛选。
GROUP BY子句:
用来分组 WHERE 子句的输出
HAVING子句:
用来从分组的结果中筛选行,分组后的条件筛选必须使用HAVING子句。
3、连接查询
a) 内连接的语法:
- 使用where判断列名:
select …… --两张或者多张表中的一个或者多个列
from 表1,表2……
where 表1.相同列名=表2.相同列名
- 使用inner join … on
select …… --两张或者多张表中的一个或者多个列
from 表1 as 别名1
inner join 表2 as 别名2
on(别名1.相同列名=别名2.相同列名)
b) 外连接——主表全部出,次表出对应,没有就出NULL。
- 左外连接:主表和次表连接的时候,如果主表中的数据在次表中没有对应的数据,那么次表中用null返回到结果集中。
语法:
select ……
from 主表 as 别名
left join 次表 as 别名
on(主表别名.相同列=次表别名.相同列)
注:先出现的第一张表为主表(左表),第二章为次表
- 右外连接:右外联接的原理与左外联接相同,右表逐条去匹配记录;否则NULL填充。
语法:
select……
from 次表 as 别名
right join 主表 as 别名
on(主表别名.相同列=次表别名.相同列)
注:先出现的第一张表为次表,第二章为主表(右表)
数据库中所有下标从1开始,编程语言中所有下标从0开始