基本情報技術者試験 - 令和5年7月修了 - 問20

国語と数学の試験を実施し,2教科の成績は氏名とともに “得点” 表に記録されている。1教科は平均点以上で,残りの1教科は平均点未満の生徒氏名を “得点” 表から抽出するSQL文はどれか。ここで,条件文Aと条件文Bには,それぞれ次の条件が与えられているものとする。

〔条件文〕
 A 国語の点数が国語の平均点以上
 B 数学の点数が数学の平均点以上
アSELECT 生徒氏名 FROM 得点
 WHERE(A AND B)AND NOT(A AND B)
イSELECT 生徒氏名 FROM 得点
 WHERE(A AND B)AND NOT(A OR B)
ウSELECT 生徒氏名 FROM 得点
 WHERE(A OR B)AND NOT(A AND B)
エSELECT 生徒氏名 FROM 得点
 WHERE(A OR B)AND NOT(A OR B)
答え : ウ
分野 : テクノロジ系 › 技術要素 › データベース › データ操作
同一問題 : 〔令7修6問20〕〔平28修6問28〕〔平26修12問27〕〔平25修6問33〕
解説 :
国語と数学の2教科について,「1教科は平均点以上で,残りの1教科は平均点未満」という条件を満たす生徒を抽出するSQL文を選ぶ問題です。

条件文Aを「国語が平均点以上」,条件文Bを「数学が平均点以上」とすると,求めたいのは,AとBのどちらか一方だけが成り立っていて,両方とも成り立っている場合や,両方とも成り立っていない場合は除外したい,という状況です。これは,AとBのどちらか一方でも成り立っていること(A OR B)を満たしつつ,同時に両方とも成り立っている場合(A AND B)は除外するという条件で表現できます。従って,「(A OR B)AND NOT(A AND B)」という条件文が,求めている状況を正しく表しており,正解は「ウ」です。

「ア」は,(A AND B)を満たしつつ,その否定でもある(NOT(A AND B)を満たすという矛盾した条件になっており,常に真になることがない,意味を持たない式です。

「イ」は,AとBの両方が成り立っていることを求めつつ,AまたはBが成り立っていないことも同時に求めており,これも常には成立しない条件です。

「エ」は,AまたはBのどちらかが成り立っていることを求めつつ,AまたはBのどちらも成り立っていないことも同時に求めるという,これもまた矛盾した条件になっています。

「1教科だけが条件を満たす」という状況を表すには,「どちらか一方」(OR)を満たしつつ「両方」は(AND)除外するという考え方が必要になる点がポイントです。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる