データの取得

広告

テーブルに格納されているデータを取得するには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));

p1-1

テーブルには事前にデータを追加してあります。

ではデータを取得します。まず「old」カラムと「name」カラムの値を取得してみます。

mysql> select old, name from personal;

p1-2

5つのデータについて「old」カラムと「name」カラムの値を取得しました。

*** ***

カラムの指定順序はテーブル定義の順番である必要はありません。今度は全てのカラムのデータを取得してみますが、カラムの順番として「id」カラム、「name」カラム、「old」カラムの順で取得します。

mysql> select id, name, old from personal;

p1-3

SELECT文でカラム名を記述した順にデータを取得しました。

*** ***

一度のSELECT文で同じカラムを複数回指定することもできます。今度はカラムの順番として「id」カラム、「name」カラム、「id」カラム、「old」カラムの順で取得します。

mysql> select id, name, id, old from personal;

p1-4

「id」カラムの値を2回取得しました。このように同じカラムを何度でも取得することができます。

*** ***

全てのカラムの値を取得する場合には、カラム名の代わりに「*」を記述することができます。

mysql> select * from personal;

p1-5

今回のSQL文は「select id, old, name from personal」と記述した場合と同じです。なお「*」を使用した場合にはカラムの順序を指定することはできません。

データのカラム毎に行を分けて表示

SELECT文を使ってデータを取得した場合、取得するカラムの名前を列名とし、1つのデータを1行で表示します。

p1-5

ただカラムに格納されるデータが長かったり、カラム数が多いテーブルのデータを取得すると、1つのデータを表示するのに1行で入りきらず、表示が崩れてしまい見難くなります。

p1-6

このような場合にはSELECT文の末尾をセミコロン(;)ではなく¥Gを付けると、取得したデータを表示する時に1つのデータ毎にカラム別に行を分けて表示してくれます。

p1-7

どちらの場合も取得するデータは同じです。そのデータをどのように表示するかを指定しているだけですので、場合に応じて使い分けるようにして下さい。

( Written by Tatsuo Ikura )