重複行を除外
取得したデータの中に重複する行が含まれていた場合、重複行は除外してデータを取得することが可能です。書式は次の通りです。
SELECT DISTINCT カラム名, ... FROM テーブル名;
SELECTの後にDISTINCTを付けてデータを取得すると、取得したデータの中に重複した行が含まれていた場合にはそれを除外します。この時、除外の対象となる行は、全てのカラムの値が一致している行ではなく、SELECT文で取得したカラムの値が全て一致している行です。
具体的には次のようになります。
create table customer(id integer, name text); select destinct name from customer;
上記のSELECT文では「name」カラムの値をだけを取得していますので、「name」カラムの値が重複するデータは除外してデータを取得します。
なおDISTINCTとは逆に重複するデータも全て取得する場合にはALLを指定します。
SELECT ALL カラム名, ... FROM テーブル名;
ただ何も指定しなかった場合は全てのデータを取得するため、ALLを明示的に指定することはほとんどありません。
サンプル
では実際に試してみます。
次のようなデータが格納されたテーブルを対象にします。
まず「name」カラムの値だけを取得してみます。
取得したデータには重複する行も含まれています。それではDISTINCTを付けてみます。
select distinct name from salesdata;
重複行は除外されてデータが取得されました。
なお取得するデータが複数のカラムの値の場合、指定されたカラムの値が全て一致する行だけが除外されます。
「dt」カラムや「name」カラムだけを見れば重複している行もありますが、「dt」カラムの値と「name」カラムの値のペアで重複している行だけが除外されています(今回の例では該当行がありません)。
( Written by T.buzz.Ikura+ )