53-2·100 sqlserver 多对多表查询详情注释版本 老师表学生表中间表

 

复制代码
-- 多对多表查询 

/*

创建student(id,name)   teacher(id,name)  和关系表 t_s(tid,sid)
 
保存以下数据:
 仓老师:小明  小红 小绿 小蓝  
 范老师:小张 小李

1. 查询每个学生对应的老师
 
2. 查询苍老师的学生有哪些
 
3. 查询小红的老师是谁 */


--学生表
create table student(
ID int identity(1,1),
name varchar(100),
primary key(ID)
);
go
--查询学生表 
select * from student;
--add  data 
insert into student(name)values('小明');
insert into student(name)values('小红');
insert into student(name)values('小绿');
insert into student(name)values('小蓝');
insert into student(name)values('小张');
insert into student(name)values('小李');

--老师表
create table teacher(
ID int identity(1,1),
name varchar(100),
primary key(ID)

);
go

--老师表02
create table teacher02(
ID int  null,
name varchar(100),


);
go
select * from teacher02;

--查询老师表
select * from teacher;
--add data
insert into teacher(name)values('仓老师');
insert into teacher(name)values('范老师');
insert into teacher02(ID,name)values(3,'仓老师');
insert into teacher02(ID,name)values(6,'范老师');
--delete data
delete from teacher where name='范老师';

--一般关联查询
select * from teacher as a
left join student as b
on a.ID=b.ID;
--中间关联表 demo01   中间表关联老师表(主键ID),和学生表的(主键)ID
create table t_s(
ID int identity(1,1),
tid int null, --老师ID 外键01
sid int null,--学生ID 外键02
primary key(ID),
--外键01 老师外键
foreign key(tid) references teacher(ID),
--外键02 学生外键
foreign key(sid) references student(ID),

);
go
--查询中间表
select * from t_s;
--add data
insert into t_s(tid,sid)values(1,2);
/*
 01 查询每个学生. 学生信息来自于学生表.
 02 对应老师. 老师来自老师表 
 中间表作为用户表使用测试 01 
  */
--1. 查询每个学生对应的老师
select * from t_s as a  --假定中间表为主表
left join teacher as b  --老师表
on a.tid=b.ID
left join student as c  --学生表
on c.ID=b.ID
where c.ID<4;   --对应的老师就查询出来了. 用老师表中的主键ID





/*

1 先需要拿到全部学生的信息
2 再关联老师,查询对应老师
3 条件 


*/
select * from student;
--1. 查询每个学生对应的老师
select * from student as a
left join teacher as b 
on a.ID=b.ID;

--1-02. 查询每个学生对应的老师
select * from student as a
left join teacher02 as b 
on a.ID=b.ID;
--查询老师表02 
select * from teacher02;
--delete data
delete from teacher02 where name='仓老师' and id>1;
/*

1 老师首先数据来源是老师表
 仓老师对应在老师中的ID是什么? ID=1 为例
2 老师的学生数量来源是学生表. 仓老师对应在学生表中的数据值是什么?  ID大于1 小于5的都是仓老师学生. 
3  ID大于1 小于5的都是仓老师学生. 
 主表为老师表,从表为学生测试 01

*/
;
--2. 查询仓老师的学生有哪些
select * from teacher02 as a
left join student as b
on a.ID=b.ID
where b.ID>=1 and b.ID<5;
 

--3. 查询小红的老师是谁
select * from t_s as a  --假定中间表为主表
left join student as c  --学生表
on c.ID=a.sid      --01 查询出学生为小红的条件信息数据值内容. 这里是先跟中间表,建立起来关联关系。 然后用中间表,再去关联老师表. 
--02小红在学生表的主键ID 为 2.  --仓老师的主键ID 为 1. 需要条件 小红ID=老师ID才行. 
--03 继续用左关联,去用小红去查询与老师的关系.
left join teacher as b  --老师表
on a.tid=b.ID; 

 
复制代码

效果

  查询结果与简化版本,完全一样的结果. 

  

 

posted @   优敏行  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示