为了账号安全,请及时绑定邮箱和手机立即绑定

关于无限极分类的一些理解

    话说这一小节有些地方确实不好理解,可能由于时间的关系,有些关键的地方老师都是一语带过,并没有作详细的解说。这就在一定程度上增加了我们理解上的困难,其实课程本身并不难理解。下面我说说自己的一些理解,如有不对之处,还请各位指点。

    首先有几个关键的概念要搞清楚:1、LEFT [OUTER] JOIN 即左外连接 是怎样显示记录的?

                                                       2、在自身连接中怎么区分子表和父表?

 

   关于第一个问题,盗用一下老师的PPT:

http://img1.sycdn.imooc.com//591b1ca40001972e07220355.jpg

                                                                                               

这里所有说的左表和右表是以 LETF JOIN 为参照的,例如:表1 LEFT JOIN 表2; 表示显示表1的全部记录,表2只显示符合连接条件的记录。至于表1和表2,哪个是子表,哪个是父表,依照LEFT JOIN是没法判断的。

 

   第二个问题,我们来看一段代码:

http://img1.sycdn.imooc.com//591b20e700011ce405190056.jpg

在本节课程中,可以依照ON后面的表达示来判断子表和父表:拥有parent_id这一列的表是子表,反之就是父表。如果你写成这样 s.type_id = p.parent_id;那么此时就是把s当作父表,把p当作子表。s与p都只是一个名字而已,并不是区分子表与父表的标准,只不过为了方便识别,我们习惯把子表取名为s(son), 把父表取名为p(parent)。

 

   下面来总结一下这节课程的两个主要内容,先把原表放上来

http://img1.sycdn.imooc.com//591b2a400001471403460340.jpg


第一个内容:把上图的表当作子表,查询其上面的父类,返回的字段包括: 子类id,子类名称,父类名称。


为了方便理解,我先这样写一个:

http://img1.sycdn.imooc.com//591b2fd1000112da06470401.jpg

我们看到,家用电器和电脑、办公这两类没有父类,因为他们是最上面的类,只有子类,没有父类。由于我们把子表放在了LEFT JOIN的左边,所以显示了子表的所有记录,而父表只显示符合连接条件的记录,如果不存在父类,则显示NULL。

  

  老师课程上返回的是三列,我们把父类id截取掉,结果如下:

http://img1.sycdn.imooc.com//591b30df0001a1c906490386.jpg


第二个内容就是:把原表当作父表,查询其下面拥有的子类。返回的字段有:父类ip,父类名称,子类名称。


为了方便理解,我先这样写一个:

http://img1.sycdn.imooc.com//591b36da000178ed06490488.jpg

我们看到父表中有很多没有子类,这是因为他们是最底层的类别,他们只有父类,没有子类。由于我们把父表放在了LEFT JOIN的左边,所以显示了父表的所有记录,子表只显示符合连接条件的记录,如果不存在子类,则显示NULL。

 

    老师课程上返回的是三列,我们把子类id截取掉,结果如下:

http://img1.sycdn.imooc.com//591b3abe0001e57906460489.jpg


然后就是对上面的表,依照父类的id进行分组,并统计子类的数目:

http://img1.sycdn.imooc.com//591b3d940001b67106470381.jpg


正在回答

6 回答

沙发!

0 回复 有任何疑惑可以回复我~
#1

慕圣0830664 提问者

送分了。。。
2017-05-17 回复 有任何疑惑可以回复我~

你确定你这是无限极分类理解? 你这是左表连查和右表连查吧

0 回复 有任何疑惑可以回复我~

拜读  牛逼!!

0 回复 有任何疑惑可以回复我~

在本节课程中,可以依照ON后面的表达示来判断子表和父表:拥有parent_id这一列的表是子表,反之就是父表。如果你写成这样 s.type_id = p.parent_id;那么此时就是把s当作父表,把p当作子表。s与p都只是一个名字而已,并不是区分子表与父表的标准,只不过为了方便识别,我们习惯把子表取名为s(son), 把父表取名为p(parent)。

错了吧?

0 回复 有任何疑惑可以回复我~
#1

SHFa

:拥有parent_id这一列的表是子表,反之就是父表。如果你写成这样 s.type_id = p.parent_id;那么此时就是把s当作父表,把p当作子表
2018-08-03 回复 有任何疑惑可以回复我~

为什么把父表放在左边会显示成这样???父类id有两个1

0 回复 有任何疑惑可以回复我~

点赞!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

关于无限极分类的一些理解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信