我在SQLZoo上学习了JOIN操作问题4:
SELECT team1, team2 , player
FROM game JOIN goal ON (id = matchid)
WHERE player LIKE 'Mario%'
该条款的目的是什么 - ON (id = matchid)
如果我们将其遗漏,会发生什么?
答案 0 :(得分:4)
ON部分指定连接中的两个表是如何相关的(或它们应该如何连接)。如果你要忽略ON部分,查询很可能是无效的(虽然它可能在一些宽容的数据库系统上运行,在这种情况下你会获得两组的交叉产品,也称为笛卡尔积)。 / p>
使用JOIN而不使用像INNER这样的任何说明符,(FULL)OUTER,LEFT,RIGHT或CROSS意味着你进行INNER JOIN。
值得注意的是,如果两个表都包含列id
或matchid
,查询将失败,查询处理器必须能够解析连接中使用的列名称,否则查询将失败,除非您指定这样的来源:
SELECT team1, team2 , player
FROM game JOIN goal ON (game.id = goal.matchid) -- or maybe it's the other way
WHERE player LIKE 'Mario%' -- round, game.matchid = goal.id
答案 1 :(得分:2)
这是一个加入条件。
如果它被评估为true
,则左行与右行连接,从而产生一个传递给结果集的组合行。
如果省略它,那么,根据特定的sql方言,它可能是一个错误(例如,microsoft sql server要求你明确地使用CROSS JOIN
)或者你可能会得到一个笛卡尔积(&& #39; s mysql的行为方式)。