Get to the point/ja
Language: | English • 日本語 |
---|
映画データベース: The JOIN
このデータベースに対するはっきりとした質問は3つのテーブル全てに関わります。
誰がこれこれの映画に出演したか、あるいはどの映画に誰彼が出演したか。
実際、それらの質問に既に見てきた入れ子のSELECT
文で回答できます。
Joinでは"共通"のフィールドを持つ2つのテーブルを結合できます。actorテーブルのidフィールドはcastingテーブルのactoridから参照されます。 これらのテーブルの結合で各々のフィールドから両方のテーブルの全ての属性(フィールド)を含むテーブルが生成されます。
2つのテーブルを結合する
castingとactorを actoridとid で結合する。
SELECT * FROM casting JOIN actor
ON casting.actorid=actor.id
WHERE actor.name='John Hurt'
SELECT * FROM casting JOIN actor
ON casting.actorid=actor.id
WHERE actor.name='John Hurt'
上記の結果はJohn Hurtに関連するcastingテーブルの各要素1つに付き1行が得られます。 actoridに加えて関連する役者の名前も分かります。 (訳者注 castingテーブルにはactoridだけ記載されnameは無い。actorの結合によりnameを得ることができる)
3つのテーブルを結合する
上記のテーブル(訳者注 castingとactorを結合した)とmovieテーブルとの結合は意味があるでしょう。 結合条件のフィールドは明らかにmovieidフィールドです。
movie と casting を id と movieid で結合する。 casting と actor を actoridとidで結合する。
SELECT * FROM
movie JOIN casting ON movie.id=movieid
JOIN actor ON actorid=actor.id
WHERE actor.name='John Hurt'
SELECT * FROM
movie JOIN casting ON movie.id=movieid
JOIN actor ON actorid=actor.id
WHERE actor.name='John Hurt'
結果は今回も再びcastingテーブルの各要素1つにつき1行が得られます。 今回は役者の名前と同様に映画の詳細が得られます。
注 これまでたびたびフィールドに関して単にそのままフィールド名を使っていました。(例 actorid
)
テーブル名に続けてフィールド名を付けますこともあります。(例 casting.actorid
)
フィールド名が固有でない場合はテーブル名を含める必要が有ります。