数据库练习
现在有两个表:
学生信息表: stu_info
+--------+----------+---------+
| STU_NO | STU_NAME | STU_AGE |
+--------+----------+---------+
| 1 | 张三 | 18 |
| 2 | 李四 | 20 |
| 3 | 王五 | 19 |
+--------+----------+---------+
学生成绩表: stu_grade
+--------+---------+-------+
| STU_NO | SUBJECT | GRADE |
+--------+---------+-------+
| 1 | 语文 | 100 |
| 1 | 数学 | 93 |
| 1 | 英语 | 80 |
| 2 | 语文 | 80 |
| 2 | 数学 | 90 |
| 2 | 英语 | 100 |
| 3 | 语文 | 90 |
| 3 | 数学 | 85 |
| 3 | 英语 | 80 |
+--------+---------+-------+
要求得到 一个表, 这个表包含了 姓名, 总分 , 平均分
sql 语句如下:
第一种写法
SELECT stu_name 姓名 ,总分 , 平均分 FROM stu_info as i ,(SELECT stu_no 编号, SUM(grade) 总分 ,AVG(grade) 平均分 FROM stu_grade
GROUP BY stu_no) as s
WHERE i.stu_no = s.编号;
采用 子查询 的方式 : select 列名1, 列名2, from 表1, 表2 where 条件
第二种写法:
select stu_name 姓名, 总分, 平均分 from stu_info as i INNER join (select stu_no 编号, SUM(grade) 总分, AVG(grade) 平均分 from stu_grade group by stu_no) as s on i.stu_no = s.编号;
采用了 两张表的内联
得到的表 如下:
+--------+--------+-----------+
| 姓名 | 总分 | 平均分 |
+--------+--------+-----------+
| 张三 | 273 | 91.0000 |
| 李四 | 270 | 90.0000 |
| 王五 | 255 | 85.0000 |
+--------+--------+-----------+