FROM子句中的列表表与INNER JOIN基本相同吗?

时间:2013-04-18 23:39:42

标签: sql oracle join

说我有这两个表:

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 [表格列表]语法。我不明白那里发生了什么...如果有多个UserInfos,它会返回所有这些吗?或者只是每个用户匹配的第一个?如果用户没有任何UserInfo,它们会从结果中省略吗?

1 个答案:

答案 0 :(得分: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表中匹配的行以及不匹配的行。不匹配的行将为null值返回UserInfo