查询没学过"张珊"老师讲授的任一门课程的学生姓名 查询到张珊老师讲的课程

时间: 2023-11-28 12:03:58 浏览: 25
这个问题和上一个问题是相反的,需要查询所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名,并查询出张珊老师讲授的课程。假设我们有以下三张表: 1. 学生表(student):包含学生的信息,如学生ID、姓名等。 2. 课程表(course):包含课程的信息,如课程ID、课程名称等。 3. 教师表(teacher):包含教师的信息,如教师ID、姓名等。 这三张表之间可以通过两个中间表(选课表和授课表)来建立关联,中间表的结构如下: 4. 选课表(select_course):包含学生ID和课程ID,表示学生选了哪些课程。 5. 授课表(teach_course):包含教师ID和课程ID,表示教师讲授了哪些课程。 我们需要查询的是所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名,并查询出张珊老师讲授的课程,那么我们可以按照以下步骤进行查询: 1. 首先,我们需要找到张珊老师所讲授的所有课程。假设张珊老师的教师ID为1,那么我们可以通过以下SQL语句查询到所有张珊老师讲授的课程: ``` SELECT course_id FROM teach_course WHERE teacher_id = 1; ``` 2. 然后,我们需要查询所有学过其他老师讲授的课程,但是没有学过张珊老师讲授的课程的学生姓名。假设我们要查询的是学生姓名,那么我们可以通过以下SQL语句查询: ``` SELECT student.name FROM student WHERE student.id IN (SELECT select_course.student_id FROM select_course WHERE select_course.course_id IN (SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id <> 1) AND select_course.student_id NOT IN (SELECT select_course.student_id FROM select_course WHERE select_course.course_id IN (SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id = 1))); ``` 这条SQL语句的意思是:先查询出所有其他老师讲授的课程ID,然后在选课表中查询出学过这些课程但是没有学过张珊老师讲授的课程的学生ID,最后在学生表中查询出这些学生的姓名。 3. 最后,我们需要查询出张珊老师讲授的课程。假设我们要查询的是课程名称,那么我们可以通过以下SQL语句查询: ``` SELECT course.name FROM course WHERE course.id IN (SELECT teach_course.course_id FROM teach_course WHERE teach_course.teacher_id = 1); ``` 这条SQL语句的意思是:在授课表中查询出张珊老师讲授的课程ID,然后在课程表中查询出这些课程的名称。 这就是一个稍微复杂一些的多表关联查询的例子。希望能对你有所帮助。

相关推荐

-- 创建数据库 CREATE DATABASE testing; -- 连接数据库 USE testing; -- 创建学生表 CREATE TABLE student (sid VARCHAR(10) PRIMARY KEY, sname VARCHAR(10) NOT NULL, sbirth DATE, ssex CHAR(2) ); -- 创建教师表 CREATE TABLE teacher (tid VARCHAR(10) PRIMARY KEY, tname VARCHAR(10) NOT NULL ); -- 创建课程表 CREATE TABLE course (cid VARCHAR(10) PRIMARY KEY, tname VARCHAR(10) NOT NULL, tid VARCHAR(10) NOT NULL, FOREIGN KEY(tid) REFERENCES teacher(tid) ); -- 创建成绩表 CREATE TABLE sc (sid VARCHAR(10) NOT NULL, cid VARCHAR(10) NOT NULL, score FLOAT(3,1), PRIMARY KEY(sid,cid), FOREIGN KEY(sid) REFERENCES student(sid), FOREIGN KEY(cid) REFERENCES course(cid) ); -- 在学生表中插入数据 INSERT INTO student VALUES ('S01', '赵雷', '1990-01-01', '男'), ('S02', '钱电', '1990-12-21', '男'), ('S03', '孙风', '1990-05-20', '男'), ('S04', '李云', '1990-08-06', '男'), ('S05', '周梅', '1991-12-01', '女'), ('S06', '吴兰', '1992-03-01', '女'), ('S07', '郑竹', '1989-07-01', '女'), ('S08', '王菊', '1990-01-20', '女'), ('S09', '李云', '1990-01-20', '男'), ('S10', '张楠', '1991-05-29', '女'), ('S11', '张飞', '1992-06-10', '男'), ('S12', '廖云', '1992-06-06', '男'); -- 在教师表中插入数据 INSERT INTO teacher VALUES ('T01', '张珊'), ('T02', '李雨'), ('T03', '王晟'); -- 在课程表中插入数据 INSERT INTO course VALUES ('C01', 'PS', 'T02'), ('C02', 'C语言', 'T01'), ('C03', 'JAVA', 'T03'); -- 在成绩表中插入数据 INSERT INTO sc VALUES ('S01', 'C01', 80.0), ('S01', 'C02', 90.0), ('S01', 'C03', 99.0), ('S02', 'C01', 70.0), ('S02', 'C02', 60.0), ('S02', 'C03', 80.0), ('S03', 'C01', 80.5), ('S03', 'C02', 80.0), ('S03', 'C03', 80.0), ('S04', 'C01', 50.0), ('S04', 'C02', 30.0), ('S04', 'C03', 20.0), ('S05', 'C01', 76.0), ('S05', 'C02', 87.0), ('S06', 'C01', 31.0), ('S06', 'C03', 34.0), ('S07', 'C02', 89.5), ('S07', 'C03', 98.0), ('S08', 'C01', 75.0), ('S08', 'C02', 69.0), ('S08', 'C03', 92.0); -- 2.查询平均成绩大于60分的同学的学号和平均成绩; SELECT AVG(score),sid FROM sc WHERE AVG(score)>60; -- 10.查询没有学全所有课的同学的学号、姓名;

