55-2·100 sqlserver 多对多关系查询老师,学生表和中间表
--查询学生表 select * from student; --查询老师表全部数据 select * from teacher; --查询中间表03 关联老师表,学生表 select * from t_s; --01 小红的老师是谁 select * from t_s left join student --查询全部的学生都有谁 on t_s.sid=student.ID --中间表的学生ID,等于学生表的主键ID left join teacher --查询学生的老师是谁 on t_s.tid=teacher.ID--中间表的老师ID等于老师表中的主键ID --条件where 子查询? -- 01 小红在中间表中的学生ID是数字几?是2. where t_s.sid=2; -- 查询全部的学生信息 select * from t_s left join student on t_s.sid=student.ID --01 查询显示小明的名字 select name from t_s left join student on t_s.sid=student.id --显示小明的名字,条件查询设置为 where name='小明'; where name='小明'; --02 小明的老师是谁 select * from t_s left join student --关联学生表, 主表 on t_s.sid=student.ID left join teacher --左关联老师表,从表01 on t_s.tid=teacher.id --小明在中间表的TID对应数字是什么? 错误 --01 正确思路是,小明在学生表的ID数字是什么? 是1. 然后条件设置为1,才能正确输出小明的老师. where student.id=1; --02 显示需要字段 学生表中小明的名字字段, 老师表中老师的名字字段 语法是表.字段名即可 select student.name,teacher.name from t_s left join student on t_s.sid=student.id left join teacher on t_s.tid=teacher.id where student.id=1; --03 小绿的老师是谁 select * from t_s left join student on t_s.sid=student.id left join teacher on t_s.tid=teacher.id --z注意是学生表.ID --01 找小绿在学生表中的ID数字是什么? 然后where条件就用学生表名字去点ID对应的数字就行了. 这里查询学生表,知道小绿在学生表中的ID是3. --因此语法格式就是 where studetn.id=3; 其实如果不放到多对多表中,这就是一个简单的条件查询 where student.id= 3; --条件查询基础 --01 单表学生表 小绿对应的ID数字是几? select * from student where id=3; -- 这里单表直接写ID就行,多表中必须要去点这个ID才能用. --查询学生表 select * from student; --查询老师表全部数据 select * from teacher; --查询中间表03 关联老师表,学生表 select * from t_s; /* 2 查询分析 数据 来源 条件 1 苍老师在老师表. 对应ID数字为1. 从表01 2 学生在学生表. 为从表,在下. 从表02 3 有中间表t_s. 为主表. 中间表中的tid指向老师表, sid指向关联学生表. 4 条件查询 */ --2 查询苍老师的学生有哪些 select * from t_s left Join teacher on t_s.tid=teacher.ID --这样子获取到的是全部的老师信息 left Join student on t_s.tid=student.ID-- 拿到全部老师的学生信息. --最核心的是条件查询的1行代码. where teacher.ID= 1; --只有苍老师的学生,就看老师表中苍老师的ID是什么? 1 --部分显示 select teacher.name as 老师名字,student.name as 老师的学生 from t_s left join teacher on t_s.tid=teacher.ID left join student on t_s.sid=student.id -- where teacher.id=1; --2.1 范老师的学生有哪些 select * from t_s left join teacher on t_s.tid=teacher.id left join student on t_s.sid=student.id --01 条件查询,范老师在老师表中的ID是什么? --1.1 逻辑分析:这个ID关联了中间表的tid,所以ID指向的数据,同步更新了查询的结果. where teacher.id=2; -- select teacher.name,student.name from t_s left join teacher on t_s.tid=teacher.id left join student on t_s.sid=student.id where teacher.id=2; --1 查询每个学生对应的老师.如果没有中间表,直接左关联就可以查询实现了. select * from t_s left join student on t_s.sid=student.id --查询获取到全部每个学生的信息 left join teacher on t_s.tid=teacher.id --部分字段 --01 注意,如果其中学生表起别名了,开头就一定用别名点字段才行,否则报错. select b.name, teacher.name from t_s as a left join student as b on a.sid=b.id left join teacher on a.tid=teacher.id
效果
部分效果
分类:
数据库SQLserve
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?