ORDER BY句とDISTINCTとは?
ORDER BY句とDISTINCTとは、ORDER BYは結果行の並び順を指定する句で、ASC(昇順)/DESC(降順)を列ごとに指定でき、複数列なら左の列が優先される。DISTINCTは重複行を1行にまとめる指定。どちらも内部で並べ替えや突合を伴うため、大量データでは性能に直結する。
応用情報技術者試験の過去問では6回出題されています(2017年度〜2024年度)。
おーだーばいくとでぃすてぃんくと
ORDER BY句とDISTINCTの意味
ORDER BYは結果行の並び順を指定する句で、ASC(昇順)/DESC(降順)を列ごとに指定でき、複数列なら左の列が優先される。DISTINCTは重複行を1行にまとめる指定。どちらも内部で並べ替えや突合を伴うため、大量データでは性能に直結する。
ORDER BY句とDISTINCTの具体例
「部門コード昇順、その中で売上降順」の帳票は ORDER BY 部門コード ASC, 売上 DESC と書く。DISTINCTは SELECT DISTINCT 部門コード のように使うが、対象列にインデックスがあれば並べ替えを省略でき、無ければ全件のソート作業領域が必要になる。
ORDER BY句とDISTINCTは試験でどう引っ掛けられる?
DISTINCTは「指定した1列だけ」ではなくSELECTした列の組合せ全体で重複を判定する。列を1つ足しただけで重複が消えなくなるのはこのため。またSQLは順序を保証しないので、ORDER BYを書かなければ実行のたびに並びが変わり得る。
ORDER BY句とDISTINCTと関連する用語
ORDER BY句とDISTINCTが出た過去問
関係R(ID, A, B, C)のA, Cへの射影の結果とSQL文で求めた結果が同じになるように、aに入れるべき字句はどれか。ここで、関係Rを表Tで実現し、表T…
正解:DISTINCT
要点:関係代数の射影は重複を除くのでSQLではDISTINCTが要る
関係代数の射影は集合演算なので、結果に重複する行は現れない。一方SQLのSELECTは既定で重複行をそのまま返すため、A列とC列だけを取り出すと同じ値の組が複数出てしまう。重複を取り除くDISTINCTを指定することで、射影の結果と一致させられる。
出典:平成29年度 秋期 応用情報技術者試験 午前 問28(IPA)“部門別売上”表から、部門コードごと、期ごとの売上を得るSQL文はどれか。
正解:SELECT 部門コード, '第1期' AS 期, 第1期売上 AS 売上 FROM 部門別売上 UNION (SELECT 部門コード, '第2期' AS 期, 第2期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
要点:横持ちを縦持ちに変換するにはUNIONで行を連結する
1行に第1期と第2期の売上が横に並んだ表を、期ごとの縦持ちに変換したい。第1期を取り出す問合せと第2期を取り出す問合せをそれぞれ作り、UNIONで行方向に連結すれば求める結果になる。UNIONは列数と列のデータ型が一致していれば結果を縦に結合できる。
出典:令和3年度 秋期 応用情報技術者試験 午前 問29(IPA)“商品”表に対して、次のSQL文を実行して得られる仕入先コード数は幾つか。 〔SQL文〕 SELECT DISTINCT 仕入先コード FROM 商品 WHER…
正解:3
要点:副問合せの平均値と比較しDISTINCTで重複を除く
各行の利益(販売単価−仕入単価)は200, 200, 100, 900, 400, 200, 300, 500, 500, 300で、合計3,600、平均は360です。これを上回るのは900のD004、400のE005、500のH008、500のI009の4行で、仕入先コードはS1・S1・S4・S5。DISTINCTで重複を除くとS1、S4、S5の3件になります。
出典:令和4年度 秋期 応用情報技術者試験 午前 問28(IPA)更新可能なビューを作成するSQL文はどれか。ここで、SQL文中に現れる基底表は全て更新可能とする。
正解:CREATE VIEW 高額商品(商品番号, 商品名, 商品単価) AS SELECT 商品番号, 商品名, 商品単価 FROM 商品 WHERE 商品単価>1000
要点:更新可能ビューは単一表の選択と射影に限られる
ビューが更新可能であるためには、ビューの各行が基底表の1行に一意に対応し、更新内容を基底表へ一意に反映できる必要がある。単一の表からWHERE句で行を絞り、列をそのまま射影しただけのビューはこの条件を満たすので更新可能である。DISTINCT、GROUP BY、集約関数を含むビューは元の行との対応が失われるため更新できない。
出典:令和5年度 秋期 応用情報技術者試験 午前 問28(IPA)“製品”表と“在庫”表に対し、次のSQL文を実行した結果として得られる表の行数は幾つか。SELECT DISTINCT 製品番号 FROM 製品 WHERE N…
正解:2
要点:NOT EXISTSは副問合せが空になる行だけを残す
NOT EXISTSは、相関副問合せが1行も返さない製品だけを残す。在庫数が30を超える行を持つ製品はAB1805(150)、CC5001(200と40)、ZZ9900(130)の3つで、XZ3000は30と20なので条件を満たさず、MZ1000は在庫表に行がない。したがって結果に残るのはMZ1000とXZ3000の2行である。
出典:令和5年度 秋期 応用情報技術者試験 午前 問29(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。