我學習的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的行爲方式)。