条件でデータを抽出する(1)
2014年6月6日:MySQL
データベースのデータをすべて取ってくるだけではおもしろくありません。
ほしい情報だけを抽出したいものです。
ここでは、データベースから指定した情報のみを取り出す方法を紹介します。
具体的には、特定のフィールドの取り出し・エイリアス表示・数値や文字列を処理して表示を解説します。
まず、以下のようなテーブルsample_tbを用意しましょう。
フィールド | no | id | seibetsu | age | date | |
データ型 | INT | VARCHAR(10) | VARCHAR(100) | VARCHAR(10) | INT | DATE |
その他 |
PRIMARY KEY, |
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 |
+----+----------+------------------+----------+------+------------+
となります。
フィールドを表示する
すべてのデータを表示する
すべてのデータを表示するには、何度も使っている
という命令を使います。
特定のフィールドを表示
特定のフィールドを表示したい場合は
を使用します。では、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ではわかりにくいので別の名前にして表示させてみます。その場合
というエイリアス(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 |
+-------------+
今回の解説は以上です。これら以外にもデータの抽出法がいくつかありますが、それらは次回以降に解説します。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー