首先我们先看题:这题要查询没有学完所有课程的同学的学号和姓名,所以要用到学生表和课程表和成绩表,为什么要连接成绩表呢,因为学生表和课程表是没有关联的,所以我要通过成绩表来把学生表和课程表给关联起来。
这里要连接三张表,所以我用到的是左外连接 SQL 1999语法,这是多表查询内容的一部分。左外连接 SQL 1999语法我大概理解意思是:查询出它满足的条件之外,还有查询出它连接左表的不满足的条件。所以我要用到它,把它们不满足的条件也给查询出来。我们来看下运行结果:可能你会问distinct这个是什么意思,这个是去重复的意思。
当然这只是查询出他们的学号和名字,还没有查询出他们的没有学完所有课程的数据,所以我们要用到子查询和分组函数。分组函数我理解大概的意思应该是:就是作用于一组数据,然后返回那一组的一个值。这里用到分组函数的查询个数的关键字count,而且group by 的意思是只要是select这里的列都要包含在group by 中,而包含在 group by 子句中的列不必包含在select列表中。
而子查询大概意思是首先执行括号内(也就是子查询)的,执行完子查询后,子查询主查询使用,也就是与主查询进行比较,然后把数据筛选出来。而我这用到子查询是为了查询出所有课程的个数是多少,然后进行对比,最后筛选出来没有学完所有课程的学号和姓名。以下是所有课程的个数。
以下是多表查询、子查询、分组函数结合的结果,也就是这题的答案:
多表查询、子查询、分组函数
最新推荐文章于 2022-10-11 19:59:05 发布