🗃️SQLLearn
SQL基礎 レッスン5

DISTINCT

重複する行を除外してユニークな値だけを取得する方法を学びます。

DISTINCTとは

DISTINCTキーワードを使うと、結果セットから重複する行を取り除いてユニークな値だけを返します。 例えば、商品テーブルに同じカテゴリが複数あるとき、DISTINCTを使えばカテゴリ一覧を重複なしで取得できます。

  • SELECT DISTINCT カラム名 — 重複を除いた値を返す
  • 複数カラム指定時は、カラムの組み合わせが重複しないものを返す
  • NULL値も1行として扱われる(複数のNULLは1つにまとめられる)

DISTINCTの活用場面

DISTINCTはデータの種類や一覧を確認したいときに便利です。 ただし、大量データに対してDISTINCTを使うとパフォーマンスが低下することがあるため、 集約関数(GROUP BY)で代替できる場合はそちらを検討しましょう。

  • カテゴリ一覧、都道府県一覧など種類を確認するとき
  • 重複データのチェック・クレンジングの確認
  • COUNT(DISTINCT カラム名) — ユニーク件数のカウント

例1: 重複するカテゴリを除外

テーブル定義
CREATE TABLE products (id INTEGER, name TEXT, price INTEGER, category TEXT);
INSERT INTO products VALUES (1, 'りんご', 150, '果物');
INSERT INTO products VALUES (2, 'バナナ', 80, '果物');
INSERT INTO products VALUES (3, '牛乳', 200, '乳製品');
INSERT INTO products VALUES (4, 'チーズ', 350, '乳製品');
INSERT INTO products VALUES (5, 'みかん', 100, '果物');
INSERT INTO products VALUES (6, 'バター', 300, '乳製品');
SQLエディタ

例2: 複数カラムの組み合わせで重複除外

テーブル定義
CREATE TABLE employees (id INTEGER, name TEXT, department TEXT, job_title TEXT);
INSERT INTO employees VALUES (1, '田中', '開発', 'エンジニア');
INSERT INTO employees VALUES (2, '鈴木', '開発', 'エンジニア');
INSERT INTO employees VALUES (3, '佐藤', '開発', 'マネージャー');
INSERT INTO employees VALUES (4, '山田', '営業', '営業担当');
INSERT INTO employees VALUES (5, '高橋', '営業', 'マネージャー');
SQLエディタ

例3: DISTINCTなしとの比較

テーブル定義
CREATE TABLE employees (id INTEGER, name TEXT, department TEXT);
INSERT INTO employees VALUES (1, '田中', '開発');
INSERT INTO employees VALUES (2, '鈴木', '開発');
INSERT INTO employees VALUES (3, '佐藤', '営業');
INSERT INTO employees VALUES (4, '山田', '営業');
INSERT INTO employees VALUES (5, '高橋', '人事');
SQLエディタ