要删除学习叶平 老师课程的成绩表(SC)记录,需要多表关联定位数据:
- 从
Teacher表找到叶平的教师编号t_no - 通过
t_no在Course表找到对应课程编号c_no - 通过
c_no在SC表找到需要删除的成绩记录
SQL 实现代码
MySQL / Oracle 通用写法(推荐,兼容性最好)
sql
-- 删除学习叶平老师课程的SC表记录
DELETE FROM sc
WHERE sc.c_no IN (
-- 子查询:获取叶平老师教授的所有课程编号
SELECT course.c_no
FROM course
JOIN teacher ON course.t_no = teacher.t_no -- 课程表关联教师表
WHERE teacher.tname = '叶平' -- 筛选教师姓名为叶平
);
多表连接删除写法(MySQL 专用)
sql
-- MySQL 多表连接删除
DELETE sc
FROM sc
JOIN course ON sc.c_no = course.c_no
JOIN teacher ON course.t_no = teacher.t_no
WHERE teacher.tname = '叶平';
代码说明
- 核心逻辑 :通过
教师表→课程表→成绩表的关联关系,精准定位要删除的成绩记录 - 子查询作用 :先查出
叶平老师教的所有课程编号,再删除成绩表中对应课程的记录 - 安全提示 :执行
DELETE前,建议先执行SELECT查询确认要删除的数据,避免误删:
sql
-- 先查询验证数据(必做!)
SELECT * FROM sc
WHERE sc.c_no IN (
SELECT course.c_no
FROM course
JOIN teacher ON course.t_no = teacher.t_no
WHERE teacher.tname = '叶平'
);
总结
- 多表删除需逐层关联定位目标数据
- 优先使用
IN子查询写法,适配所有数据库 - 删除前必须用
SELECT验证数据,防止误操作