SQL 入門 > SELECT 文の活用(DISTINCT)

重複行の削除: DISTINCT

レコードの重複行の扱い

  • 取り出したレコード(結果セット)から重複する行の削除を行うには、重複を削除するキーワード DISTINCT を使用する。

DEPT_NO の 一覧(重複行は削除) を作成する ⇒ SELECT DISTINCT

SELECT DISTINCT /* 重複行を削除するキーワード DISTINCT */
       DEPT_NO
  FROM USER_MASTER
 ORDER BY DEPT_NO

確認 テーブル定義でのレコードの重複を削除するのではなく、取り出した項目のレコード(結果セット、リザルトセットとも呼ばれる)についての重複行を削除している。

DISTINCT の制限事項

SELECT のリストの合計バイト数が 標準のデータブロックサイズに収まる必要がある(オーバヘッド分を含む)。

DEPT_NO の種類数を取得する(※ NULLは含まない)

SELECT COUNT(DISTINCT DEPT_NO)
  FROM USER_MASTER

DISTINCT と OREDER BY 併用時の制限事項

DISTINCT を SELECT 文に指定する場合には ORDER BY には SELECT リストに含まれていない項目を並び替えに使用できない。これは DISTINCT も ORDER BY も一時領域を使用してソート(して重複を削除 ※)する必要がある。異なるキーのソートを同時の実行できないということ。

(※) 最近では強力な CPU パワーと大規模メモリ志向によって結果セットの行をハッシュにして重複除去するプラン(HASH UNIQUE)になることが多いらしい。
つまり Oracle 10g R2 以降であれば「DISTINCT はソートするから遅い」⇒ 「EXISTS を使って代用する」という実態に則さない特殊な書き換えも不要。HASH UNIQUESORT UNIQUE にするかは CBO が判定する。



関連事項


日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター