0

假设我有这两个表:

User
===============
  UserID
  Username
  Job

UserInfo
===============
  UserID
  UserInfo1
  UserInfo2

以下两个 sql 语句是否相同(在 Oracle 11g 上)?

SELECT * FROM User, UserInfo
WHERE UserInfo.UserID = User.UserID

SELECT * FROM User
INNER JOIN UserInfo ON UserInfo.UserID = User.UserID

请解释/详细说明 FROM [table list] 语法。我不明白那里发生了什么......如果有多个 UserInfos,它会返回所有这些吗?还是只匹配每个用户的第一个?如果用户没有任何用户信息,他们会从结果中省略吗?

4

1 回答 1

1

这两个查询都在 INNER JOIN 中执行,这将返回两个表之间的所有匹配行。

如果您的user表包含单个UserIdUserInfo表包含 4 行相同的userId,那么您将返回 4 行。由于您有多个匹配的行,因此您返回所有匹配的行,而不是第一个。

如果要返回表Users中没有匹配行的UserInfo,则必须使用LEFT JOIN

SELECT * 
FROM User
LEFT JOIN UserInfo 
  ON UserInfo.UserID = User.UserID

LEFT JOIN 将返回UserInfo表中匹配的行以及不匹配的行。不匹配的行将返回一个nullUserInfo

于 2013-04-18T23:45:16.203 回答