多表联查:
注:表不可拆分
两张表一起查询:
选定特定信息查询:
取别名查询方法一:
取别名查询方法二:
查询tb_stu和tb_con两张表的内容
查询里面显示学生名字和他选的课程:
连接查询(join):
加入条件:
三个表一个条件查询
要确保两张表要有关系
左右外连接必须带过滤条件
左外连接:
三张表同时关联左外连接且stu的id为null
三张表同时关联左外连接且stu的id不为null
一对多的关系时,多的来记录少的信息只用一张表
多对多时一定是用关联关系表进行多表联查
查询单一信息
查询没选课的人:
子查询用一个select语句主查询内包含一个子查询:
查询选java的学生姓名全部是子查询:
查询选java的学生姓名(方法二):
子查询的()外必须给别名
聚合函数:
全部选过课的学生:
分组(报错,直播15:45)
查询选各种课的人数统计:
筛选大于两个人数以上的课程(方法一):
方法二:
向关联表中加入成绩:
查找最高,最低成绩:
没有挂过科的学生姓名(方法一):
方法二:
having 的用法:当聚合函数执行完了要将聚合函数(group用来聚合)的结果当做条件还要再一次过滤的时候就可以调用having
顺序是先是from------> join------->from的结果----->where------>group------->having
排序过程:
升序:
降序:
练习题:
1.查询出来平均分最高的科目?
输出结果:
±--------±-----±--------+
| conname | cid | maxavg |
±--------±-----±--------+
| C++ | 4 | 73.6000 |
±--------±-----±--------+
2.查询出来平均分最高的学生?
一些小步骤:
输出结果:
1、
±-----±-----------+
| sid | avg(score) |
±-----±-----------+
| 1 | 65.7500 |
| 2 | 63.7500 |
| 3 | 65.2500 |
| 4 | 85.7500 |
| 5 | 76.5000 |
±-----±-----------+
优化的部分:
输出结果:
±--------±-----±--------+
| stuname | sid | maxavg |
±--------±-----±--------+
| 马 | 4 | 85.7500 |
±--------±-----±--------+
3.查询出来每个挂的学生分别挂了哪些科目。
输出结果:
±--------±--------±------+
| stuname | conname | score |
±--------±--------±------+
| 马杨杨 | 数据库 | 59 |
| 常娜 | JAVA | 56 |
| 宋健 | JAVA | 51 |
| 宋健 | C++ | 50 |
| 谢阳 | 数据库 | 57 |
±--------±--------±------+
所有学生的各个科目成绩:
±--------±--------±------+
| stuname | conname | score |
±--------±--------±------+
| 马杨杨 | JAVA | 72 |
| 马杨杨 | HTML | 60 |
| 马杨杨 | 数据库 | 59 |
| 马杨杨 | C++ | 72 |
| 常娜 | JAVA | 56 |
| 常娜 | HTML | 67 |
| 常娜 | 数据库 | 63 |
| 常娜 | C++ | 69 |
| 宋健 | JAVA | 51 |
| 宋健 | HTML | 82 |
| 宋健 | 数据库 | 78 |
| 宋健 | C++ | 50 |
| 谭捷 | JAVA | 82 |
| 谭捷 | HTML | 76 |
| 谭捷 | 数据库 | 96 |
| 谭捷 | C++ | 89 |
| 谢阳 | JAVA | 90 |
| 谢阳 | HTML | 71 |
| 谢阳 | 数据库 | 57 |
| 谢阳 | C++ | 88 |
±--------±--------±------+
20 rows in set (0.00 sec)
4.查询出来每个挂科学生,挂了几科?
输出结果:
±--------±--------±------------+
| stuname | conname | count(s.id) |
±--------±--------±------------+
| 马杨杨 | 数据库 | 1 |
| 常娜 | JAVA | 1 |
| 宋健 | JAVA | 2 |
| 谢阳 | 数据库 | 1 |
±--------±--------±------------+
5.查询出来指定科目的最高分是谁?
输出结果:
±--------±--------±------+
| stuname | conname | score |
±--------±--------±------+
| 宋健 | HTML | 82 |
| 谭捷 | 数据库 | 96 |
| 谭捷 | C++ | 89 |
| 谢阳 | JAVA | 90 |
±--------±--------±------+
6.查询出来个人考的最高分的学科是哪个。
输出结果:
±--------±--------±------+
| stuname | conname | score |
±--------±--------±------+
| 马杨杨 | JAVA | 72 |
| 马杨杨 | C++ | 72 |
| 常娜 | C++ | 69 |
| 宋健 | HTML | 82 |
| 谭捷 | 数据库 | 96 |
| 谢阳 | JAVA | 90 |
±--------±--------±------+
7.查询出来每个科目的平均分并按照降序排序。
输出结果:
±--------±-----------+
| conname | avg(score) |
±--------±-----------+
| C++ | 73.6000 |
| HTML | 71.2000 |
| 数据库 | 70.6000 |
| JAVA | 70.2000 |
±--------±-----------+
8.查询出来所有学生的平均分,并按照升序排序。
输出结果:
±--------±-----------+
| stuname | avg(score) |
±--------±-----------+
| 常娜 | 63.7500 |
| 宋健 | 65.2500 |
| 马杨杨 | 65.7500 |
| 谢阳 | 76.5000 |
| 谭捷 | 85.7500 |
±--------±-----------+
5 rows in set (0.00 sec)