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>
まずproductのnameを重複を含めて検索します。
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が除外されました。
複数カラムの重複を除外する
複数カラムでは、選択値の組み合わせが同じ行を除外します。次の例ではnameとcolorに適用します。
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>
個々の値は重複していても、両方の値が同じ行だけが除外されます。