0

次の 2 つのテーブルがあるとします。

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

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

次の 2 つの SQL ステートメントは同じですか (Oracle 11g 上)?

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

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

FROM [テーブル リスト] 構文について説明/詳細を教えてください。何が起こっているのかわかりません... 複数の UserInfo がある場合、それらすべてを返しますか? または、各ユーザーに一致する最初のものだけですか? User に UserInfo がない場合、それらは結果から除外されますか?

4

1 に答える 1

1

これらのクエリは両方とも、両方のテーブル間で一致するすべての行を返す INNER JOIN で実行されています。

userテーブルに 1 つの行が含まれているUserIdが、UserInfoテーブルに同じ 4 つの行が含まれている場合、4 つの行userIdが返されます。一致する複数の行があるため、最初の行ではなく、一致するすべての行を返します。

テーブルにUsers一致する行がないを返したい場合は、 を使用する必要があります。UserInfoLEFT JOIN

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

LEFT JOIN は、UserInfoテーブル内で一致する行と一致しない行を返します。一致しない行はnullUserInfo値に対して を返します。

于 2013-04-18T23:45:16.203 に答える