2017年2月3日金曜日

JOINの使い方

gameテーブル

goalテーブル

eteamテーブル

抽出結果

SQL:
SELECT goal.player,goal.teamid,game.mdate
  FROM game JOIN goal ON (id=matchid)
  WHERE goal.teamid = 'GER'

このSQLはJOINをつかってgoalとgameの2つのtableからplayer, teamid, mdateの3つの列の情報を取得している。一行目のSELECTで書いているのは結果取得後、どのフィールド(列)の情報を表示するかである。ここにはplayer, teamid, mdateの3つが選択されているので(条件にマッチする)player, teamid, mdateの3行に格納されている情報がすべて表示される。goal.playerという書き方をされているが、これは「goalというテーブルのplayerというフィールド」という意味である。

SELECT goal.player,goal.teamid,game.mdate
  FROM game JOIN goal ON (id=matchid)
  WHERE goal.teamid = 'GER'

2行目はgameテーブルとgoalテーブルを(gameテーブルの)idと(goalテーブルの)matchidをもとにJOINするということを示している。これによって2つのテーブルを一度に検索し、2つのテーブルから検索した結果を表示することができる。

SELECT goal.player,goal.teamid,game.mdate
  FROM game JOIN goal ON (id=matchid)
  WHERE goal.teamid = 'GER'

3行目のWHERE句は検索の条件を指定している。goal.teamidがGERに等しい国、という意味の条件である。

これを実行することで「gameとgoalの2つのテーブルをidとmatchidをもとにつなぎ、この2つのテーブルのうちteamidがGERに等しいデータ」をすべて取得することができる。


SELECT goal.player,goal.teamid,game.mdate
  FROM game JOIN goal ON (id=matchid)
  WHERE goal.teamid = 'GER'

これを日本語にするとこうなる。
「player, teamid, mdateというフィールドを
 gameとgoalの2つのテーブルをidとmatchidをもとに連結させたなかから
 teamidがGERのデータをすべて抽出」

参考文献
http://sqlzoo.net/wiki/The_JOIN_operation