我学习的JOIN操作,问题4,上SQLZoo:这个JOIN操作的“ON”子句是做什么的?
SELECT team1, team2 , player
FROM game JOIN goal ON (id = matchid)
WHERE player LIKE 'Mario%'
什么是该条款的目的 - ON (id = matchid)
如果我们离开它,会发生什么?
我学习的JOIN操作,问题4,上SQLZoo:这个JOIN操作的“ON”子句是做什么的?
SELECT team1, team2 , player
FROM game JOIN goal ON (id = matchid)
WHERE player LIKE 'Mario%'
什么是该条款的目的 - ON (id = matchid)
如果我们离开它,会发生什么?
ON部分指定了连接中的两个表如何关联(或如何连接)。如果你想省略ON部分,查询很可能是无效的(尽管它可能在一些宽容的数据库系统上运行,在这种情况下,你会得到这两个集合的交叉产品,也被称为笛卡尔产品)。
使用没有任何说明符如INNER,(FULL)OUTER,LEFT,RIGHT或CROSS的JOIN意味着您进行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
这是一个连接条件。
如果计算结果为true
,那么左边的行与右边的行连接,产生一个传递给结果集的组合行。
如果你忽略它,那么,根据特定的sql语言,它可能是一个错误(例如,microsoft sql server需要你明确地使用CROSS JOIN
),否则你可能会得到一个笛卡尔产品(这就是mysql的行为方式)。