多表查询、子查询、分组函数

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值