データ定義文
CREATE DATABASE / DROP DATABASE / USE
データベース操作
クイックリファレンスでは、データベースやテーブルの構築から、SELECTINSERT、UPDATE、DELETEといったデータ処理用のSQL構文を紹介します。SQLはプログラミング言語と比較すると非常に単純なデータベース言語です。ここで紹介するSQL文も単純なものばかりで、簡単に使うことができます。
それでは、まずはクイックリファレンス用のデータベースを作成しましょう。Excelでいうと、データベースはファイルに、テーブルがシートに当たります。データベースはテーブルを格納するだけの器なので、作成自体は簡単です。
データベース操作
CREATE DATABASE構文を使うことにより、指定した名前のデータベースを作成することができます。
CREATE DATABASE test_db;
CREATE DATABASEに指定したデータベース名で、データベースが作成されます。データを保持するテーブルは別途作成する必要があります。
DROP DATABASE test_db;
DROP DATABASE構文は、指定したデータベースと、それに含まれる全てのテーブルを削除します。削除したtest_dbデータベースはこの後使いますので、CREATE DATABASE構文でまた作成しておいてください。
USE test_db;
USEで選択したデータベースは、それ以降のクエリで、データベース名を省略することができます。データベースの選択は、セッションの最後、あるいは他のUSE構文が発行されるまで有効です。
CREATE TABLE/DESCRIBE
テーブル操作
テーブルの作成や変更、削除などのテーブル操作を紹介します。テーブル構造をどのように定義するかは、全システムの要になる部分です。必要な項目を決めてテーブルを作成するだけあれば簡単ですが、検索処理やデータ量を考慮して最適なテーブルを構築するのはかなりの経験が必要になります。
テーブルの構造はシステムのパフォーマンスから開発、運用にまで影響を与えるので、十分に検討して決める必要があります。ただし、テーブル構造は作成後もある程度は変更することができるので、環境や状況によって、テスト的に運営しながら細部を調整していくというアプローチも選択することも間違いではありません。
テーブルの作成は、CREATE TABLE構文を使います。CREATE
TABLE構文は、テーブルを構築するだけあって複雑ですが、基本はフィールド定義(フィールド名やデータ型などの属性を指定すること)の繰り返しです。
テーブルの作成と削除、確認
CREATE TABLE customer ( id_c int unsigned NOT NULL auto_increment, fullname varchar(40) NOT NULL, age tinyint unsigned NOT NULL , PRIMARY KEY (id_c) );
顧客情報用のテーブルを作成します、テーブル名をcustomerに設定し、フィールドは[顧客ID(id_c)]、[フルネーム(fullname)]、[年齢(age)]を作成、プライマリキーに[顧客ID(id_c)]を指定します。
DESC customer; -> +----------+---------------------+------+-----+---------+----------------+ -> | Field | Type | Null | Key | Default | Extra | -> +----------+---------------------+------+-----+---------+----------------+ -> | id_c | int(10) unsigned | | PRI | NULL | auto_increment | -> | fullname | varchar(40) | | | | | -> | age | tinyint(3) unsigned | | | 0 | | -> +----------+---------------------+------+-----+---------+----------------+
テーブルを作成した後は、テーブルが意図した通りに作成されているか、DESCRIBE構文でテーブル構造を確認しましょう。
データ操作文
INSERT
データ挿入
テーブル構築以降は、INSERT、SELECT、UPDATE、DELETE構文でデータ処理を行います。まずはINSERT構文です。INSERT構文はデータをテーブルに登録するための命令文で、SELECT構文と同じく使用頻度が高く、しかもその構文はとてもシンプルです。
INSERT構文は、INSERT...SETとINSERT...VALUESという2種類のアプローチがあります。どちらもレコードを登録するための構文ですが、INSERT...SETは登録したいデータとフィールド名を指定し、INSERT...VALUESはすべてのフィールドの値を指定するという違いがあります。
ユーザからの入力をテーブルに登録するようなプログラムでINSERT構文を使う際は、データの文字コードや、文字数、値の種類などをプログラム側でチェックする必要があります。INSERT構文には、データをチェックするための機能はありません。
データ挿入
# データの挿入 INSERT customer SET id_c=1,fullname='エラ・フィッツジェラルド',age='48'; INSERT customer SET id_c=2,fullname='トミー・ゲレロ',age='34'; INSERT customer SET id_c=3,fullname='マディ・ウォーターズ',age='55'; INSERT customer SET id_c=4,fullname='エディ・ロバーツ',age='28'; INSERT customer SET id_c=5,fullname='マーサ・リーブス',age='38'; INSERT customer SET id_c=6,fullname='スライ・ストーン',age='34';
SELECT
データ選択
SELECT構文は、テーブルから必要なレコードを選択するための命令文です。SQLの中で最も使用頻度が高いといえる命令文です。SELECT構文には数多くのキーワードが用意されていますが、その中でもWHERE句、LIMIT句、GROUP BY句、ORDER BY句が特に重要です。
SELECT構文
SELECT フィールド名, ... FROM テーブル名
[WHERE 条件式]
[GROUP BY {整数 | フィールド名| 式} [ASC | DESC], ...]
[HAVING 条件式]
[ORDER BY {整数 | フィールド名| 式} [ASC | DESC], ...]
[LIMIT [オフセット,] 行指定]
SELECT構文の基本構成は、SELECT句の次に表示させたいフィールド名のリストを並べます。ここで指定したフィールドの値が結果として返されます。続いてFROM句では、参照するテーブル名を指定します。FROM句以降はオプションとして、条件式を設定するWHERE句や、レコードをグループ化するGROUP BY句、レコードの表示順を設定するORDER BY句を追加設定していきます。
データの表示
SELECT fullname FROM customer; -> +--------------------------------------+ -> | fullname | -> +--------------------------------------+ -> | エラ・フィッツジェラルド | -> | トミー・ゲレロ | -> | マディ・ウォーターズ | -> | エディ・ロバーツ | -> | マーサ・リーブス | -> | スライ・ストーン | -> +--------------------------------------+
全てのフィールドを取得したい場合は、一つ一つのフィールド名を指定していく代わりに、正規表現などで使われるアスタリスク( * )が利用できます。
SELECT * FROM customer; -> +------+--------------------------------------+-----+ -> | id_c | fullname | age | -> +------+--------------------------------------+-----+ -> | 1 | エラ・フィッツジェラルド | 48 | -> | 2 | トミー・ゲレロ | 34 | -> | 3 | マディ・ウォーターズ | 55 | -> | 4 | エディ・ロバーツ | 28 | -> | 5 | マーサ・リーブス | 38 | -> | 6 | スライ・ストーン | 34 | -> +------+--------------------------------------+-----+
WHEREキーワード
データ検索
SELECT構文を使ってデータを検索するには、WHERE句を使います。WHERE句の後に条件式を指定することにより、その条件にマッチしたデータだけを選択することができます。
条件式は、検索対象のフィールド名と、演算子、関数などを使って表現します。
WHEREを使ったデータ検索
顧客IDが1のレコードを選択します。
SELECT * FROM customer WHERE id_c=1; -> +------+--------------------------------------+-----+ -> | id_c | fullname | age | -> +------+--------------------------------------+-----+ -> | 1 | エラ・フィッツジェラルド | 48 | -> +------+--------------------------------------+-----+
顧客IDが4より大きいレコードを選択します。
SELECT * FROM customer WHERE id_c>4; -> +------+--------------------------+-----+ -> | id_c | fullname | age | -> +------+--------------------------+-----+ -> | 5 | マーサ・リーブス | 38 | -> | 6 | スライ・ストーン | 34 | -> +------+--------------------------+-----+
顧客IDが1か3のレコードを選択します。
SELECT * FROM customer WHERE id_c=1 OR id_c=3; +------+--------------------------------------+-----+ | id_c | fullname | age | +------+--------------------------------------+-----+ | 1 | エラ・フィッツジェラルド | 48 | | 3 | マディ・ウォーターズ | 55 | +------+--------------------------------------+-----+
UPDATE/DELETE
データ更新と削除
UPDATE構文はINSERTで登録したレコードの内容を変更します。DELETE構文は指定したレコードを削除します。
UPDATEとDELETEは構文自体はとてもシンプルですが、ともにその操作には注意が必要です。UPDATEもDELETEも、レコードを指定しなかった場合は全データに対して処理されます。たとえば、WHERE句でレコードを指定せずにUPDATE句を実行すると、全てのデータが同じ内容で更新されて今います。DELETEの場合では、全てのデータが削除されてしまいます。
データの更新
UPDATE customer SET fullname='ジョニー・ルイス' WHERE id_c=3;
WHERE句で更新するレコードを指定し、SETキーワードで更新するフィールド名と値を指定しています。
データの削除
DELETE FROM customer WHERE id_c=3;
WHERE句で削除するレコードを指定しています。