—生成一个统计结果信息表
—生成的每个同学的总分信息表:学号、姓名、总分
代码演变:
SELECT S.stuNo,S.stuName FROM Results R
INNER JOIN
Students S
ON(R.stuno=S.stuNo)
WHERE R.score IS NOT NULL OR R.score!=0
添加分组:
SELECT S.stuNo,S.stuName FROM Results R
INNER JOIN
Students S
ON(R.stuno=S.stuNo)
WHERE R.score IS NOT NULL OR R.score!=0
GROUP BY S.stuNo,S.stuName
将具有相同的stuNo和stuName数据的记录划分为一组
添加聚合函数:
–采用内连接:
SELECT S.stuNo,S.stuName,SUM(R.score) AS TotalScores FROM Results R
INNER JOIN
Students S
ON(R.stuno=S.stuNo)
WHERE R.score IS NOT NULL OR R.score!=0
GROUP BY S.stuNo,S.stuName
ORDER BY TotalScores DESC
–采用外连接方式:
–右外连接:
–起别名的两张方式:
–1.TotalScores=SUM(R.score)
–2.SUM(R.score) AS TotalScores
SELECT S.stuNo,S.stuName,SUM(R.score) AS TotalScores FROM Results R
LEFT JOIN
Students S
ON(R.stuno=S.stuNo)
WHERE R.score IS NOT NULL OR R.score!=0
GROUP BY S.stuNo,S.stuName
ORDER BY TotalScores DESC
注意点:
**内连接:**完全匹配,不会产生NULL(但可能表中的字段本身就是NULL)
使用左/右外连接时,尽量:左外连接,左表是主键表。
右外连接,右表是主键表。
这时候查询出来的从表中的字段可能存在NULL值(没有匹配上,而不是字段本身就是NULL),所以需要判断一下(一般使用主键表的主键列进行判断,也不一定)