データベース 第2部 データベース 6 演習問題


 

6 演習問題

6.1 演習問題1



演習問題1で使用します。

ACCESS2010 のファイルとして作成されていますので、アイコンをクリックして、「保存」してください。

6.1.1 照会処理


問題 1
[学生]表から、[氏名]と[住所]を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
氏名住所
山本 静香横浜市
本山 優花川崎市
山田 次郎川崎市
山本 四郎横浜市
木田 花梨横須賀市
木本 真司横浜市


問題 2
[学生]表から、[性別]が "女"の学生を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号氏名性別住所
1201山本 静香横浜市
1221本山 優花川崎市
1233木田 花梨横須賀市


問題 3
[得点]表から、[学生番号]が "1221"でない学生のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1231A02
90
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11


問題 4
[得点]表から、[受験日]が 2024/10/10で、[得点]が80以上のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1231A02
90
2024/10/10


問題 5
[得点]表から、[受験日]が 2024/10/10か、[得点]が80以上のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1221A01
70
2024/10/10
1231A02
90
2024/10/10
1231B01
80
2024/10/11


問題 6
[得点]表から、[得点]が70以上80以下のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1221A01
70
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11


問題 7
[得点]表から、[科目コード]が "A" で始まる科目のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1221A01
70
2024/10/10
1231A02
90
2024/10/10


問題 8
[得点]表から、[学生番号]の3桁目が "2" の学生のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1221A01
70
2024/10/10
1221B02
60
2024/10/11


問題 9
[得点]表から、[得点]が70以上で、[受験日]が 2024/10/11 または [科目コード]の下1桁が "1" のレコードを抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1201B01
85
2024/10/11
1221A01
70
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11


問題 10
[得点]表から、各学生の合計点を求め、次のように表示するための SQL 文を作成しなさい。なお、合計点はそれぞれの[学生番号]でグループ化しています。

<表示結果>
学生番号合計点
1201
145
1221
130
1231
245


問題 11
[得点]表から、各科目の平均点を求め、次のように表示するための SQL 文を作成しなさい。なお、平均点はそれぞれの[科目コード]でグループ化しています。

<表示結果>
科目コード平均点
A01
65
A02
90
B01
82.5
B02
67.5


問題 12
[得点]表から、受験日ごとの受験者総数を求め、次のように表示するための SQL 文をそれぞれ作成しなさい。なお、受験者総数は[受験日]でグループ化して求めます。

[①重複も数える場合]
<表示結果>
受験日受験者総数
2024/10/10
3
2024/10/11
4

[②重複を数えない(同一の学生番号は一人として数える)場合]
<表示結果>
受験日受験者総数
2024/10/10
3
2024/10/11
3



問題 13
[得点]表を、[得点]の降順に整列し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1231A02
90
2024/10/10
1201B01
85
2024/10/11
1231B01
80
2024/10/11
1231B02
75
2024/10/11
1221A01
70
2024/10/10
1221B02
60
2024/10/11
1201A01
60
2024/10/10


問題 14
[得点]表を、[科目コード]ごとに[得点]の降順に整列し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目コード得点受験日
1221A01
70
2024/10/10
1201A01
60
2024/10/10
1231A02
90
2024/10/10
1201B01
85
2024/10/11
1231B01
80
2024/10/11
1231B02
75
2024/10/11
1221B02
60
2024/10/11


問題 15
[得点]表から、各学生の合計得点を求め降順に整列し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号合計点
1231
245
1201
145
1221
130


問題 16
[得点]表と[科目]表から、[学生番号]と受験した「科目名」およびその[得点]を、[学生番号]と[科目コード]で昇順に整列し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
学生番号科目名合計点
1201数学Ⅰ
60
1201英語Ⅰ
85
1221数学Ⅰ
70
1221英語Ⅱ
60
1231数学Ⅱ
90
1231英語Ⅰ
80
1231英語Ⅱ
75


