English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL DISTINCT 句

このチュートリアルでは、結果集中の重複値を削除する方法を学びます。

異なる値の検索

データベースからデータを取得する際に、結果集中に重複行や値が含まれることがあります。これらの重複値を削除するには、SELECTキーワードの後にDISTINCTキーワードを直接指定することができます。以下のようになります:

文法

DISTINCT句は、結果集中の重複行を削除するために使用されます:

SELECT DISTINCT column_list FROM table_name;

ここでは、column_listは、値を取得するために取得したいデータベーステーブルの列名またはフィールド名のリスト(例えばnameagecountryなど)。

注意: DISTINCT句の動作はUNIQUE制約がありますが、nullに対する扱いが異なります。2つのNULL値はユニークとされ、同時にそれぞれが異なると見なされません。

いくつかの例を見て、実際の動作を説明しましょう。

仮にデータベースに以下のようなcustomers以下の記録を含むテーブルがあります:

+---------+--------------------+-----------+-------------+
|cust_id|cust_name  |city  |postal_code  |
+---------+--------------------+-----------+-------------+
|       1 |Maria Anders  |Berlin  | 12209       |
|       2 |Fran Wilson  |Madrid  | 28023       |
|       3 |Dominique Perrier  |Paris  | 75016       |
|       4 |Martin Blank  |Turin  | 10100  |
|       5 |Thomas Hardy  |Portland  | 97219       |
|       6 |Christina Aguilera|Madrid  | 28001       |
+---------+--------------------+-----------+-------------+

以下の文を実行すると、このテーブルのcity列のすべての行が含まれています。

SELECT city FROM customers;

実行すると、以下のような出力が得られます:

+-----------+
| city      |
+-----------+
| ベルリン    |
| マドリード   |
| パリ     |
| トリノ     |
| ポートランド  |
| マドリード   |
+-----------+

もし詳細に表示を確認すると、都市「Madrid」が結果集中に2回出現していることがわかります。これは良くありませんね。それでは、この問題を解決しましょう。

重複データを削除する

以下の文はDISTINCTを使用するためのものです:customersテーブルにすべての都市のリストが生成されます。

SELECT DISTINCT city FROM customers;

上記のコマンドを実行すると、以下のような出力が得られます:

+-----------+
| city      |
+-----------+
| ベルリン    |
| マドリード   |
| パリ     |
| トリノ     |
| ポートランド  |
+-----------+

ご覧の通り、この結果セットには重複する値がありません。

注意:SELECT DISTINCT文を使用して複数のNULL値を持つ列に対して、SQLは1つのNULL値を保持し、他の値を結果セットから削除します。なぜなら、DISTINCTはすべてのNULL値を同じ値として見なすからです。