データを取得する(SELECT文)
MySQL でテーブルからデータを取得するには SELECT 文を使います。ここでは MySQL で SELECT 文使ってデータを取得する方法について解説します。
(Last modified: )
目次
データを取得する
テーブルに格納されているデータを取得するには SELECT 文を使います。非常にオプションが多いのですが、基本となる書式は次のとおりです。
SELECT col_name1 [, col_name2 ...] FROM table_name
指定したテーブル名( table_name )のテーブルに格納されているデータを取得します。データはテーブルのデータの中でも指定したカラム( col_name )の値を取得します。複数のカラムの値を取得する場合はカンマで区切って記述します。
-- --
では実際に試してみます。次のようなテーブルを作成しました。
create table address (id int, name varchar(10), address varchar(10));
テーブルには次のようなデータを格納しておきます。
insert into address values (1, 'Andou', 'Tokyo');
insert into address values (3, 'Suzuki', 'Kyoto');
insert into address values (4, 'Yamada', 'Osaka');
insert into address values (7, 'Nishi', 'Tokyo');
insert into address values (9, 'Tomita', 'Nagoya');
-- --
それでは SELECT 文を使って address テーブルからデータを取得します。最初にテーブルに含まれる 3 つのカラムの値を取得するため、次のように実行しました。
select id, name ,address from address;
SELECT のあとに指定した id name address の 3 つのカラムの値を取得することができました。
テーブルに含まれる id カラムと name カラムの値だけを取得したい場合は次のように実行します。
select id, name from address;
テーブルに含まれるカラムの中から id カラムと name カラムの値だけを取得することができました。
カラムを指定する場合、テーブルで定義したカラムの順番である必要はありません。また一度の SELECT 文で同じカラム名を指定することもできます。
select id, address, id, name from address;
テーブルで定義されているカラムの順番に関係なく SELECT 文のあとに記述したカラムの順番でデータを取得しています。また id カラムについては 2 回取得しています。
すべてのカラムをあらわすアスタリスク(*)を使用する
テーブルに含まれるすべてのカラムの値を取得するには、 SELECT 文ですべてのカラム名をカンマで区切って記述します。
SELECT col_name1, col_name2, col_name3 FROM tbl_name;
この記述方法のかわりに、すべてのカラムの値を取得する場合には単に * と記述することもできます。
SELECT * FROM tbl_name;
この方法の場合、カラムはテーブルで定義された通りの順番でカラムの値を取得します。順番を変更することはできません。
-- --
それでは先ほど作成した address テーブルを使って試してみます。テーブルに含まれるすべてのカラムの値を取得するために次のように実行しました。
select * from address;
address テーブルにふくまれる 3 つのカラムの値を取得することができました。
取得するデータを表形式ではなくデータごとに分けて表示する
特に指定していない場合、 SELECT 文で取得したデータは表形式で表示されます。列のところに取得したカラム名が表示され、取得したデータ 1 件ごとに 1 つの行で表示されます。
表形式の場合、テーブルに数多くのカラムが含まれている場合や、格納されているデータが長い場合には見にくくなることがあります。このような場合は SELECT 文で取得したデータを 1 つのデータごとに一塊のデータっとして表示することができます。
データごとに分けて表示する場合には、 SELECT 文の最後にセミコロン(;)ではなく \G と記述してください( G は大文字である必要があります)。
SELECT col_name1 [, col_name2 ...] FROM table_name\G
-- --
それでは先ほど作成した address テーブルを使って試してみます。テーブルからデータを取得したあとデータごとに分けて表示してみます。
select * from address\G
取得した 5 つのデータについて、データごとに カラム名: 値 という形式で表示しています。
カラムの値に対して演算したり組み込み関数を利用した結果を取得する
SELECT 文では値を取得するカラム名を指定しますが、カラムの値に対して演算を行ったり、カラムの値を関数に渡してその結果を取得することができます。
[例] sales カラムの値に 1.08 を乗算した結果を取得
SELECT sales*1.08 FROM uriage;
[例] eigo カラムの値と kokugo カラムの値を加算した結果を取得
SELECT eigo, kokgo, eigo+kokugo FROM seiseki;
[例] valueカラムの値の絶対値を取得
SELECT ABS(value) FROM datalist;
またテーブルを参照せずに純粋に計算を行うこともできます。
[例] 10 * 8 + 4の演算結果を取得
SELECT 10 * 8 + 4;
計算だけを行う場合に FROM 句がないとエラーになるような環境で利用する場合にはダミーのテーブルである DUAL テーブルを利用できます。
[例] 10 * 8 + 4の演算結果を取得
SELECT 10 * 8 + 4 FROM DUAL;
-- --
では実際に試してみます。次のようなテーブルを作成しました。
create table result (name varchar(10), eigo int, kokugo int);
テーブルには次のようなデータを格納しておきます。
insert into result values ('Yamada', 72, 82);
insert into result values ('Suzuki', 84, 56);
insert into result values ('Honda', 76, 73);
insert into result values ('Watanabe', 91, 86);
それでは SELECT 文を使って result テーブルからデータを取得します。この時 eigo カラムの値と kokugo カラムの値を使って平均を計算して合わせて取得します。次のように実行してください。(TRUNCATE関数は指定した桁数で切捨てを行う関数です)。
select name, kokugo, eigo, truncate((kokugo+eigo)/2, 0) from result;
指定したテーブルの指定カラムの値を取得すると同時に、取得したカラムの値を使って演算したりや関数へ渡した結果を合わせて取得することができました。
なおカラムに対して演算などを行った結果を取得する場合、 AS 句を使ってその結果に対して別の名前を付けることができます。先ほどの例だと平均を計算した結果に対して heikin という名前を付けるには次のようになります。
select name, kokugo, eigo, truncate((kokugo+eigo)/2, 0) as heikin from result;
AS 句について詳しくは「カラムに別名を付ける (AS句)」を参照されてください。
-- --
SELECT 文を使ってテーブルからデータを取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。