JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
重複行の削除: 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 UNIQUE か SORT UNIQUE にするかは CBO が判定する。
関連事項