データベースの基礎
表Rの列xの値は 1、1、2、3 の4行、表Sの列xの値は 1、1、2、4 の4行である。SELECT * FROM R INNER JOIN S ON R.x = S.x の結果は何行になるか。
- A2行
- B3行
- C5行
答えと解説を見る
正解:C. 5行
結合では、条件を満たす行の組み合わせが1つずつ結果の行になります。x = 1 については、Rの2行とSの2行のすべての組み合わせが条件を満たすので 2 × 2 = 4 行、x = 2 については 1 × 1 = 1 行です。Rの3とSの4は相手がいないので、内部結合の結果には出てきません。合計は 4 + 1 = 5 行です。2行は、一致する値の種類(1と2)ごとに1行ずつしかできないと考えた場合の行数です。3行は、Rの各行についてSに一致する値があるかどうかだけを見た場合(SELECT * FROM R WHERE x IN (SELECT x FROM S) のような問い合わせ)の行数です。条件を付けない直積なら 4 × 4 = 16 行になります。結合する列の値が重複していると、結果の行が掛け算で増えることに注意が必要です。
- A. 一致する値の種類(1と2)ごとに1行と考えた場合です。同じ値の行どうしは、すべての組み合わせが結果になります。
- B. Rの各行が1回ずつしか結合されないと考えた場合の行数です。重複する値は、組み合わせの数だけ行が増えます。
- C. 正しい。x = 1 の組み合わせが 2 × 2 = 4 行、x = 2 が1行で、合計5行です。