条件でデータを抽出する(1)

データベースのデータをすべて取ってくるだけではおもしろくありません。

ほしい情報だけを抽出したいものです。

ここでは、データベースから指定した情報のみを取り出す方法を紹介します。

具体的には、特定のフィールドの取り出し・エイリアス表示・数値や文字列を処理して表示を解説します。

 

まず、以下のようなテーブルsample_tbを用意しましょう。

 フィールド no id email seibetsu age date
データ型 INT VARCHAR(10) VARCHAR(100) VARCHAR(10) INT DATE
その他

PRIMARY KEY,
AUTO_INCREMENT

UNIQUE
データ 1  taro a@jprogramer.com man 12 2001-11-1
2  jiro b@jprogramer.com woman 43 2012-2-22
3  hanako hana@test.jp woman 21 2010-3-3
4  jun jun@jun.com man 102 1999-1-1
5  keita c@jprogramer.com woman 23 2000-12-24
6  kouta kou@yahoo.com man 402 1800-1-12
7  koutarou taro@hmail.com man 34 1999-5-2
8  taro t@jprogramer.com man 9 2001-8-1

以下のように命令すればsample_tbを作れます。

mysql> CREATE TABLE sample_tb(
    -> no INT AUTO_INCREMENT PRIMARY KEY,
    -> id VARCHAR(10),
    -> email VARCHAR(100) UNIQUE,
    -> seibetsu VARCHAR(10),
    -> age INT,
    -> date DATE
    -> );

DESCで表示すると

mysql> DESC sample_tb;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| no       | int(11)      | NO   | PRI | NULL    | auto_increment |
| id       | varchar(10)  | YES  |     | NULL    |                |
| email    | varchar(100) | YES  | UNI | NULL    |                |
| seibetsu | varchar(10)  | YES  |     | NULL    |                |
| age      | int(11)      | YES  |     | NULL    |                |
| date     | date         | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

となります。次に、以下のようにしてデータを入れます。

mysql> INSERT INTO sample_tb
    -> (id,email,seibetsu,age,date)
    -> VALUES
    -> ('taro','a@jprogramer.com','man',12,'2001-11-1'),
    -> ('jiro','b@jprogramer.com','woman',43,'2012-2-22'),
    -> ('hanako','hana@test.jp','woman',21,'2010-3-3'),
    -> ('jun','jun@jun.com','man',102,'1999-1-1'),
    -> ('keita','c@jprogramer.com','woman',23,'2000-12-24'),
    -> ('kouta','kou@yahoo.com','man',402,'1800-1-12'),
    -> ('koutarou','taro@hmail.com','man',34,'1999-5-2'),
    -> ('taro','t@jprogramer.com','man',9,'2001-8-1');

データを表示すると

mysql> SELECT * FROM sample_tb;
+----+----------+------------------+----------+------+------------+
| no | id       | email            | seibetsu | age  | date       |
+----+----------+------------------+----------+------+------------+
|  1 | taro     | a@jprogramer.com | man      |   12 | 2001-11-01 |
|  2 | jiro     | b@jprogramer.com | woman    |   43 | 2012-02-22 |
|  3 | hanako   | hana@test.jp     | woman    |   21 | 2010-03-03 |
|  4 | jun      | jun@jun.com      | man      |  102 | 1999-01-01 |
|  5 | keita    | c@jprogramer.com | woman    |   23 | 2000-12-24 |
|  6 | kouta    | kou@yahoo.com    | man      |  402 | 1800-01-12 |
|  7 | koutarou | taro@hmail.com   | man      |   34 | 1999-05-02 |
|  8 | taro     | t@jprogramer.com | man      |    9 | 2001-08-01 |
+----+----------+------------------+----------+------+------------+

となります。

フィールドを表示する

すべてのデータを表示する

すべてのデータを表示するには、何度も使っている

SELECT * FROM テーブル名;

 

という命令を使います。

特定のフィールドを表示

特定のフィールドを表示したい場合は

SELECT フィールド1,フィールド2,… FROM テーブル名;

を使用します。では、idとemailだけ表示させてみます。

mysql> SELECT id,email FROM sample_tb;

表示は以下の通りです。

+----------+------------------+
| id       | email            |
+----------+------------------+
| taro     | a@jprogramer.com |
| jiro     | b@jprogramer.com |
| hanako   | hana@test.jp     |
| jun      | jun@jun.com      |
| keita    | c@jprogramer.com |
| kouta    | kou@yahoo.com    |
| koutarou | taro@hmail.com   |
| taro     | t@jprogramer.com |
+----------+------------------+

