SQL Serverで重複を排除する方法:DISTINCTを使ったユニークなデータ抽出

SQL Serverでデータを扱う際、同じデータが複数行にわたって存在することがあります。このような重複データは分析やレポートの際に混乱を招くことがあります。そのため、データの中からユニークな情報だけを抽出する方法は非常に重要です。

本記事では、SQL ServerにおけるDISTINCTの使用方法について解説します。

DISTINCTを使用することで、データの重複を簡単に排除し、ユニークなデータを取得することができます。また、複数列を指定する場合の注意点や、より効率的に利用するためのコツについても紹介します。


DISTINCTとは?

DISTINCTは、SQLのクエリで使用されるキーワードで、結果セットの中から重複する行を排除してユニークなデータのみを取得するために使われます。これにより、不要なデータを取り除き、正確な分析を行うことができます。

例えば、以下のようなテーブルがあったとします。

テーブル名: Products
ProductIDProductNameCategory
1ApplesFruits
2BananasFruits
3ApplesFruits
4CarrotsVegetables

この場合、DISTINCTを使用してCategory列のみを取得すると、重複したデータが排除されます。


基本的なDISTINCTの使い方

DISTINCTの基本的な構文は以下の通りです。

SELECT DISTINCT 列名
FROM テーブル名;

例 1: 単一列での使用

ProductsテーブルからCategory列のユニークな値を取得したい場合、以下のクエリを使用します。

SELECT DISTINCT Category
FROM Products;
実行結果
Category
Fruits
Vegetables

このクエリでは、”Fruits”という重複するデータが1回のみ返され、ユニークな値が抽出されます。


複数列でのDISTINCT

複数の列を指定してDISTINCTを使用する場合、その組み合わせが一意であるかどうかを判断します。

例 2: 複数列での使用

Productsテーブルから、ProductNameとCategoryの組み合わせがユニークなデータを取得する場合は以下のクエリを使用します。

SELECT DISTINCT ProductName, Category
FROM Products;
実行結果
ProductNameCategory
ApplesFruits
BananasFruits
CarrotsVegetables

この結果では、”Apples”が重複していますが、Category列が同じ値の場合のみ排除されています。


WHERE句との組み合わせ

DISTINCTはWHERE句と組み合わせて使用することも可能です。条件を絞り込むことで、特定の範囲内でユニークなデータを取得できます。

例 3: WHERE句との組み合わせ

Fruitsカテゴリの中でユニークなProductNameを取得する場合、以下のクエリを使用します。

SELECT DISTINCT ProductName
FROM Products
WHERE Category = 'Fruits';
実行結果
ProductName
Apples
Bananas

ORDER BYとの組み合わせ

DISTINCTで取得したユニークなデータを特定の順序で並び替えるには、ORDER BY句を使用します。

例 4: ORDER BYとの組み合わせ

ユニークなProductNameをアルファベット順で取得する場合は以下のクエリを使用します。

SELECT DISTINCT ProductName
FROM Products
ORDER BY ProductName ASC;
実行結果
ProductName
Apples
Bananas
Carrots

DISTINCTの制限と注意点

  1. 全ての列を指定する場合の注意
    SELECT DISTINCT *を使用すると、テーブル全体の重複を排除しますが、列が多い場合はパフォーマンスが低下する可能性があります。必要な列を明確に指定することをお勧めします。
  2. NULLの扱い
    DISTINCTは、NULLも1つのユニークな値として扱います。例えば、以下のようなテーブルがあった場合:
テーブル名: SampleTable
IDValue
1A
2NULL
3A
4NULL

以下のクエリを実行すると:

SELECT DISTINCT Value
FROM SampleTable;
実行結果
Value
A
NULL

演習問題

以下のテーブルを使用して、問題に答えてください。

テーブル名: Customers
CustomerIDNameCity
1AliceNew York
2BobLos Angeles
3AliceNew York
4CharlieChicago
5BobLos Angeles

問題 1

Customersテーブルから、City列のユニークな値を取得するクエリを作成してください。

問題 2

Customersテーブルから、NameとCityの組み合わせがユニークなデータを取得するクエリを作成してください。

問題 3

Customersテーブルから、Cityが”New York”の顧客のユニークなNameを取得するクエリを作成してください。


解答例

問題 1
SELECT DISTINCT City
FROM Customers;
実行結果
City
New York
Los Angeles
Chicago

問題 2
SELECT DISTINCT Name, City
FROM Customers;
実行結果
NameCity
AliceNew York
BobLos Angeles
CharlieChicago

問題 3
SELECT DISTINCT Name
FROM Customers
WHERE City = 'New York';
実行結果
Name
Alice

おわりに

DISTINCTを使用することで、SQL Serverでの重複データの排除が簡単に行えます。本記事で紹介した基本的な使い方や注意点、演習問題を通じて、実際の業務やプロジェクトで活用できる知識を身につけてください。

重複を効果的に排除することで、より正確なデータ分析や効率的なクエリ作成が可能になります。次回はさらに高度なSQLのテクニックを学びましょう!