問題 17
[学生]表と[得点]表から、[得点]が70以下の学生の[氏名]を求め、次のように表示するための SQL 文を作成しなさい。

<表示結果>
氏名
山本 静香
本山 優花


6.1.2 更新処理


問題 18
[得点]表に、[学生番号]を "1221"、[科目コード]を "A02"、[得点]と 80 としたレコードを追加する SQL 文を作成しなさい。

<追加後の得点>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1221A01
70
2024/10/10
1221A02
80
 ← 追加
1221B02
60
2024/10/11
1231A02
90
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11


問題 19
[得点]表に、"数学Ⅰ" を受けていない人のレコードを、[科目コード]を "A01"、[得点]を 0、[受験日]を NULL として追加する SQL 文を作成しなさい。

<追加後の得点>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1221A01
70
2024/10/10
1221A02
80
 
1221B02
60
2024/10/11
1231A01
0
 ← 追加
1231A02
90
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11
1232A01
0
 ← 追加
1233A01
0
 ← 追加
1235A01
0
 ← 追加


問題 20
問題 19 で[得点]表に追加したレコード([科目コード]が "A01"で、[受験日]が NULL)のうち、"数学Ⅱ" を受けている人はその得点の半分を "数学Ⅰ" の[得点]とするように更新する SQL 文を作成しなさい。

<更新後の得点>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1221A01
70
2024/10/10
1221A02
80
 
1221B02
60
2024/10/11
1231A01
45
 ← 更新
1231A02
90
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11
1232A01
0
 
1233A01
0
 
1235A01
0
 


問題 21
問題 20 の[得点]表で、[受験日]が NULL のレコードを削除する SQL 文を作成しなさい。

<更新後の得点>
学生番号科目コード得点受験日
1201A01
60
2024/10/10
1201B01
85
2024/10/11
1221A01
70
2024/10/10
#Deleted#Deleted#Deleted#Deleted← 削除
1221B02
60
2024/10/11
#Deleted#Deleted#Deleted#Deleted← 削除
1231A02
90
2024/10/10
1231B01
80
2024/10/11
1231B02
75
2024/10/11
#Deleted#Deleted#Deleted#Deleted← 削除
#Deleted#Deleted#Deleted#Deleted← 削除
#Deleted#Deleted#Deleted#Deleted← 削除


6.2 演習問題2



演習問題2で使用します。

ACCESS2010 のファイルとして作成されていますので、アイコンをクリックして、「保存」してください。

6.2.1 照会処理


問題 1
顧客ごとの販売金額の多い順に「顧客コード」「顧客名」「販売金額」を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
顧客コード顧客名販売金額合計
00271㈱盛岡システック
\889,000
00055半蔵門システム開発㈱
\562,300
00365㈱しまね日々堂
\555,000
00211㈱北海サポート
\205,500
00369㈱阿蘇文具
\20,000
00035㈱赤坂サポート
\9,100


問題 2
商品ごとの販売金額の多い順に「商品コード」「商品名」「販売金額」を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
商品コード商品名販売金額合計
0000206005サーバ
\889,000
0000202209乾式コピー
\450,000
0000206015ラップトップパソコンB
\396,000
0000206010デスクトップパソコンA
\316,000
0000205153システムラックⅠ型012
\135,000
0000100505雲形定規DX
\14,000
0000000109消しゴム005
\10,800
0000000024水性ボールペン極太
\4,600
0000100521コンパスDX
\4,500
0000000100消しゴム009
\4,300
0000000106消しゴム001
\4,000
0000100530三角定規
\3,000
0000000019ボールペンR
\2,000
0000100502雲形定規
\1,500
0000000025水性ボールペン極細
\500


問題 3
社員ごとの販売金額の多い順に「社員コード」「社員名」「販売金額」を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
社員コード社員名販売金額合計
00020佐藤蘭
\889,000
00059浦島尚登
\779,500
00021畠山善次郎
\540,000
00011佐藤栄一
\30,600
00035小山そうた
\1,800


