Contents
重複の処理
あるテーブルに重複レコードが複数ある場合があります。このようなレコードを抽出する際、重複したレコードをフェッチするのではなく、ユニークなレコードのみを抽出する方が理にかなっています。
すでに説明したSQL DISTINCTキーワードは、すべての重複レコードを削除し、一意のレコードのみを抽出するSELECTステートメントと組み合わせて使用されます。
構文
重複レコードを除去するためのDISTINCTキーワードの基本的な構文は次のとおりです。
SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]
例
次のレコードを持つCUSTOMERSテーブルで考えてみましょう
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | kodak | 32 | Ahmedabad | 2000.00 | | 2 | nikon | 25 | Delhi | 1500.00 | | 3 | suzuki | 23 | Kota | 2000.00 | | 4 | nissan | 25 | Mumbai | 6500.00 | | 5 | tometo | 27 | Bhopal | 8500.00 | | 6 | nakag | 22 | MP | 4500.00 | | 7 | toshiki | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
まず、次のSELECTクエリが給与レコードを重複して返す方法を見てみましょう。
SQL> SELECT SALARY FROM CUSTOMERS ORDER BY SALARY;
これは、2000年の給与が2倍になっている元の表の重複レコードである場合、次の結果を生成します。
+----------+ | SALARY | +----------+ | 1500.00 | | 2000.00 | | 2000.00 | | 4500.00 | | 6500.00 | | 8500.00 | | 10000.00 | +----------+
さて、上記のSELECTクエリでDISTINCTキーワードを使用し、その結果を見てみましょう。
SQL> SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;
これにより、重複エントリがない場合、次の結果が生成されます。
+----------+ | SALARY | +----------+ | 1500.00 | | 2000.00 | | 4500.00 | | 6500.00 | | 8500.00 | | 10000.00 | +----------+