今野 英明
2015年6月29日
SELECT 列名 FROM テーブル名;です。この書式ではテーブルからすべての行を取り出します。 表示する列は,列名をカンマ区切りで指定して特定します。 ただし,列名部分に``列名''以外のものを書くこともあります。
SELECT * FROM area_code; (実行結果) name | code --------+------- 函館市 | 01202 七飯町 | 01337 北斗市 | 01236 鹿部町 | 01343 森町 | 01345 (5 rows) SELECT * FROM postcode; (実行結果は省略。一画面を越える結果はページャ (more や less) で表示されるので, 表示を終了するには,ページャの終了命令である q を打つ)
SELECT name FROM area_code; SELECT new_post_code, ken_kana FROM postcode;
SELECT DISTINCT 列名 FROM テーブル名;とします。
テーブル spring の属性名 (列名) と, テーブル内のデータ(インスタンス)は次のとおりです。
name | area --------------+------- 谷地頭温泉 | 01202 湯の川温泉街 | 01202 東大沼温泉郷 | 01337 川汲温泉郷 | 01202 戸井温泉 | 01202 せせらぎ温泉 | 01236 鹿部温泉郷 | 01343 濁川温泉郷 | 01345 仁山温泉 | 01337 (9 rows)これに対して
SELECT area FROM spring;を実行すると,
area ------- 01202 01202 01337 01202 01202 01236 01343 01345 01337 (9 rows)となり,複数の同じ値が出力されますが,
SELECT DISTINCT area FROM spring;とすれば,重複する行は表示されません。
WHERE 検索条件を追加して記述します。ここで検索条件の基本形は
列名 比較演算子 値または,これを論理演算子 AND や OR で結んだものです
大小を比較する
=
等しい <>
等しくない <
小なり <=
以下 >
大なり >=
以上
<
や >
等の比較演算子は,
数値以外にも,順序を持つ値一般に対して使用できます。
例えば,計算機内での文字の表現は文字コードであり,
文字コード同士には順序がありますから,
文字や文字列の大小を比較することが可能です。
比較演算子は次のように使います。
SELECT * FROM area_code WHERE code = '01202'; name | code --------+------- 函館市 | 01202 (1 row) SELECT * FROM area_code WHERE code <> '01202'; name | code --------+------- 七飯町 | 01337 北斗市 | 01236 鹿部町 | 01343 森町 | 01345 (4 rows) SELECT * FROM area_code WHERE code > '01335'; name | code --------+------- 七飯町 | 01337 鹿部町 | 01343 森町 | 01345 (3 rows)
SELECT * FROM area_code WHERE code = '01202' OR code = '01337'; name | code --------+------- 函館市 | 01202 七飯町 | 01337 (2 rows) SELECT * FROM area_code WHERE code >= '01202' AND code < '01337'; name | code --------+------- 函館市 | 01202 北斗市 | 01236 (2 rows)
( )
を使います。
次の二つの実行例の違いに注意してください。
SELECT * FROM area_code WHERE code = '01202' OR code <= '01343' AND code >= '01337'; name | code --------+------- 函館市 | 01202 七飯町 | 01337 鹿部町 | 01343 (3 rows) SELECT * FROM area_code WHERE (code = '01202' OR code <= '01343') AND code >= '01337'; name | code --------+------- 七飯町 | 01337 鹿部町 | 01343 (2 rows)
通常,LIKE は記号
と共に使います。
%
任意の文字列(長さ0の文字列も含む) _
任意の 1 文字
SELECT * FROM area_code WHERE code LIKE '%133%'; name | code --------+------- 七飯町 | 01337 (1 row)
% は任意の文字列を表す記号ですから, UNIX シェルのメタキャラクタにおける * に相当するものです。 従って,
WHERE code LIKE '013%'
は列 code が 013 で始まる行を指定し,
WHERE code LIKE '%02'
は列 code が 02 で終わる行を指定しています。
_
の利用例です。
_
はシェルのメタキャラクタ ? に相当します。
最初の 4 文字は何でも構わなくて,5 文字目が 5 である行が取り出されます。SELECT * FROM area_code WHERE code LIKE '____5'; name | code ------+------- 森町 | 01345 (1 row)
LIKE の後ろには %
と _
の両方が含まれていても構いません。
ORDER BY 列名
この形式では,出力行が指定した列名で昇順に並びます。
昇順 (ascend)並びであることを明示して
ORDER BY 列名 ASC
とすることもできます。
SELECT * FROM spring ORDER BY area; name | area --------------+------- 谷地頭温泉 | 01202 湯の川温泉街 | 01202 川汲温泉郷 | 01202 戸井温泉 | 01202 せせらぎ温泉 | 01236 東大沼温泉郷 | 01337 仁山温泉 | 01337 鹿部温泉郷 | 01343 濁川温泉郷 | 01345 (9 rows)
ORDER BY 列名 DESC
とします。
列名を ,(カンマ)区切りで複数指定して
ORDER BY 列名1, 列名2, ...
とすれば,
列名 1 の値が等しい行が, さらに列名 2 で並べ替えられます。
各列名に続き ASC や DESC も指定できます。
SELECT * FROM spring ORDER BY area DESC, name; name | area --------------+------- 濁川温泉郷 | 01345 鹿部温泉郷 | 01343 仁山温泉 | 01337 東大沼温泉郷 | 01337 せせらぎ温泉 | 01236 戸井温泉 | 01202 川汲温泉郷 | 01202 谷地頭温泉 | 01202 湯の川温泉街 | 01202 (9 rows)ここで,name 列の並べ替えは,日本語の文字コードに基づいて行われます。
SELECT * FROM area_code WHERE code = '01236' OR code = '01202' OR code = '01337' ORDER BY code;
name | code --------+------- 函館市 | 01202 北斗市 | 01236 七飯町 | 01337 (3 rows)