数据库中的自连接
admin
2023-05-23 04:42:40
0

今天强哥要和大家分享数据库中自连接的知识。

        在数据库设计中,员工上下级关系如何表示,员工和员工下属关系如何表示?下属和下属的下属关系如何表示?树形菜单结构中,父节点和子节点的关系如何表示?论坛帖子中,主贴与回帖的关系如何表示?

        这三种关系都涉及到表的自连接问题,下面我们以员工上下级关系进行讲解分析。

        对于员工上下级关系,很多数据库初学者,可能会把数据放在两个表中,一个表放上级员工,另一个表放下属员工,设置外键进行两表的关联。如果这样来处理,大家想象一下,如果一个员工既有上级,又有下属,那么这个员工应该出现在上级表中,还是下属表中呢?这是一个很纠结的问题。

       实际工作中,我们把上级和下属都放在一个表中。在一个表中,将这种上下级关系清晰地表示出来。举一个例子,唐僧是一个领导,他有两个手下,一个是孙悟空,另一个是猪八戒。孙悟空手下有个下属叫做猴小七,猪八戒手下有个下属叫做猪小二,那么数据表设计出来应该是这样的。


数据库中的自连接员工信息表employee


      分析一下这个表,唐僧的父序号为0,而表中没有序号为0的数据,所以唐僧是没有上级的。孙悟空和猪八戒的父序号都为1,唐僧的序号为1,所以孙悟空和猪八戒的上级都是唐僧。猴小七的父序号是2,而孙悟空的序号为2,所以猴小七的上级是孙悟空。猪小二的父序号是3,而猪八戒的序号是3,所以猪小二的上级是猪八戒。

       如何在同一个表中组织这种父子关系的数据大家看懂了,下面给大家讲讲如何通过SQL命令来获得某个人的直接下级的名字。

       比如说,唐僧的下级有哪些人?如果表中数据很多,这不是一眼能看出来的。而且能看出来没用,我们在做软件开发时,是需要通过SQL命令提取出来,并在程序中特定的地方使用的。

       两个表中的数据进行关联查询,大家应该都会。一个表自身数据的关联查询要稍微复杂一些,这就是强哥这里要给大家讲的自连接查询。为了讲清楚这个例子,我画了下面这个图。这个图中,把前面那张表当成两张表来处理,分别取别名a和b。


数据库中的自连接自连接分析图例


       通过这个表,我们很容易看出来,我们要查找唐僧的所有下级的姓名,就要把b表中的父序号等于a表中序号的数据进行连接,并从连接结果中,找到a表中姓名为唐僧的数据。据此分析,假设数据库中表的名字为employee,可以写出如下SQL命令。

 select b.name from employee a, employee b where a.id=b.pid and a.name=’唐僧’

       要查找别的人的下级,只需要把名字替换一下就可以了。表的自连接查询是数据设计的基本功,大家都必须要掌握。


相关内容

热门资讯

国企举报前高管利用职务便利侵吞... 2013年,北京国润水清环境工程有限公司(以下简称“国润公司”)通过招商引资,与当地政府签订郑州市上...
原创 三... 近日,中国移动宣布构建 AI‑eSIM 多生态智能服务体系,推出 “流量 + 词元 + 智能体” 融...
河南省纪委监委:李涛被查 据周口市纪委监委消息:周口市港航管理局党组成员、副局长李涛涉嫌严重违纪违法,目前正接受周口市纪委监委...
郑州挂牌两宗宅地,底价5.84... 【大河财立方消息】 5月19日,郑州市自然资源和规划局公告,决定以网上挂牌方式出让郑政出〔2026〕...
坚定不移沿着习近平总书记指引的... “要持之以恒加强重点流域生态保护治理,深化污染防治攻坚,筑牢生态安全屏障。”——习近平丹水北上承嘱托...
坚定不移沿着习近平总书记指引的... “要把这些中华文化瑰宝保护好、传承好、传播好。”——习近平初夏时节,洛阳偃师区,二里头夏都遗址博物馆...
“00后”厨师上门下厨 正在顾客家里做饭的“00后”厨师王展。当“00后”拎着厨具,敲开一扇扇家门,入户做饭正悄然成为一种新...
马斯克起诉OpenAI“诱骗”... 据CCTV国际时讯,当地时间5月18日,美国加利福尼亚州奥克兰的联邦法院陪审团对马斯克起诉美国开放人...
特朗普不甘:要是我加税,就没台... 【文/观察者网 柳白】“本来那些生意全是英特尔的,没有台湾什么事了。”特朗普近期在一次采访中再度剑指...
打响“河南服务”品牌丨特种鞋靴... 一双特种鞋靴,能有多硬核?“这款森林灭火作战防护靴鞋底能承受300摄氏度的高温,就算用火点燃,也能在...