美文网首页
17、左连接语法及应用

17、左连接语法及应用

作者: 小碧小琳 | 来源:发表于2018-12-06 21:55 被阅读0次

    一、左连接的动态演示

    现在有两个表,一个goods表(不包含cat_name),一个是category表(只有cait_id和cat_name两个字段)

    我们在goods表中只选择三个字段,然后与category表进行对比,如下图:

    左边goods表中有32个物品,右边category有14个cat_name(少了11)。那么左边goods表与右边category表从上到下两两交叉匹配,共有32*14次匹配。

    其中,左边goods表不动,右边category表从上往下进行匹配,在goods表中第一行KD876挨个匹配时,与cat_id=15不匹配,cat_id=14不匹配,一直到cat_id=4时匹配。

    然后,第二行诺基亚N85同样匹配,与category表中的cat_id=8进行匹配,专门留下这一行的数据。

    按照这个思路,goods表不动,category表不断地从上往下循环滑动,与左边的每一行进行匹配并找到相匹配的行。

    二、左连接的语法表示

    假设A表在左,不动。B表在A表的右边滑动。
    A表与B表通过一个关系来筛选B表的行。

    A left join B on 条件 条件为真,则B表对应的行取出

    其中,左半部分

    也就是说,可以把左半部分看成一个表C,然后对C表可以再做查询。

    问:C表可以查询的列有哪些?
    答:AB的列都可以查(因为是两张表组成的新表),自然where,group,having,order by,limit照常使用。

    三、报价表的第三个改进版(用左连接来查询)

    用左连接,新手的话建议分成两步来写:

    • 第一步:先根据“A left join B on 条件”得到已经关联好的表C(即把下列语句得到的结果集当做表C看)
    • 第二步:从表C中查询,得到最终想要的结果

    最终,也就是如下语句:

    带入PHP中,利用PHP得到报价单:

    可见,结果与前两篇文章的结果是相同的。这次的实现效率,提升了许多。因为在左连接的过程中,用上了索引(在每一次匹配中,直接利用索引找到该行,有点类似于哈希表的效率?暂时不清楚)。

    比如,我们想要在得到表C以后,我们直接用where筛选出第4个栏目的商品。

    其中,其中左连接以后,再从得到的结果集中查询cat_id等于4的商品。

    相关文章

      网友评论

          本文标题:17、左连接语法及应用

          本文链接:https://www.haomeiwen.com/subject/zseacqtx.html