SQLite | データの検索 | DISTINCTで重複を除外する

検索結果に重複値が含まれる場合、DISTINCTで除外できます。ここでは、その使い方を説明します。

DISTINCTで重複を除外する

SELECTの結果から重複を除くにはDISTINCTを使います。構文は次のとおりです。

SELECT DISTINCT カラム名, ... FROM テーブル名;

重複は元の行全体ではなく、選択したカラムで判定されます。1カラムなら同じ値、複数なら同じ値の組み合わせが除外されます。

重複を含めるにはALLを使います。構文は次のとおりです。

SELECT ALL カラム名, ... FROM テーブル名;

どちらも省略した場合はALLと同じため、通常は記述不要です。

例として次のテーブルを作成します。

create table product (id integer, name text, color text);
sqlite> create table product (id integer, name text, color text);
sqlite> 

テーブルにデータを追加します。

insert into product values (1, 'Mouse', 'White');
insert into product values (2, 'Pen', 'Green');
insert into product values (3, 'Mouse', 'Black');
insert into product values (4, 'NotePC', 'Black');
insert into product values (5, 'Display', 'Yellow');
insert into product values (6, 'Mouse', 'White');
sqlite> insert into product values (1, 'Mouse', 'White');
sqlite> insert into product values (2, 'Pen', 'Green');
sqlite> insert into product values (3, 'Mouse', 'Black');
sqlite> insert into product values (4, 'NotePC', 'Black');
sqlite> insert into product values (5, 'Display', 'Yellow');
sqlite> insert into product values (6 'Mouse', 'White');
Error: near "'Mouse'": syntax error
sqlite> insert into product values (6, 'Mouse', 'White');
sqlite> 

まずproductnameを重複を含めて検索します。

select name from product;
sqlite> select name from product;
name      
----------
Mouse     
Pen       
Mouse     
NotePC    
Display   
Mouse     
sqlite> 

次にDISTINCTを付けてnameを検索します。

select distinct name from product;
sqlite> select distinct name from product;
name      
----------
Mouse     
Pen       
NotePC    
Display   
sqlite>

重複するnameが除外されました。

colorについてもDISTINCTの有無を比較します。

select color from product;
sqlite> select color from product;
color     
----------
White     
Green     
Black     
Black     
Yellow    
White     
sqlite> 
select distinct color from product;
sqlite> select distinct color from product;
color     
----------
White     
Green     
Black     
Yellow    
sqlite> 

DISTINCTにより重複するcolorが除外されました。

複数カラムの重複を除外する

複数カラムでは、選択値の組み合わせが同じ行を除外します。次の例ではnamecolorに適用します。

select distinct name, color from product;
qlite> select distinct name, color from product;
name        color     
----------  ----------
Mouse       White     
Pen         Green     
Mouse       Black     
NotePC      Black     
Display     Yellow    
sqlite> 

個々の値は重複していても、両方の値が同じ行だけが除外されます。