连表查询举例
课程表
cid cname
c1 语文
c2 数学
c3 英语
c4 体育
学生成绩表
1 张三 c1 100
2 张三 c2 90
3 张三 c3 40
4 李四 c2 30
要求:根据课程名查询选修该课程的学生人数
SQL:
SELECT c.`CNAME`, COUNT(DISTINCT s.`SNO`) AS '选修人数'
FROM score s RIGHT JOIN course c ON s.`CNO` = c.`CNO` GROUP BY c.`CNAME`;
分析:
使用RIGHT JOIN、GROUP BY
问题:
右连接和左连接有什么区别?
左连接和右连接区别为:语法公式不同、基础表不同、结果集不同。
一、语法公式不同
1、左连接:左连接的关键字是left join,语法公式为select *from dave a left join bl b on a .id=b .id。
2、右连接:右连接的关键字是right join,语法公式为select *from dave a right join bl b on a .id=b .id。
二、基础表不同
1、左连接:左连接的基础表为left join左侧数据表。
2、右连接:右连接的基础表为right join右侧数据表。
三、结果集不同
1、左连接:左连接的结果集为left join左侧数据表中的数据,再加上left join左侧与右侧数据表之间匹配的数据。
2、右连接:右连接的结果集为rightjoin右侧数据表中的数据,再加上rightjoin左侧与右侧数据表之间匹配的数据。
为什么对课程名进行分组?
分类汇总的时候用。group by :表示按字段分组。例如:分别计算男性用户和女性用户的平均年龄。
select 性别,avg(年龄) as average from 表名 group by 性别