MySQL 自然左外连接与左外连接

MySQL NATURAL LEFT OUTER JOIN vs LEFT OUTER JOIN

如果我有以下情况:

**table 1
person| money
    A | 2
    B | 10
-------------


**table 2 
person| cars
    A | 3
    C | 10

----------------

两者有什么区别?

SELECT * FROM table1 NATURAL LEFT OUTER JOIN table2;

产生:

person| money |cars
    A | 2     |3
    B | 10    |NULL
---------------

SELECT * FROM table1 LEFT OUTER JOIN table 2 ON person

我认为你的非NATURAL版本有错别字,你比较的是:

SELECT * FROM table1 NATURAL LEFT OUTER JOIN table2;

SELECT * FROM table1 LEFT OUTER JOIN table2 USING ( person );

首先,我希望两者的结果相等。**

其次,在您的案例中,我看不到非 NATURAL/USING 版本的任何意义,因为您只有一列是共同的,并且它们的名称一致。

** 我打算用 "relationally speaking" 来限定(例如列顺序和行顺序不相关)但是 OUTER JOIN 明确设计用于生成空值,这在关系模型中没有位置!因此,我建议您完全避免 OUTER JOIN 并采取另一种方法,例如对于没有输入 table2:

的人,使用 0(汽车)作为默认值似乎是完全合理的
SELECT person, money, cars 
  FROM table1 
       NATURAL JOIN table2
UNION
SELECT person, money, 0 AS cars 
  FROM table1 
 WHERE person NOT IN ( SELECT person FROM table2 );