DISTINCTとは?でぃすてぃんくと
DISTINCTとは、選択リストの前に置き、問合せ結果から重複する行を取り除く指定。関係モデルの関係は重複を含まない集合だが、SQLの表は同じ行を複数持てる多重集合なので、集合としての振る舞いが欲しい場面では明示が要る。除去には整列またはハッシュ処理が伴うため、無視できない負荷を生む点も押さえる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
関係モデルとSQLのずれから生まれた指定である。理論どおり常に重複を排除する実装にすると、件数を数える・金額を合計するといった処理で必要な重複まで消え、しかもすべての問合せに整列コストがのしかかる。そこで既定は重複を残し、必要な場面だけ利用者が指定する形に落ち着いた。db試験では、重複がどの結合から生まれたかを見抜き、より安い書き方へ置き換えられるかが問われる。
具体例
会員表と受注表を結合して会員名を取り出すと、受注が3件ある会員は3行現れる。DISTINCTで1行にまとめられるが、内部では整列かハッシュが走る。重複の原因が結合そのものであれば、WHERE EXISTS (SELECT * FROM 受注 …) で「受注を持つ会員」を絞るほうが、大きな結合結果を作らずに済むぶん速いことが多い。
試験での引っ掛け
効く範囲は選択リスト全体であって、直後の1列だけではない。SELECT DISTINCT 支店名, 商品名 は2列の組合せで重複を判定する。また COUNT(DISTINCT 列) と COUNT(*) は別物で、前者はNULLを除いた異なり値の個数、後者はNULLを含む行数を返す。GROUP BYでも同じ結果が得られる場面との使い分けも問われる。
関連用語
出た過去問
出典:平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)
次のSQL文と同じ検索結果が得られるSQL文はどれか。 SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE COL1 IN (S…
正解:SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
IN述語による副問合せは、外側の行の値が副問合せの結果集合に含まれるかを判定するもので、相関副問合せを使ったEXISTS述語に書き換えられる。どちらもTBL2に同じCOL1の値が1件でもあればその行を残すという意味になり、結果は一致する。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。