データの取得
テーブルに格納されているデータを取得するにはSELECT文を使います。まずは書式全体を確認します。
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr, ... [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO @var_name [, @var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
色々な句などを指定することができます。それぞれの意味はこれから順に確認していきますが、注意点として複数の句などをSELECT文で指定する場合には上記の順番を守って指定して下さい。例えば「HAVING」は「GROUP BY」よりも後に記述する必要があり「ORDER BY」よりも前に記述する必要があります。
では一番基本となる書式について確認します。
SELECT col_name1, col_name2, ... FROM db_name.tbl_name;
指定のデータベース内にある指定のテーブルからデータを追加します。データを取得する時には、どのカラムの値を取得するのかを指定します。複数のカラムの値を取得する場合はカンマ(,)で区切って指定します。
USE文を使ってデータベースに接続している状態で、そのデータベース内にあるテーブルからデータを取得する場合は次のように単にテーブル名だけを指定して作成することもできます。
SELECT col_name1, col_name2, ... FROM tbl_name;
例えば次のように記述します。
SELECT id, name FROM personal;
上記では「personal」テーブルに含まれる「id」カラムと「name」カラムの値を取得します。
もし全てのカラムの値を取得する場合、カラムを全て列挙する代わりに「*」を記述することができます。
SELECT * FROM personal;
上記では「personal」テーブルに含まれる全てのカラムの値を取得します。
サンプル
実際に試してみます。まず次のようなテーブルを作成します。
mysql> create table personal(id int, old int, name varchar(10));
テーブルには事前にデータを追加してあります。
ではデータを取得します。まず「old」カラムと「name」カラムの値を取得してみます。
mysql> select old, name from personal;
5つのデータについて「old」カラムと「name」カラムの値を取得しました。
*** ***
カラムの指定順序はテーブル定義の順番である必要はありません。今度は全てのカラムのデータを取得してみますが、カラムの順番として「id」カラム、「name」カラム、「old」カラムの順で取得します。
mysql> select id, name, old from personal;
SELECT文でカラム名を記述した順にデータを取得しました。
*** ***
一度のSELECT文で同じカラムを複数回指定することもできます。今度はカラムの順番として「id」カラム、「name」カラム、「id」カラム、「old」カラムの順で取得します。
mysql> select id, name, id, old from personal;
「id」カラムの値を2回取得しました。このように同じカラムを何度でも取得することができます。
*** ***
全てのカラムの値を取得する場合には、カラム名の代わりに「*」を記述することができます。
mysql> select * from personal;
今回のSQL文は「select id, old, name from personal」と記述した場合と同じです。なお「*」を使用した場合にはカラムの順序を指定することはできません。
データのカラム毎に行を分けて表示
SELECT文を使ってデータを取得した場合、取得するカラムの名前を列名とし、1つのデータを1行で表示します。
ただカラムに格納されるデータが長かったり、カラム数が多いテーブルのデータを取得すると、1つのデータを表示するのに1行で入りきらず、表示が崩れてしまい見難くなります。
このような場合にはSELECT文の末尾をセミコロン(;)ではなく¥Gを付けると、取得したデータを表示する時に1つのデータ毎にカラム別に行を分けて表示してくれます。
どちらの場合も取得するデータは同じです。そのデータをどのように表示するかを指定しているだけですので、場合に応じて使い分けるようにして下さい。
( Written by Tatsuo Ikura )