什么是" ON"子句执行此JOIN操作?

时间:2014-11-07 00:25:50

标签: sql

我在SQLZoo上学习了JOIN操作问题4:

SELECT team1, team2 , player
FROM game JOIN goal ON (id = matchid)
WHERE player LIKE 'Mario%'

该条款的目的是什么 - ON (id = matchid)

如果我们将其遗漏,会发生什么?

2 个答案:

答案 0 :(得分:4)

ON部分指定连接中的两个表是如何相关的(或它们应该如何连接)。如果你要忽略ON部分,查询很可能是无效的(虽然它可能在一些宽容的数据库系统上运行,在这种情况下你会获得两组的交叉产品,也称为笛卡尔积)。 / p>

使用JOIN而不使用像INNER这样的任何说明符,(FULL)OUTER,LEFT,RIGHT或CROSS意味着你进行INNER JOIN。

值得注意的是,如果两个表都包含列idmatchid,查询将失败,查询处理器必须能够解析连接中使用的列名称,否则查询将失败,除非您指定这样的来源:

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的行为方式)。