Symfoware Server SQLビギナーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第2章 データを検索する方法> 2.1 列の値をそのまま取り出す

2.1.4 冗長な行を取り除いて取り出す

単一行SELECT文で取り出せるのは一行だけです。単一行SELECT文で探索条件の結果が真になる行が複数存在するとエラーになります。また、探索条件の指定を省略すると、表のすべての行が取り出しの対象になるため、表に2行以上のデータがあるとエラーになります。このように、取り出しの対象になる行が複数ある場合でも、取り出す列のすべてについて、それぞれの行の値が同じ場合には、結果を1行にして取り出すことができます。それには、“DISTINCT”を指定します。指定例を以下に示します。

例1

在庫表から、製品番号が“120”未満の製品名と倉庫番号を求めます。これらの値が同じ行は1行として処理します。
SELECT DISTINCT 製品名, 倉庫番号 INTO :PRODUCT, :WHCODE

       FROM 在庫管理.在庫表 WHERE 製品番号 < 120

[図:冗長な行を取り除いて取り出す例]

DISTINCTは、取り出す行の値が互いに等しいものを1行にするために使用します。DISTINCTの使用方法で誤りやすいのは、取り出す行が複数あってもエラーにならないと誤解した場合です。この例を以下に示します。

例2

DISTINCTを誤って使用した例です。在庫表から、製品番号が“120”未満の製品名と在庫数量を求めます。
SELECT DISTINCT 製品名, 在庫数量 INTO :PRODUCT, :STOCKQTY

       FROM 在庫管理.在庫表 WHERE 製品番号 < 120

[図:DISTINCTの誤った使用方法]


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2006