17、左连接语法及应用

2018-12-06  本文已影响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照常使用。

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

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

最终,也就是如下语句:

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读