为什么
LEFT INNER JOIN
被弃用、删除或不再推荐?
连接语法首先指定驱动表(使用
LEFT
或 RIGHT
),然后指定连接方法(INNER
或 OUTER
)。
据我所知,连接语法首先指定驱动表
我承认在构建查询时以这种方式思考通常很有用。然而,事实是 INNER JOIN 根本没有真正的“驱动表”。无论从左侧还是右侧开始,结果都是相同的,数据库将使用它认为更有效的一侧作为起点。因此,从功能角度来看,对于 INNER JOIN,LEFT 与 RIGHT 没有完成任何事情,而且我认为大多数数据库类型根本不允许对 INNER JOIN 使用 LEFT 与 RIGHT。 更糟糕的是,从句法的角度来看,允许它会造成混乱。如果单独使用
JOIN
,无需进一步说明,我们总是会得到一个 INNER JOIN。但是,如果我们说 LEFT JOIN 或 RIGHT JOIN,并省略 INNER 与 OUTER,则连接类型
flips,并且现在这是一个 OUTER 连接,即使我们没有另外指定有关该连接部分的任何新内容。这很容易让外行人感到困惑。 相对于解释(极其常见的)LEFT JOIN 简写,允许 LEFT INNER JOIN 会特别烦人。也就是说,如果 INNER JOIN 禁止使用 LEFT/RIGHT,则可以指定 any
连接类型,并在 JOIN 前面添加一个附加关键字,其方式是完全明确并且不会被误认为是不同的 JOIN: 内连接
左连接
正确加入
全面加入
交叉连接
对于其中的每一个,您只需通过两个关键字就可以确切地知道它是什么类型的连接,而不会出现歧义或误解......但前提是 INNER JOIN 不允许使用 LEFT 和 RIGHT。虽然它肯定不是通用的,但这种“最小明确文本”方法正是我认识的大多数人倾向于编写 JOIN 的方式(如果它不添加新信息,为什么要通过包含“OUTER”来向代码添加额外的噪音?)。