問題 4
商品ごとの販売個数の多い順に「商品コード」「商品名」「販売個数」を抽出し、次のように表示するための SQL 文を作成しなさい。

<表示結果>
商品コード商品名販売個数
0000000109消しゴム005
90
0000000024水性ボールペン極太
46
0000000100消しゴム009
43
0000000106消しゴム001
40
0000100530三角定規
20
0000000019ボールペンR
20
0000100521コンパスDX
15
0000000025水性ボールペン極細
5
0000100505雲形定規DX
4
0000205153システムラックⅠ型012
3
0000206015ラップトップパソコンB
2
0000206010デスクトップパソコンA
2
0000206005サーバ
1
0000202209乾式コピー
1
0000100502雲形定規
1


問題 5
2024/04/09(入力日)の売上について、「商品コード」順に「商品コード」「商品名」「販売個数」を抽出し、次のように表示するための SQL 文を作成しなさい。
「入力日」が 2024/04/09 ということは、#2024/04/09 00:00:00# と #2024/04/09 23:59:59# の間

<表示結果>
商品コード商品名販売個数
0000000019ボールペンR
20
0000000024水性ボールペン極太
5
0000000025水性ボールペン極細
5
0000000100消しゴム009
10
0000100505雲形定規DX
4
0000100521コンパスDX
5
0000202209乾式コピー
1
0000205153システムラックⅠ型012
3
0000206010デスクトップパソコンA
2
0000206015ラップトップパソコンB
2


問題 6
売上日(入力日)ごとの販売金額の多い順に「日付」「顧客コード」「顧客名」「販売金額」を抽出し、次のように表示するための SQL 文を作成しなさい。
入力日(2024/04/09 10:12:25) の形式から 日付(2024/04/09) だけを取り出すには、
フィールドに「日付: DateSerial(Year([入力日]),Month([入力日]),Day([入力日]))」と記入すればよい。

<表示結果>
日付顧客コード顧客名販売金額
2024/04/0800055半蔵門システム開発㈱
\1,800
2024/04/0800365㈱しまね日々堂
\1,000
2024/04/0800035㈱赤坂サポート
\100
2024/04/0900055半蔵門システム開発㈱
\560,500
2024/04/0900365㈱しまね日々堂
\554,000
2024/04/0900211㈱北海サポート
\205,500
2024/04/1000271㈱盛岡システック
\889,000
2024/04/1000369㈱阿蘇文具
\20,000
2024/04/1000035㈱赤坂サポート
\9,000


問題 7
販売後(2024/04/12時点)の「在庫数量」が在庫マスタの「最少在庫数」を下回っているものについて「商品コード」順に「商品コード」「商品名」「在庫数量」を抽出し、次のように表示するための SQL 文を作成しなさい。
「在庫数量」=「在庫数」-「商品個数」の合計  (「商品個数」の合計 は、「問題 4」で「販売個数」として求めている)

<表示結果>
商品コード商品名在庫数量
0000000109消しゴム005
10
0000100505雲形定規DX
1


6.2.2 更新処理


問題 8
商品マスタの商品コード(0000100502)の商品を次のように変更するための SQL 文を作成しなさい。
商品名 雲形定規ST
定価 
1200
仕入額 
500

<変更後の商品マスタ(変更分のみ)>
商品マスタNo商品コード商品名定価仕入額商品タイプ
500
0000100502雲形定規ST
\1,200
\500
1


問題 9
商品マスタの商品を新価格データで更新するための SQL 文を作成しなさい。
<変更後の商品マスタ(変更分のみ)>
商品マスタNo商品コード商品名定価仕入額商品タイプ
20
0000000022ボールペンBl
\90
\20
0
2203
0000202301湿式コピー
\300,000
\150,000
2


