データを取得する(SELECT文)

テーブルからデータを取得するには SELECT コマンドを使用します。ここでは PostgreSQL でテーブルからデータを取得する方法について解説します。

(Last modified: )

データを取得する

テーブルからデータを取得するには SELECT コマンドを使います。基本となる書式は次の通りです。

SELECT [ * | expression [, ...] ]
    FROM table_name

テーブル名( table_name )のテーブルからデータを取得します。取得するのはテーブルに含まれるすべてのカラムでもいいですし、指定したカラムだけを取得することもできます。取得した値に対して演算を行ったりした結果を取得することもできます。

テーブルの中の特定のカラムの値を抱けを取得するには次のように記述してください。

SELECT column_name1, column_name2, ...
    FROM table_name

指定するカラム名は FROM の後に指定されているテーブルの中で定義されているカラムである必要があります。カラムを記述する順番はテーブルで定義されている順番と異なっていても構いません。また必要であれば同じカラム名を複数回指定することもできます。

テーブルで定義されているすべてのカラムの値を取得するには、特別な文字 '*' を使って次のように記述してください。

SELECT * FROM table_name

この場合は FROM の後に指定されているテーブルの中で定義されているすべてのカラムを定義されている順番で指定したのと同じ結果となります。

-- --

それでは実際に試してみます。 mydb データベースの myschema スキーマの中に次のようなテーブルを作成しました。

create table myschema.staff(
  id integer,
  name varchar(10),
  address varchar(10)
); 

データを取得する(1)

作成したテーブルに次のようなデータを格納しておきます。

insert into myschema.staff values
  (1, 'Yamada', 'Tokyo'),
  (2, 'Endou', 'kyoto'),
  (3, 'Mori', 'Nagoya'),
  (4, 'Honda', 'Chiba'),
  (5, 'Suzuki', 'Tokyo');

データを取得する(2)

それでは SELECT コマンドを使ってテーブルからデータを取得してみます。最初にすべてのカラムを順に指定してデータを取得します。

select id, name, address from myschema.staff;

データを取得する(3)

特定のカラムだけを指定して値を取得することもできます。指定するカラムの順番は対象のテーブルで定義されているカラムの順番とは関係なく指定できます。

select address, id from myschema.staff;

データを取得する(4)

すべてのカラムの値を取得する場合は、カラム名を順番に列挙するかわりに '*' を指定することもできます。

select * from myschema.staff;

データを取得する(5)

値を取得するカラム名は複数回指定することもできます。

select id, name, id, address from myschema.staff;

データを取得する(6)

拡張表示をonにして取得したデータを表示する

PostgreSQL ではデータを取得したときにデフォルトで表形式で表示されますが、拡張表示を on にすると 1 つのデータ毎に カラム名 | 値 の形式で表示してくれます。特に長いい値を表示する場合に便利です。

psql メタコマンドの \x コマンドを使うと拡張表示の on と off を切り替えることができます。

\x on
\x off
\x auto

拡張表示をonにして取得したデータを表示する(1)

auto に設定しておくと、データを表示するのに適している方を自動的に選択してくれます。また引数無しで \x コマンドを実行すると on と off を切り替えます。

では拡張表示が on と off のときで表示の仕方がどう違うのかを確認してみます。最初にデフォルトの拡張表示が off の場合です。

 id |  name  | address
----+--------+---------
  1 | Yamada | Tokyo
  2 | Endou  | kyoto

拡張表示をonにして取得したデータを表示する(2)

拡張表示が off の時は表形式でデータが表示されます。では次に拡張表示を on にして同じ SELECT コマンドを実行してみます。

-[ RECORD 1 ]---
id      | 1
name    | Yamada
address | Tokyo
-[ RECORD 2 ]---
id      | 2
name    | Endou
address | kyoto

拡張表示をonにして取得したデータを表示する(3)

拡張表示が on の時は、データ毎に分かれて表示されます。そして 1 行毎にカラムに対して値が表示されます。

一覧性という点では拡張表示が off の時の方が見やすいのですが、格納されているデータが非常に長かったり、カラム数がとても多い場合などは拡張表示を on にした方が見やすい場合があります。必要に応じて切り替えてください。

カラムの値に対して演算したり組み込み関数を利用した結果を取得する

SELECT コマンドを実行する時に、テーブルから値を取得するカラムを指定しますが、カラムの値をそのまま取得するのではなく、カラムの値に演算を行ったり、組み込み関数にカラムの値を渡してその結果を取得することができます。次に例をみてください。

[例] sales カラムの値に 5 を乗算した結果を取得
SELECT sales*5 FROM uriage;

[例] eigo カラムの値と kokugo カラムの値を加算した結果を取得
SELECT eigo, kokgo, eigo+kokugo FROM seiseki;

[例] valueカラムの値の絶対値を取得
SELECT ABS(value) FROM datalist;

また FROM 句を使用せずに演算のみを行って結果を取得することもできます。

[例] 4 * 8 の演算結果を取得
SELECT 4*8;

-- --

それでは実際に試してみます。テストを行うために次のようなテーブルを作成しました。

create table test(
  num1 integer,
  num2 integer
); 

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(1)

作成したテーブルに次のようなデータを格納しておきます。

insert into test values
  (4, 8),
  (-5, 3),
  (12, -8),
  (-3, -4);

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(1)

それでは最初に num1 カラムに対して 5 を乗算した結果を取得してみます。

select num1, num1 * 5 from test;

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(2)

次に num1 カラムと num2 カラムを加算した結果を取得してみます。

select num1, num2, num1 + num2 from test;

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(3)

次に組み込み関数である abs 関数を使って num1 カラムの絶対値を取得してみます。

select num1, abs(num1) from test;

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(4)

最後に演算のみを行った結果を取得してみます。

select 12 * 25 - 7;

カラムの値に対して演算したり組み込み関数を利用した結果を取得する(5)

なおカラム名に対して演算を行った結果を取得した場合、カラム名の部分が ?column? のような表示となります。この部分を任意の名前に変更するには次のページで解説する AS 句を使用してください。

-- --

CREATE TABLE コマンドを使ってテーブルを作成する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。