最新推荐

recommend-type

1xbet.apk

1xbet.apk
recommend-type

基于Matlab的BP神经网络的非线性系统建模-非线性函数拟合

【作品名称】:基于Matlab的BP神经网络的非线性系统建模-非线性函数拟合 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于Matlab的BP神经网络的非线性系统建模-非线性函数拟合
recommend-type

java等值面图片生成代码实现功能.zip

采用java引用geotools生成等值面,集成sld按照指定样式生成等值面图片
recommend-type

111.py

111.py
recommend-type

2247.瑞金北关杨氏族谱: 不分卷:[江西瑞金].pdf

2247.瑞金北关杨氏族谱: 不分卷:[江西瑞金]
recommend-type

中文翻译Introduction to Linear Algebra, 5th Edition 2.1节

中文翻译Introduction to Linear Algebra, 5th Edition 2.1节 线性代数的核心问题是求解方程组。这些方程都是线性的,即未知数仅与数相乘——我们绝不会 遇见 x 乘以 y。我们的第一个线性方程组较小。接下来你来看看它引申出多远: 两个方程 两个未知数 x − 2y = 1 3x + 2y = 11 (1) 我们一次从一个行开始。第一个方程 x − 2y = 1 得出了 xy 平面的一条直线。由于点 x = 1, y = 0 解 出该方程,因此它在这条直线上。因为 3 − 2 = 1,所以点 x = 3, y = 1 也在这条直线上。若我们选择 x = 101,那我们求出 y = 50。 这条特定直线的斜率是 12,是因为当 x 变化 2 时 y 增加 1。斜率在微积分中很重要,然而这是线 性代数! 图 2.1 将展示第一条直线 x − 2y = 1。此“行图”中的第二条直线来自第二个方程 3x + 2y = 11。你 不能错过两条线的交点 x = 3, y = 1。点 (3, 1) 位于两条线上并且解出两个方程。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

识别MATLAB微分方程求解中的混沌行为:分析非线性方程混沌行为的实用技巧

![matlab求解微分方程](https://img-blog.csdnimg.cn/2021062810300367.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTQ3OTY3OA==,size_16,color_FFFFFF,t_70) # 1. MATLAB微分方程求解概述 微分方程是描述物理、工程和金融等领域中动态系统的数学模型。MATLAB提供了强大的工具来求解微分方程,包括内置求解器和自定义函数
recommend-type

physon如何做ERP系统

作为一个AI语言模型,我可以给您提供一些基本的建议和思路: 1.明确需求和目标:在开始开发ERP系统之前,需要明确您的业务需求和目标,了解您的业务流程、流程数据、员工角色和权限、财务管理等方面的要求,这样才能更好的设计和开发ERP系统。 2.选择技术框架和开发工具:选择合适的技术框架和开发工具是ERP系统开发的关键。选择一种流行的技术框架和工具可以提高开发效率和质量。 3.设计数据库:ERP系统需要一个功能强大的数据库来存储数据。设计数据库需要考虑数据的完整性、安全性和可扩展性。 4.设计系统架构:系统架构是ERP系统的骨架,需要考虑系统的可扩展性、可维护性和性能。 5.开发和测试:
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。