SQL(Structured Query Language)は、データベース管理システムにおいてデータを操作するための標準言語です。
その中でも、DISTINCT
キーワードは、重複するレコードを排除して一意のレコードを取得するために使用されます。
本記事では、DISTINCT
の基本的な使い方や具体例を通じて、その役割と効果について詳しく説明します。
DISTINCT
の基本構文
基本的な構文は以下の通りです。
SELECT DISTINCT 列名1, 列名2, ...
FROM テーブル名;
この構文は、指定した列に基づいて重複を排除し、一意のレコードを取得します。
使用例
具体的な使用例を見てみましょう。
単一列でのDISTINCT
以下の例では、顧客テーブルから重複する都市名を排除して一意の都市名を取得します。
SELECT DISTINCT city FROM customers;
このクエリは、customers
テーブルのcity
列に存在する一意の都市名を返します。
複数列でのDISTINCT
複数の列を指定することもできます。その場合、指定したすべての列の組み合わせが一意であるレコードが取得されます。
SELECT DISTINCT city, state FROM customers;
このクエリは、customers
テーブルからcity
列とstate
列の組み合わせが一意であるレコードを返します。
サブクエリでの使用
DISTINCT
をサブクエリで使用することも可能です。以下の例では、サブクエリで一意の顧客IDを取得し、外部クエリでその顧客の詳細を取得します。
SELECT * FROM customers
WHERE customer_id IN (
SELECT DISTINCT customer_id
FROM orders
);
COUNT関数との組合せ
COUNT
と DISTINCT
を組み合わせて使うことで、重複を排除した値の数をカウントすることができます。
特定のカラムの値が重複しているかどうかに関係なく、一意の値の数を取得するために DISTINCT
を使用します。
基本的な構文は以下のようになります。
SELECT COUNT(DISTINCT column_name)
FROM table_name;
複数のカラムに対して DISTINCT
を適用してカウントすることも可能です。
以下の例では、column1
と column2
の組み合わせが一意な行の数をカウントします。
SELECT COUNT(DISTINCT column1, column2)
FROM table_name;
COUNT(DISTINCT column_name)
は、NULL 値を除外してカウントします。
例
例えば、employees
というテーブルがあり、その中に従業員の部署を示す department_id
というカラムがあるとします。
この部署IDに重複がある場合、一意の部署数をカウントするには以下のようにします。
SELECT COUNT(DISTINCT department_id)
FROM employees;
このクエリは、department_id
が重複する値を無視し、ユニークな部署IDの数をカウントします。
DISTINCT
とGROUP BY
の違い
DISTINCT
は重複を排除して一意のレコードを取得するのに対し、GROUP BY
は指定した列でグループ化し、集計関数と一緒に使用されることが多いです。
以下に違いを示します。
DISTINCT
の使用例
SELECT DISTINCT department FROM employees;
このクエリは、employees
テーブルから一意の部署名を取得します。
GROUP BY
の使用例
SELECT department, COUNT(*) FROM employees
GROUP BY department;
このクエリは、各部署ごとに従業員の数をカウントします。
パフォーマンスの考慮
DISTINCT
を使用する際は、パフォーマンスに注意する必要があります。
大規模なデータセットに対してDISTINCT
を使用すると、データベースの負荷が高くなることがあります。
そのため、必要に応じてインデックスを設定するなどの最適化が求められます。
このクエリは、orders
テーブルから一意の顧客IDを取得し、その顧客の詳細をcustomers
テーブルから取得します。
まとめ
DISTINCT
は、重複するデータを排除して一意のレコードを取得するための関数です。COUNTとの組合せなどもできるため、様々な集計・分析で利用可能です。