|
|
●学習内容 |
|
|
|
|
SQLってなんだ!!と思う人もいるかも知れませんので説明しておきます。RDBの操作にはSQLを使います。SQLを使う事で幅広い検索、テーブルの結合など強力にデータを操作することができます。Delphiには、SQLを使わなくてもテーブルを操作するコンポーネントが存在しますが、複雑なテーブルを使ってアプリケーションを作成する場合にはやはりSQLと使ったほうがよいでしょう。今回のプログラムは、すべてSQL文を使ってテーブルを操作するのでしっかり理解しておいてください。 |
|
|
|
|
|
|
|
|
|
●SQL |
|
|
|
|
SQL(Structured
Qurey Language;構造化問い合わせ言語)とは、RDBを操作するための言語です。RDBに対してデータの追加や削除、選択、射影、結合といった操作を行うのに使用します。 |
|
|
|
|
|
|
|
|
|
●SQLの基本的なコマンド |
|
|
|
|
では、SQLの基本的なコマンドについてこれから説明していきます。これ以外にもコマンドはありますが今回のプログラミングでは、使用しないので説明しません。詳しく知りたい方は独自で勉強してください。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
■SELECT文 |
|
|
|
|
SELECT文を利用することでテーブルの表示、検索結果の表示を行うことができます。この表示結果を結果セット、Delphiではデータセットと呼びます。SELECT文はSQLではもっともよく使われる構文ですのでしっかり覚えておいてください。ここでは、SELECT文による選択、射影、結合を行ってみましょう。ちなみに選択、射影、結合は『リレーショナルデータベースの操作』でも説明しましたが最もよく行う操作なので分からなければ確認しながら読んでいってください。 |
|
|
|
|
|
|
|
|
|
●選択 |
|
|
|
|
以下のイメージは、選択のイメージです。 |
|
|
|
|
|
|
|
|
|
そしてSQLで実行するには、次のように記述します。 |
|
|
|
|
SELECT *
FROM cinema_list
WHERE staff_name = 'ジャック・ニコルソン'; |
|
|
|
|
|
|
|
|
|
|
|
|
SELECT文は、どのテーブルのどの列を取得したいのかを指定する必要があります。例では、SELECTの後に*(アイスタスク)が記述されています。これは、すべての列を取得するという意味の記号です。そしてFROM句では、cinema_listと記述されています。これは、項目の存在するテーブル名です。WHERE句では選択したいデータの条件を指定しています。選択する際にはこのWHERE句で条件を指定する事で目的のデータを抽出する事ができます。
|
|
|
|
|
|
|
|
|
|
●WHERE句の役割 |
|
|
|
|
SELECT文の中でデータは、WHERE句の中で指定した検索条件によって抽出されます。検索条件は、以下の演算子で表現することができます。 |
|
|
|
|
演算子
|
説明
|
=
|
等しい |
<>
|
等しくない |
!=
|
等しくない |
<
|
小なり |
<=
|
小または等しい |
!<
|
小さくない |
>
|
大なり |
>=
|
大または等しい |
!>
|
大きくない |
BETWEEN
|
指定した2つの値の間 |
NOT
BETWEEN
|
指定した2つの値の間にない |
IS
NULL
|
NULL値である |
IS
NOT NULL
|
NULL値でない |
|
|
|
|
|
ではどのようにこの演算子を使っていくのかいくつかの例をあげてみます。 |
|
|
|
|
|
|
|
|
|
★抽出したい属性の値がある値(仮にXとする)より大きいものの場合
|
|
|
|
|
SELECT 表示したい項目
FROM 項目のあるテーブル
WHERE 比較する属性 > X ; |
|
|
|
|
|
|
|
|
|
|
|
|
★抽出したい属性の値がある2つの値(仮にXとYとする)の間にあるものの場合 |
|
|
|
|
SELECT 表示したい項目
FROM 項目のあるテーブル
WHERE 比較する属性 BETWEEN X AND Y; |
|
|
|
|
|
|
|
|
|
|
|
|
★高度な条件検索
2つ以上の条件で検索したい場合には、OR演算子かAND演算子を使って検索条件を結びつけることができます。 |
|
|
|
|
SELECT 表示したい項目
FROM 項目のあるテーブル
WHERE 検索条件1
AND 検索条件2 |
|
|
|
|
|
|
|
|
|
|
|
■コメント |
|
|
|
|
検索条件はいくつでもつなげる事が出来ますが、ここで注意しなければならないのは数学で習ったようにSQLでもAND演算子とOR演算子には評価順位があります。これは、2つの演算子が出てきた場合にどちらを先に処理するのかを決めているものです。SQLでも数学で習ったときのようにAND演算子を先に処理することになります。 |
|
|
|
|
|
|
|
|
|
●射影 |
|
|
|
|
これは射影のイメージです。 |
|
|
|
|
|
|
|
|
|
これをSQLで実行するには、次のように記述します。 |
|
|
|
|
SELECT genre_name
FROM cinema_list |
|
|
|
|
|
|
|
|
|
|
|
|
それでは解説しましょう。射影を実行するには、SELECT文で列をする事で実現できます。複数の列を選択する場合は、列名を(,)コンマで区切り指定するだけです。 |
|
|
|
|
|
|
|
|
|
●結合 |
|
|
|
|
これは、結合のイメージです。 |
|
|
|
|
|
|
|
|
|
これをSQLで実行するためには、次のように記述します。 |
|
|
|
|
SELECT a.* , b.genre_name
FROM cinema a, genre b
WHERE a.genre_code = b.genre_code |
|
|
|
|
|
|
|
|
|
|
|
|
それでは解説しましょう。結合を行うには、FROM句で結合したいテーブルを指定し、WHERE句で結合するキーを結びつけます。例では、FROM句でテーブル名cinemaとgenreを指定しています。そして、WHERE句でa.genre_code
= b.genre_codeと指定しています。これでSQL文を実行する事でテーブルが結合します。
この結合は内部結合と呼ばれ、WHERE句で指定した両方の列に存在する値が選択されます。よってテーブルcinemaにないgenre_codeのものは選択されていません。また、テーブルcinemaに複数存在するgenre_codeの情報はすべて選択されます。
|
|
|
|
|
|
|
|
|
|
|
■コメント |
|
|
|
|
★別名について |
|
|
|
|
SQLは別名をサポートしています。この例では、
FROM cinema a, genre b
とFROM句で宣言しています。そうする事で別名として扱う事が出来るようになります。テーブルだけではなく列に対しても別名を使う事が出来ます。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
■INSERT文 |
|
|
|
|
INSERT
INTO cinema.db (cinema_name, w_day, genre_code)
VALUES ('アルマゲドン','1999/8/3','1') |
|
|
|
|
|
既存のテーブルに新しい行を挿入します。挿入するテーブルを指定した後に項目名を指定しています。ここで指定した列名は、VALUES句で指定した値と対応しています。 |
|
|
|
|
|
|
|
|
|
■DELETE文 |
|
|
|
|
DELETE FROM "cinema.db"
WHERE cinema_code = '1' |
|
|
|
|
|
DELETEは、WHERE句で与えられた条件を満たすレコードを削除します。 |
|
|
|
|
|
|
|
|
|
■UPDATE文 |
|
|
|
|
UPDATE "cinema.db"
SET cinema_name = 'アルマゲドン',
w_day = '1999/8/3',
genre_code = '1'
WHERE cinema_code = '1' |
|
|
|
|
|
UPDATE
はテーブルに存在する行の項目を、新しい値に更新する。SET 節はどの項目をどういった値にすべきかを示します。 WHERE 節が与えられた場合、更新すべき行を特定します。それ以外は、全ての行を更新します。 |
|
|
|
|
|
|
|
|
|
|
|
|
|