競馬データベースプログラミング

SQLとは?

 EveryDBはJV-Linkからデータをダウンロードして、リレーショナルデータベースにデータを蓄積してくれます。これだけでも手間が省けるのですが、実際にデータベース内のデータを取り出すには、自分でコードを書く必要があります。しかし、リレーショナルデータベースは複数存在し、各社仕様がまちまちでは使いづらくてしょうがありません。

 そこで、データベースに対して、各種操作をするための言語が規定されています。それが、SQLです。SQLとは、Structured Query Languageの略で、直訳すると構造化問い合わせ言語となります。
 問い合わせとは、データベースに対する問い合わせを指しており、SQLを使えば、リレーショナルデータベースの種類を考慮せず、データベースの操作(主にデータの照会)や定義ができるようになります(多少の方言はありますが)。

SQLの基本

 SQLは、データベースの操作に特化した言語です。従ってデータベースのデータ構造について知っておく必要があります。「EveryDBのデータ形式を知ろう」でも述べたとおり、データベースはテーブルと呼ばれるExcelの表のような形式でデータを格納しています。列方向の各セルのことを「フィールド」、1行を「レコード」といいます。

 SQLを理解するには、このデータ構造をイメージできないと行けません。

データベースの構造

 データベースは、データの蓄積を主目的としています。絵を描いたり、ウィルスのチェックはデータベースの仕事ではありません。我々利用者の側からすると、データベースを利用すると言うことは、そこに蓄積されたデータを検索して表示させると言うことです。これがSQLを理解する上で、一番大事な部分です。
 つまり、SQLはデータベースに表形式で格納されているデータを取り出すために利用すると考えてもらって構いません。特にEveryDBを利用している場合は、データベースの作成や、データの登録はEveryDBがやってくれますので、我々利用者はデータベースから必要なデータを取り出すことだけを考えればいいのです。

 ここで最も基本的なSQLの命令文を書きます。

SELECT フィールド名 FROM テーブル名

上記のSQLが基本中の基本です。赤字になっている部分がSQLの命令構文です。

  • SELECT: 「選択する」というSQLの命令
  • FROM: どこから?→ 参照したいテーブル名を指定


これだけです。

EveryDBにSQLを発行してみる

 EveryDBには、SQLを発行してデータベースの内容を閲覧する機能が備わっています。SQLの基本だけ説明してもピンとこないと思いますので、実際に蓄積されたデータをSQLを使って取り出したいと思います。なお、EveryDBには最新分までのデータが蓄積されているものとします。

2009年のレース詳細(RACE)を表示させてみる

 てはじめに、2009年のレース詳細(RACE)を表示させてみたいと思います。対象となるテーブルは「RACE」です。ここで使うSQLもSELECT文だけです。今度もわかりやすいように、SQL命令構文は赤字にしておきました。基本形と2009年に限定するやり方の2種類を示しています。

EveryDBからSQLを入力

基本形

SELECT * FROM RACE;

 フィールド名がアスタリスク(*)に置き換えられています。アスタリスクはワイルドカードと呼び、すべてのフィールドを指定したい場合に使います。テーブル名の部分には、「RACE」を指定します。詳細はEveryDBのデータ仕様書を参考にしてください。
 ただ、このSQLを実行すると、データベースに登録されているすべてのレース詳細(RACE)が表示されてしまいます。

2009年に限定

SELECT * FROM RACE WHERE Year='2009';

 次に2009年に限定してレース詳細を表示するやり方です。基本形との違いは、後ろに「WHERE」文が追加されていることです。WHERE文は、データ検索の条件を追加する命令です。基本形だけでもデータは取得できますが、全データが対象となってしまい、目的の2009年だけに限定できません。
 そこで、WHERE Year='2009' と追記することで、2009年だけのデータに絞り込んでいます。「Year」はSQLの命令ではなく、EveryDBが作ったテーブル上にある「フィールドの名前」です。これも詳細はデータ仕様書を参照してください。ちなみにEveryDBでは、数値も文字列として格納されている場合が多いので、型が「varchar」になっている箇所はアポストロフィー(’)をつけて文字列として宣言しましょう。
 また、SQL文の最後には忘れずにセミコロン(;)をつけましょう。

EveryDBから2009年レース詳細を取得

 「SQL実行」ボタンを押すと、結果が画面に表示されます。「CSV出力」ボタンを押せば、画面ではなくCSVファイルに保存できます。

複数の条件を指定するには?

 年度だけでなく、コースや月日も条件に加えたい場合、WHERE節に検索条件を追加していきます。条件文は「AND」や「OR」で連結します。「AND」を指定した場合は、すべての検索条件を満たしたレコードだけが表示されます。「OR」は指定条件のいずれかがマッチしたレコードが対象になります。
 最後に、2009年の東京競馬場に限定したレース詳細を取得するSQL文を書いて終わりにします。自分で検索条件を変えて、まずはSQLに慣れてみてください。

SELECT * FROM RACE WHERE Year='2009' AND Jyocd='05'