概要:このチュートリアルでは、Oracle SELECT DISTINCT 文を使用してテーブルから個別のデータを照会する方法を学びます。
Introduction to Oracle SELECT DISTINCT statement
DISTINCT 句は、結果セットで重複する行をフィルタする SELECT 文で使用されています。
SELECT DISTINCT 文の構文を以下に示します。
この文では、table の column_1 にある値が比較されて重複が判断されます。
複数の列に基づいて一意のデータを取得するには、次のようにSELECT句で列リストを指定するだけです:
この構文では、column_1、column_2、column_3の値の組み合わせによってデータの一意性が判断されます。
DISTINCT句はSELECT文でのみ使用できます。
DISTINCTは標準SQLではないUNIQUEと同義語であることに注意してください。
Oracle SELECT DISTINCT の例
SELECT DISTINCT を使用して、それがどのように機能するかを確認するためのいくつかの例を見てみましょう。
A) Oracle SELECT DISTINCT 1列の例
サンプルデータベースのcontactsテーブルを見てみましょう。

次の例は、すべての連絡先のファーストネームを取得します。
このクエリは319列を返し、contactsテーブルが319行を有することが示されました。

一意の連絡先名を取得するには、次のように上記の SELECT 文に DISTINCT キーワードを追加します:
さて、結果セットは 302 行になり、17 の重複する行が削除されたことを意味します。

B) Oracle SELECT DISTINCT 複数列の例
次のorder_items表を見てください:

次の文はorder_items表から個別の製品IDと数量を選択します。
以下は結果を示しています:

この例では、product_id と quantity 列の両方の値は、結果セット内の行の一意性を評価するために使用されています。
C) Oracle SELECT DISTINCTとNULL
DISTINCTはNULL値を互いに重複しているものとして扱います。 多くの NULL 値を持つ列からデータを照会するために SELECT DISTINCT 文を使用すると、結果セットには 1 つの NULL 値のみが含まれます。
サンプル・データベースの locations テーブルを参照してください。

次のステートメントは、多くの NULL 値を持つ state 列からデータを取得します:
結果:

ご覧のように、NULL 値は 1 つだけ返されます。
いくつかの列に DISTINCT を適用し、他の列をスキップしたい場合は、代わりに GROUP BY 節を使用する必要があります。
このチュートリアルでは、SELECT DISTINCT 文を使用して 1 つまたは複数の列に基づいて一意のデータを取得する方法について学びました。