53-2·100 sqlserver 多对多表查询详情注释版本 老师表学生表中间表
1
-- 多对多表查询 /* 创建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;
效果
查询结果与简化版本,完全一样的结果.
分类:
数据库SQLserve
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性