course表 teacher表 sc表 student表查询没学过“叶平”老师课的同学的学号、姓名
时间: 2024-01-20 07:04:03 浏览: 83
好的,根据您的要求,可以使用以下 SQL 语句来查询:
```
SELECT s.id, s.name
FROM student s
WHERE s.id NOT IN (
SELECT sc.student_id
FROM sc
INNER JOIN course c ON sc.course_id = c.id
INNER JOIN teacher t ON c.teacher_id = t.id
WHERE t.name = '叶平'
)
```
这条 SQL 语句会查询出所有没有学过叶平老师课的同学的学号和姓名。具体地,它使用了子查询来找出所有学过叶平老师课程的学生,然后用 NOT IN 子句来排除这些学生,最终返回没有出现在这个子查询结果中的学生信息。
相关问题
Mysql中 数据表: 学生表Student( Sid ,Sname ,Sage ,Ssex) --SId学生编号,Sname学生姓名,Sage出生年月,Ssex学生性别 教师表Teacher( Tid ,Tname) --TId教师编号,Tname教师姓名 课程表Course(Cid ,Cname Tid) --CId课程编号,Cname课程名称,TId教师编号 成绩表SC( Sid ,Cid ,Score) --SId学生编号,CId课程编号,score分数 1、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;2、检索“004”课程分数小于60,按分数降序排列的同学学号; 3、查询姓‘李’的老师的个数; 4、查询没学过“叶平”老师课的同学的学号、姓名;
1. 查询各科成绩最高和最低的分:
```mysql
-- 最高分
SELECT Cid, MAX(Score) AS '最高分'
FROM SC
GROUP BY Cid;
-- 最低分
SELECT Cid, MIN(Score) AS '最低分'
FROM SC
GROUP BY Cid;
```
2. 检索“004”课程分数小于60,按分数降序排列的同学学号:
```mysql
SELECT Sid
FROM SC
WHERE Cid = '004' AND Score < 60
ORDER BY Score DESC;
```
3. 查询姓‘李’的老师的个数:
```mysql
SELECT COUNT(*)
FROM Teacher
WHERE Tname LIKE '李%';
```
4. 查询没学过“叶平”老师课的同学的学号、姓名:
```mysql
SELECT Student.Sid, Sname
FROM Student
LEFT JOIN SC ON Student.Sid = SC.Sid
WHERE SC.Sid IS NULL OR SC.Cid NOT IN (
SELECT Cid
FROM Course
WHERE Tid = (
SELECT Tid
FROM Teacher
WHERE Tname = '叶平'
)
);
```
sql查询没学过“叶平”老师课的同学的学号、姓名;
可以使用如下的 SQL 语句来查询没学过“叶平”老师课的同学的学号和姓名:
```
SELECT s.id AS 学号, s.name AS 姓名
FROM student s
WHERE s.id NOT IN (
SELECT DISTINCT sc.student_id
FROM score sc
INNER JOIN course c ON sc.course_id = c.id
INNER JOIN teacher t ON c.teacher_id = t.id
WHERE t.name = '叶平'
);
```
其中,`student` 表存储了所有同学的学号和姓名信息,`score` 表存储了每个同学的选课和成绩信息,`course` 表存储了所有课程的信息,`teacher` 表存储了所有教师的信息。使用子查询和 `NOT IN` 操作来查询没学过“叶平”老师课的同学的学号和姓名。需要注意的是,这里使用了 `DISTINCT` 操作来去重,以避免同一个学生选了多门“叶平”老师的课程导致重复。
阅读全文