mysql之表的关联关系和多表查询
1、’基本模式有多对一,多对多,一对一。关联的两个基本概念为外键列和参照列
典型的多对一模式,很普遍,如部门表和员工表,即一个部门可以有多个员工。
对于多对多的模式,就需要建立中间表,将其转换为多对一的模式,中间表就是记录路径信息。
添加外键的基本语句:
ALTER TABEL student ADD CONSTRAINT fk_id FOREIGN KEY(gid) REFERENCES grade(id);
注意主键是添加在表student中的。
很明显,删除时先删除外键列,再删除参照列。
2、设计一张单个表不难,难得是设计各个表之间的关联关系,这也是客观世界中对象和对象存在着千丝万缕的联系。这个要绘制模型图来理解。
基本模式:t1 CROSS JOIN t2,
t1 INNER JOIN T2 ON ,以及LEFTJOIN 和RIGHT JOIN。
这些都需要在实践中使用,多练习才行,写一句sql语句:
SELECT A .num,name FROM STUDENT A LEFT JOIN AWARD B ON A.num=B.id WHERE A.num='2017';
in也可以达到多表查询的效果,但是经过测试,in比join的效率低很多,不知道具体怎么解释。
3、in和exists的使用
在两个表中使用黑名单过滤,则需要用到exists语句。
//xml <select id="findByIdList" resultMap="BaseResultMap"> SELECT * FROM sys_user <where> <if test="list!= null and list.size() > 0"> id IN <foreach collection="list" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </if> </where> </select>
日进有功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义