连表查询举例

课程表
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 性别

 

posted @ 2021-04-03 18:13  Java精进之路  阅读(185)  评论(0编辑  收藏  举报