Mysql 如何评估这些查询?和,连接语法
如何评估这些查询? (我要问的是:db引擎将使用什么逻辑来收集数据?) A: B: C:Mysql 如何评估这些查询?和,连接语法,mysql,sql,join,syntax,evaluation,Mysql,Sql,Join,Syntax,Evaluation,如何评估这些查询? (我要问的是:db引擎将使用什么逻辑来收集数据?) A: B: C: 连接多个表的语法是什么?(例如A和B) D: 连接顺序背后的逻辑是什么? (不同的联接(左联接和内联接)在查询中应如何组合?) 有人吗 SELECT tableA.* FROM tableA LEFT JOIN tableB ON tableB.key1 = tableA.key1 INNER JOIN tableC ON tableC.key2 = tableB.key2 由于未使用括号,因此应从左至右
连接多个表的语法是什么?(例如A和B) D:
连接顺序背后的逻辑是什么?
(不同的联接(左联接和内联接)在查询中应如何组合?) 有人吗
SELECT tableA.* FROM tableA
LEFT JOIN tableB ON tableB.key1 = tableA.key1
INNER JOIN tableC ON tableC.key2 = tableB.key2
由于未使用括号,因此应从左至右对其进行评估,因此:
SELECT tableA.*
FROM
(tableA LEFT JOIN tableB ON tableB.key1 = tableA.key1)
INNER JOIN tableC ON tableC.key2 = tableB.key2
这意味着您首先从表A中选择所有记录,若存在,则从B中选择匹配的记录(外部联接)。该结果集随后与C连接,但由于您在B.Key上连接,所有以前B=null的记录现在都将消失。
我很确定第一个连接可以是一个内部连接,得到相同的结果
SELECT tableA.* FROM tableA
INNER JOIN tableC
LEFT JOIN tableB
ON (tableB.key1 = tableA.key1) AND (tableC.key2 = tableB.key2)
现在我们首先将A中的每条记录与C(笛卡尔积)中的每条记录交叉连接起来。
这(可能是巨大的,也可能是毫无意义的)结果集,我们用B中的数据进行扩展,在B中我们可以找到它(这意味着我们在与a或B匹配的地方从B中添加一条记录)
一般来说,当连接多个表时,只需一步一步地进行,并始终尝试了解您正在连接什么。如有疑问,请使用括号:)B的语法错误。请解释一下你这是什么意思?每个联接都需要在表名后的子句上使用
,正确的语法是:。。。表1[LEFT | RIGHT | INNER]根据条件连接表2[[LEFT | RIGHT | INNER]根据条件连接表3]
等。只有交叉连接
没有关于条件
子句。@kordirko这正是我的问题:它有效。但我不确定这是什么意思。@kordirko-这对于MySQL是不正确的。语法适用于b
。每个联接不需要一个ON
子句()。如果没有ON
子句,连接/内部连接将成为交叉连接
SELECT tableA.*
FROM
(tableA LEFT JOIN tableB ON tableB.key1 = tableA.key1)
INNER JOIN tableC ON tableC.key2 = tableB.key2
SELECT tableA.* FROM tableA
INNER JOIN tableC
LEFT JOIN tableB
ON (tableB.key1 = tableA.key1) AND (tableC.key2 = tableB.key2)