重複行を除外

広告

取得したデータの中に重複する行が含まれていた場合、重複行は除外してデータを取得することが可能です。書式は次の通りです。

SELECT DISTINCT col_name, ... FROM tbl_name;

SELECTの後にDISTINCTを付けてデータを取得すると、取得したデータの中に重複した行が含まれていた場合にはそれを除外します。この時、除外の対象となる行は、全てのカラムの値が一致している行ではなく、SELECT文で取得したカラムの値が全て一致している行です。

例えば次のように記述します。

SELECT DISTINCT name FROM goods;

上記の場合、「name」カラムの値が重複するデータは除外してデータを取得します。

DISTINCTとは逆に重複するデータも全て取得する場合にはALLを指定します。

SELECT ALL col_name, ... FROM tbl_name;

ただ何も指定しなかった場合は全てのデータを取得するため、ALLを明示的に指定することはほとんどありません。

サンプル

実際に試してみます。まず次のようなテーブルを作成します。

mysql> create table personal(name varchar(20), address varchar(20), old int);

p13-1

テーブルには次のようなデータを追加してあります。

p13-2

では「address」カラムの値を重複行を除外して取得します。

mysql> select distinct address from personal;

p13-3

今度は「address」カラムと「old」カラムの値のペアが重複している行を除外して取得します。

mysql> select distinct address, old from personal;

p13-4

( Written by Tatsuo Ikura )