English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、結果集中の重複値を削除する方法を学びます。
データベースからデータを取得する際に、結果集中に重複行や値が含まれることがあります。これらの重複値を削除するには、SELECTキーワードの後にDISTINCTキーワードを直接指定することができます。以下のようになります:
DISTINCT句は、結果集中の重複行を削除するために使用されます:
SELECT DISTINCT column_list FROM table_name;
ここでは、column_listは、値を取得するために取得したいデータベーステーブルの列名またはフィールド名のリスト(例えばname、age、countryなど)。
注意: 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値を同じ値として見なすからです。