SQL查询——SQL LEFT JOIN/SQL RIGHT JOIN

本文通过一个具体的案例,展示了如何利用SQL中的外连接来查询每位导师所指导的学生数量,特别是对于那些尚未指导学生的导师也能正确返回其学生数为0的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在实际情况下,比如在一个大学里,有很多老师,老师都有自己的研究方向和职称。并且,可能并不是每个老师都带有研究生,如果一个新来的老师,可能还没有带研究生。所以,如果领导要求查出所有老师带研究生的数量(没有带研究生的为0),那么就需要用到左/右外连接的查询。

本文将针对上述的类似情况,进行分析和给出实际的解决方案。

 

本文的表结构:

  • 研究生表结构:

CREATE TABLE `g_student` (
  `gid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `start_time` date DEFAULT NULL,
  `tid` int(11) DEFAULT NULL,
  PRIMARY KEY (`gid`),
  KEY `FK_student_teacher` (`tid`),
  CONSTRAINT `FK_student_teacher` FOREIGN KEY (`tid`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

  • 导师表结构:

CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `job_title` varchar(20) DEFAULT NULL,
  `major` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

  • 导师表数据

insert  into `teacher`(`tid`,`name`,`job_title`,`major`) values

(1,'Shen','professor','image'),

(2,'刘','教授','数据库'),

(3,'黄','副教授','机器学习'),

(4,'黄春','讲师','多媒体'),

(5,'王','副教授','机器学习');

  • 研究生表数据:

insert  into `g_student`(`gid`,`name`,`gender`,`start_time`,`tid`) values

(1,'A','男','2015-01-01',1),

(2,'B','男','2015-09-01',2),

(3,'C','男','2015-09-01',3),

(4,'D','女','2015-09-01',1);

查询项目

  • 请查出每个导师所带研究生的数量。

分析:

不是每个老师都带有研究生,所以没有带研究生的老师对应的研究生数量应为0。因此需要采用外连接

SELECT COUNT(gs.name), t.`name` FROM g_student gs RIGHT JOIN teacher t
ON gs.`tid`=t.`tid`
GROUP BY gs.`tid` ;

这里,如果要使用left join,那么g_student 和teacher的位置需要交换

转载于:https://www.cnblogs.com/ithaibo-sit/p/4473574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值