解析MySQL左(右)连接在筛选和筛选上的区别

MySQL查询使用mysql中的左(右)连接过滤条件来检查在查询和在哪里查询的数据之间是否存在差异,这是一个问题。
你可能只看两个关键词,并没有看到任何问题,所以我们用实际例子来看看是否有任何区别。

例如,有两个表结构
表1的结构
复制代码代码如下所示:
如果表滴存在;
创建表(a)
id int(1)不是null,
主键(id)
= MyISAM引擎默认的字符集latin1);

表2的结构
复制代码代码如下所示:
如果存在B表;
创建表(b)
id int(1)不是null,
主键(id)
= MyISAM引擎默认的字符集latin1);

表1插入数据
复制代码代码如下所示:
插入值(1);
插入值(2);
插入值(3);
插入值(4);
插入值(5);
插入一个值(6);

表二插入数据
复制代码代码如下所示:
插入到B值(1);
插入到B值(2);
插入到B值(3);

在A完成后,B表数据如下:





声明一个
复制代码代码如下所示:
Select A.ID as AID, B.ID as BID from A left join B

表2
复制代码代码如下所示:
Select A.ID的援助,作为投标数据从加入B左

上述两种说法的结果是否一致。
无论如何,我没有注意到这两个查询之间没有任何区别({在}之前没有像SQL那样编写)。
让我们看看实际结果。
语句一的查询结果


语句二的查询结果是:



结果发现,两个查询之间存在差异。
为什么会有差异,这与查询顺序和查询顺序有关。
我们知道,标准查询关键字执行序列是从> >,>,>,,,,,,,,,
左联接位于从范围类中,以便先对表进行筛选,然后再将两个表连接起来。
对于结果,在左连接结果中再次筛选结果。
第一个SQL语句查询过程等价于以下:
1:首先是左连接。
复制代码代码如下所示:
Select A.ID的援助,作为投标数据从加入B左

查询结果如下


2:重新查询结果的数据标<2。
这就是我们在上面看到的。
第二个SQL语句查询过程相当于:
1:第一,根据条件等于第一筛选表选择B表:


2:查询结果已添加到左侧联接的表中,这就是为什么我们看到第二个查询的SQL将保留表的原因。
在使用和在哪里必须注意:
(1)后面的筛选条件主要是针对主表的关联{ }选择条件。
例如
复制代码代码如下所示:
Select A.ID的援助,作为报价数据加入B = B = 3左

此查询的结果是



意外情况与我们预期的不一样,并且屏蔽了援助= 3的数据。
但我们也发现,援助和援助在1至2的相应价值是NULL,只有关联表满足条件值表屏幕选择。
附表后面的主表只满足主表选择条件,而主值表或圆表。
(2)主表的筛选条件应放在后面,不应放在后面。
(3)我们应该区分相关表。如果条件仅在连接应该连接之后才进行查询。
被安置在。
如果在连接完成后要进行筛选,则应将条件放在后面。
(4):对相关的表,我们可以先做连接查询
所以第二个SQL等价于
复制代码代码如下所示:
Select A.ID的援助,b1.id投标
从左连接(B.ID选择从B那里数据< 3)B1

所有的人都被测试的MySQL5.1