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 
复制代码

效果

部分效果  

 

posted @   优敏行  阅读(499)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示