SQL Serverでデータを扱う際、同じデータが複数行にわたって存在することがあります。このような重複データは分析やレポートの際に混乱を招くことがあります。そのため、データの中からユニークな情報だけを抽出する方法は非常に重要です。
本記事では、SQL ServerにおけるDISTINCTの使用方法について解説します。
DISTINCTを使用することで、データの重複を簡単に排除し、ユニークなデータを取得することができます。また、複数列を指定する場合の注意点や、より効率的に利用するためのコツについても紹介します。
DISTINCTとは?
DISTINCTは、SQLのクエリで使用されるキーワードで、結果セットの中から重複する行を排除してユニークなデータのみを取得するために使われます。これにより、不要なデータを取り除き、正確な分析を行うことができます。
例えば、以下のようなテーブルがあったとします。
テーブル名: Products
| ProductID | ProductName | Category |
|---|---|---|
| 1 | Apples | Fruits |
| 2 | Bananas | Fruits |
| 3 | Apples | Fruits |
| 4 | Carrots | Vegetables |
この場合、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;
実行結果
| ProductName | Category |
|---|---|
| Apples | Fruits |
| Bananas | Fruits |
| Carrots | Vegetables |
この結果では、”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の制限と注意点
- 全ての列を指定する場合の注意
SELECT DISTINCT *を使用すると、テーブル全体の重複を排除しますが、列が多い場合はパフォーマンスが低下する可能性があります。必要な列を明確に指定することをお勧めします。 - NULLの扱い
DISTINCTは、NULLも1つのユニークな値として扱います。例えば、以下のようなテーブルがあった場合:
テーブル名: SampleTable
| ID | Value |
|---|---|
| 1 | A |
| 2 | NULL |
| 3 | A |
| 4 | NULL |
以下のクエリを実行すると:
SELECT DISTINCT Value
FROM SampleTable;
実行結果
| Value |
|---|
| A |
| NULL |
演習問題
以下のテーブルを使用して、問題に答えてください。
テーブル名: Customers
| CustomerID | Name | City |
|---|---|---|
| 1 | Alice | New York |
| 2 | Bob | Los Angeles |
| 3 | Alice | New York |
| 4 | Charlie | Chicago |
| 5 | Bob | Los 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;
実行結果
| Name | City |
|---|---|
| Alice | New York |
| Bob | Los Angeles |
| Charlie | Chicago |
問題 3
SELECT DISTINCT Name
FROM Customers
WHERE City = 'New York';
実行結果
| Name |
|---|
| Alice |
おわりに
DISTINCTを使用することで、SQL Serverでの重複データの排除が簡単に行えます。本記事で紹介した基本的な使い方や注意点、演習問題を通じて、実際の業務やプロジェクトで活用できる知識を身につけてください。
重複を効果的に排除することで、より正確なデータ分析や効率的なクエリ作成が可能になります。次回はさらに高度なSQLのテクニックを学びましょう!
