第1章 SQL概説

SQL言語のクイックリファレンス

データ定義文

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はテーブルからレコードを取得するための命令文で、SQL命令文の中で最も使用頻度が高いといえます。SELECTには数多くのキーワードが用意されていますが、その中でもGROUP BYLIMITORDER BYWHEREは特に重要です。
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句で削除するレコードを指定しています。

関連記事