Webの制作業務、特にフロントエンドで活躍されている方には少しハードルが高めなお話になりますが、プログラマーにとっては基礎的なお話になっていきます。今回は、データベースとSQLのお話をしていこうと思います。最後にデータベースとは簡単に言ってしまうと、データの集まりで、DBMS(データベース管理システム)と呼ばれるもので管理されています。Web制作の現場では、主にMySQL、PostgreSQLが使われることが多いですね。DB、SQLiteなどがあります。このデータは、テーブルと呼ばれる塊でまとめられ、いくつかのテーブルが集まってデータベースとなります。テーブルというと、htmlのtableタグを思い浮かべる方もいると思いますが、データベース上のテーブルも正にその形でイメージすることができます。このテーブルをイメージした構造を関係モデルと呼び、テーブル同士を連結しながら目的の情報を得る仕組みになっています。ソフトバンクリレーショナルデータベース(関係データベース)データベースを管理するDBMSには、管理の方法(データモデル)によって大別されます。Web制作でよく使われるMySQLは、リレーショナルデータベースの代表格で、RDBMSと呼ばれるデータモデルによって管理しています。上で説明した、関係モデルがリレーショナルデータベースを示しています。PostgreSQLのDBMSは、ORDBMSと呼ばれ、上記の関係モデルの他にオブジェクト指向の管理もできるシステムになっています。SQLとはデータベース問い合わせ言語と呼ばれることもある、データベースから目的の情報を取り出す際に必要になるものです。そのために記述したコードのことをSQL文と言います。league=1[/sql]SQL文について前項でサンプルを書きましたが、より具体的な例を使って説明したいと思います。いくつかのテーブルを用意します。2このようなテーブルがあった場合、以下の条件でデータが欲しい場合を考えます。名前、ポジション名をデータとして取得するここでは選手の一覧が欲しいので、ベースになるテーブルは、【選手テーブル】になります。各テーブルの関係性(リレーションシップ)を図で表すと以下のようになります。【選手テーブル】の球団IDと【球団テーブル】のIDが紐付いています。翔平≫は、投手のポジションで、日本ハムに所属していることが分かります。この関係性を使って目的の情報を取得するためにSQL文を記述することになります。SQL文の記述まずはじめに、ベースとなるテーブルから情報を抽出するためのSQL文を記述してみます。最初は全ての情報を取得してみます。ASC[/sql]データベースから情報を抽出するためには、SELECT文を使います。*印は、ワイルドカードで全ての項目を表します。BY句は、並び替えのキーとなる項目を指定します。最後のASCは、昇順にソートすることを表しています。降順の場合は、DESCを指定します。次に、最初の条件である、日本ハム球団に所属している選手を絞り込みます。ASC[/sql]WHERE句を指定し、条件式を記述します。複数の条件がある場合には、ANDもしくはORで、つないでいきます。条件で指定されている並び順でソートします。BY句の内容を変更します。ポジション順で並べ、同じポジションだったら背番号順という指示ですので、ポジションIDを先に記述し、カンマで区切り、背番号を続けて記述します。テーブルの結合ここからが、今回のメインとなるところです。先ほどテーブル同士の関連性を表した図を元にSQL文で、テーブルを結合していきます。結合の仕方は、大きく分けて3つあります。(機会がありましたら、あらためて説明します。ASC[/sql]まずは、【選手テーブル】と【ポジションテーブル】を結合します。JOIN句の後に、結合するテーブル名を指定します。ONの後ろに、結合する条件を指定します。ここでは、選手テーブルのポジションID、ポジションテーブルのIDがペアとなります。どのテーブルの項目かを区別するために、ドットでつないで記述します。同様にして、球団テーブルも結合します。ASC[/sql]必要なデータの抽出それでは、最後に必要な項目を拾い出す作業になります。先ほど説明したように、*印はワイルドカードのため、全ての項目を抽出します。したがって、結合した3つのテーブル全ての項目を出力することになります。名前」「ポジション名」の3項目です。ASC[/sql]*印の部分を書き換えていきます。どのテーブルの何?っていうのを明記していきます。IDとだけ記述してしまうと、選手テーブルのIDなのか、ポジションテーブルのIDなのか、分からなくなってしまいます。したがって、選手テーブルの背番号、ポジションテーブルのポジション名というふうに、このテーブルのこの項目という形で表現してあげます。対象となる項目が複数の場合は、カンマでつなげて記述します。この結果、出力されるデータは以下のようになります。最後に今回は、データベースとSQLの基本的なところのお話でしたが、細かい説明は抜きにして、ひとまず目的のデータを取得するという目標を達成するための最短でお話しました。データベースのテストができる環境がありましたら、SELECT文は参照系のSQL文ですので、データを壊すことは無いと思いますので、色々試してみて下さい。(厳密に言うと、壊してしまう可能性もあるのですが・・・)また機会があれば、更新系のSQLやより複雑な抽出についても触れたいと思います。詳しく知りたい方は、Akrosへ。