说我有这两个表:
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,它们会从结果中省略吗?
答案 0 :(得分:1)
这两个查询都在INNER JOIN中进行,它将返回两个表之间的所有匹配行。
如果您的user
表包含单个UserId
但UserInfo
表包含4行且userId
,那么您将返回4行。由于您有多个匹配的行,因此返回所有匹配行,而不是第一行。
如果您想要返回Users
表中没有匹配行的UserInfo
,那么您必须使用LEFT JOIN
:
SELECT *
FROM User
LEFT JOIN UserInfo
ON UserInfo.UserID = User.UserID
LEFT JOIN将返回UserInfo
表中匹配的行以及不匹配的行。不匹配的行将为null
值返回UserInfo
。