問題 10
「販売明細テーブル」の「仕入金額」を更新するための SQL 文を作成しなさい。
「仕入金額」= 「商品マスタ」の「仕入額」* 「商品個数」
<変更後の販売明細テーブル>
案件No明細No商品コード商品個数仕入金額
0
0
0000000024
1
\21
1
0
0000000100
3
\105
1
1
0000100502
1
\500
2
0
0000000024
10
\210
3
0
0000100505
4
\6,400
3
1
0000100521
5
\615
3
2
0000000025
5
\105
3
3
0000000100
5
\175
3
4
0000000024
5
\105
4
0
0000000019
20
\500
5
0
0000000100
5
\175
5
1
0000205153
1
\28,000
5
2
0000206010
1
\98,700
6
0
0000206010
1
\98,700
6
1
0000206015
2
\250,000
7
0
0000205153
2
\56,000
7
1
0000202209
1
\280,000
8
0
0000000100
30
\1,050
8
1
0000000106
40
\1,400
8
2
0000000109
90
\5,850
9
0
0000206005
1
\397,800
10
0
0000100530
20
\1,420
10
1
0000100521
10
\1,230
10
2
0000000024
30
\630


問題 11
商品マスタの商品マスタNo(99999)の商品を削除するための SQL 文を作成しなさい。


問題 12
商品マスタに新商品を次のように追加するための SQL 文を作成しなさい。
商品マスタNo 
7000
商品コード 0000300001
商品名 ルータ
定価 
350000
仕入額 
250000
商品タイプ 
3


<追加後の商品マスタ(追加分のみ)>
商品マスタNo商品コード商品名定価仕入額商品タイプ
7000
0000300001ルータ
\350,000
\250,000
3


問題 13
販売データをもとに請求データを作成するための SQL 文を作成しなさい(顧客コード、販売日ごとに1件)。
請求データ販売データ
顧客コード顧客コード
販売日入力日の日付部分のみ
顧客名顧客コードの一致する顧客マスタの顧客名
請求金額顧客コード、販売日ごとの販売金額の合計

<追加後の請求データ>
顧客コード販売日顧客名請求金額案件No
000352024/04/08㈱赤坂サポート
\100
0
000352024/04/10㈱赤坂サポート
\9,000
0
000552024/04/08半蔵門システム開発㈱
\1,800
0
000552024/04/09半蔵門システム開発㈱
\560,500
0
002112024/04/09㈱北海サポート
\205,500
0
002712024/04/10㈱盛岡システック
\889,000
0
003652024/04/08㈱しまね日々堂
\1,000
0
003652024/04/09㈱しまね日々堂
\554,000
0
003692024/04/10㈱阿蘇文具
\20,000
0


問題 14
「販売データ」の「仕入金額」を入れる SQL 文を作成しなさい。
「仕入金額」= 同じ案件Noを持つ「販売明細テーブル」の「仕入金額」の合計
(「販売明細テーブル」の「仕入金額」の合計を求めて、「販売データ」の「仕入金額」に設定するのではなく、「販売明細テーブル」の「仕入金額」を順次「販売データ」の「仕入金額」に加算していく。「販売明細テーブル」の「仕入金額」は「問題 10」で設定されている。)

<更新後の販売データ>
案件No顧客コード社員コード販売金額仕入金額入力日
0
0003500011
\100
\21
2024/04/08 13:49:34
1
0005500035
\1,800
\605
2024/04/08 14:50:00
2
0036500011
\1,000
\210
2024/04/08 15:12:25
3
0005500011
\20,500
\7,400
2024/04/09 10:12:25
4
0021100059
\2,000
\500
2024/04/09 11:13:51
5
0021100059
\203,500
\126,875
2024/04/09 15:16:41
6
0036500059
\554,000
\348,700
2024/04/09 15:17:05
7
0005500021
\540,000
\336,000
2024/04/09 15:19:18
8
0036900059
\20,000
\8,300
2024/04/10 11:19:56
9
0027100020
\889,000
\397,800
2024/04/10 13:21:14
10
0003500011
\9,000
\3,280
2024/04/10 15:21:48