エイリアス

idとかemailではわかりにくいので別の名前にして表示させてみます。その場合

SELECT フィールド1 AS エイリアス1,フィールド2 AS エイリアス2,… FROM テーブル名;

 

というエイリアス(alias)を使います。では以下のように命令してみましょう。

mysql> SELECT id AS ID番号,email AS メールアドレス FROM sample_tb;

表示は以下のとおりです。

+----------+-----------------------+
| ID番号   | メールアドレス        |
+----------+-----------------------+
| taro     | a@jprogramer.com      |
| jiro     | b@jprogramer.com      |
| hanako   | hana@test.jp          |
| jun      | jun@jun.com           |
| keita    | c@jprogramer.com      |
| kouta    | kou@yahoo.com         |
| koutarou | taro@hmail.com        |
| taro     | t@jprogramer.com      |
+----------+-----------------------+

たしかにidやemailがID番号とメールアドレスに変わっていますね。

計算・文字列の処理

数値計算

データの数値を計算して表示させることができます。

例えば、年齢から20をひいて表示させてみましょう。

mysql> SELECT age-20 AS 成人からの経過年数 FROM sample_tb;

とすれば

+-----------------------------+
| 成人からの経過年数          |
+-----------------------------+
|                          -8 |
|                          23 |
|                           1 |
|                          82 |
|                           3 |
|                         382 |
|                          14 |
|                         -11 |
+-----------------------------+

となります。フィールドを変数として使用できることがわかります。計算の際に使用する四則演算しを以下にまとめておきます。

演算記号 演算子
かける *
割る /
たす +
ひく

文字列を操作する

文字列を操作して表示させることができます。その際、以下の関数が使用できます。

 

【文字列を結合する:CONCAT】

 SELECT CONCAT(文字列1,文字列2,…) FROM テーブル名;

【右から取り出す:RIGHT】

 SELECT RIGHT(フィールド,取り出す文字数) FROM テーブル名;

【左から取り出す:LEFT】

 SELECT LEFT(フィールド,取り出す文字数) FROM テーブル名;

【x番目からy個取り出す:SUBSTRING】

 SELECT SUBSTRING(フィールド,x,y) FROM テーブル名;

【xをy回繰り返し表示:REPEAT】

 SELECT REPEAT(x,y) FROM テーブル名;

【逆表示:REVERSE】

 SELECT REVERSE(フィールド) FROM テーブル名;

 

では、以下に使用例をのせます。

【文字列を結合する:CONCAT】

mysql> SELECT CONCAT(id,'さん、こんにちは') FROM sample_tb;
+---------------------------------------+
| CONCAT(id,'さん、こんにちは')         |
+---------------------------------------+
| taroさん、こんにちは                  |
| jiroさん、こんにちは                  |
| hanakoさん、こんにちは                |
| junさん、こんにちは                   |
| keitaさん、こんにちは                 |
| koutaさん、こんにちは                 |
| koutarouさん、こんにちは              |
| taroさん、こんにちは                  |
+---------------------------------------+

【右から取り出す:RIGHT】

mysql> SELECT RIGHT(id,1) FROM sample_tb;
+-------------+
| RIGHT(id,1) |
+-------------+
| o           |
| o           |
| o           |
| n           |
| a           |
| a           |
| u           |
| o           |
+-------------+

【x番目からy個取り出す:SUBSTRING】

mysql> SELECT SUBSTRING(id,2,1) FROM sample_tb;
+-------------------+
| SUBSTRING(id,2,1) |
+-------------------+
| a                 |
| i                 |
| a                 |
| u                 |
| e                 |
| o                 |
| o                 |
| a                 |
+-------------------+

【xをy回繰り返し表示:REPEAT】

mysql> SELECT REPEAT(id,2) FROM sample_tb;
+------------------+
| REPEAT(id,2)     |
+------------------+
| tarotaro         |
| jirojiro         |
| hanakohanako     |
| junjun           |
| keitakeita       |
| koutakouta       |
| koutaroukoutarou |
| tarotaro         |
+------------------+

【逆表示:REVERSE】

mysql> SELECT REVERSE(id) FROM sample_tb;
+-------------+
| REVERSE(id) |
+-------------+
| orat        |
| orij        |
| okanah      |
| nuj         |
| atiek       |
| atuok       |
| uoratuok    |
| orat        |
+-------------+

 

今回の解説は以上です。これら以外にもデータの抽出法がいくつかありますが、それらは次回以降に解説します。

著者:安井 真人(やすい まさと)