无外键时如何关联引用?能否通过课程名而非ID查询学生姓名?
不用Course_id,通过Course_name查询学生姓名的方法
当然可以!完全不需要依赖已知的Course_id,直接通过Course_name就能检索到对应课程的学生姓名,这里给你两种实用的实现方案:
1. 使用内连接(JOIN)关联两张表
这是最常用的关联查询方式,通过两张表中逻辑对应的Course_id字段把数据关联起来,再筛选目标课程名称:
SELECT s.Name FROM Student s JOIN Course c ON s.Course_id = c.Course_id WHERE c.Course_name = 'BSC';
这里给表起了别名s(Student)和c(Course)让语句更简洁。JOIN会自动匹配两张表中Course_id相同的记录,之后通过WHERE子句过滤出课程名为'BSC'的条目,就能得到所有被该课程录取的学生姓名。
2. 使用子查询(Subquery)先获取课程ID
如果更习惯分步逻辑,可以先用子查询从Course表中拿到'BSC'对应的Course_id,再用这个ID去Student表中筛选学生:
SELECT Name FROM Student WHERE Course_id = (SELECT Course_id FROM Course WHERE Course_name = 'BSC');
这种写法的逻辑很直观:括号里的子查询会先执行,返回'BSC'课程的Course_id,外层查询再用这个ID匹配学生。如果存在多个同名课程(比如多个不同ID的课程都叫'BSC'),可以把=换成IN来兼容这种情况:
SELECT Name FROM Student WHERE Course_id IN (SELECT Course_id FROM Course WHERE Course_name = 'BSC');
额外说明
值得一提的是,你的表定义里Student的Course_id是外键,但这两种方法不依赖外键约束本身——就算没有设置外键,只要两张表的Course_id字段在业务逻辑上是对应的(比如Student的Course_id确实是Course表中存在的ID),这两种写法都能正常运行。外键只是用来保证数据一致性的约束,不会影响关联查询的语法。
内容的提问来源于stack exchange,提问作者gaufler
相关产品推荐
相关产品推荐

