難易度・正答率・重要度
- 難易度:★★★☆☆(SQL構文の理解)
- 正答率:★★★☆☆(構文ミスに注意)
- 重要度:★★★☆☆(データ統合の基本)
問題文
ある中小企業における今週のA部門とB部門の販売実績は、販売実績表A、販売実績表Bのとおりであった。UNION句を用いて2つの表を1つにまとめたい。
そのためのSQL文として、最も適切なものを下記の解答群から選べ。
販売実績表A
| 取引ID | 商品番号 | 商品名 | 販売単価 | 販売数量 |
|---|---|---|---|---|
| A001 | 100 | バナナ | 100 | 1 |
| A002 | 101 | リンゴ | 120 | 1 |
| A003 | 103 | メロン | 300 | 1 |
| A004 | ・・・ | ・・・ | ・・・ | ・・・ |
販売実績表B
| 取引ID | 商品番号 | 商品名 | 販売単価 | 販売数量 |
|---|---|---|---|---|
| B001 | 100 | バナナ | 100 | 1 |
| B002 | 101 | リンゴ | 130 | 2 |
| B003 | 105 | ブドウ | 140 | 2 |
| B004 | ・・・ | ・・・ | ・・・ | ・・・ |
〔解答群〕
ア
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表A
UNION
FROM 販売実績表B;
UNION
FROM 販売実績表B;
イ
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表A
UNION
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表B;
UNION
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表B;
ウ
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表A, 販売実績表B
UNION
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高;
UNION
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高;
エ
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 UNION
FROM 販売実績表A, 販売実績表B;
FROM 販売実績表A, 販売実績表B;
オ
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 UNION
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表A, 販売実績表B;
SELECT 取引ID, 商品番号, 商品名, 販売単価*販売数量 AS 売上高 FROM 販売実績表A, 販売実績表B;
出典: 中小企業診断協会|2021年度 第1次試験問題|経営情報システム(PDF)
解答
- 正解:イ
解説
- ア:×
UNIONの後にSELECT句がなく、構文不備。 - イ:〇
正しい構文。UNION句で2つのSELECT文を結合し、売上高を計算して統合。 - ウ:×
FROM句で2表を同時指定しており、クロス結合になる。UNIONの使い方も誤り。 - エ:×
SELECT句とFROM句の順序が逆で構文エラー。 - オ:×
販売実績表A,Bを同時指定しており、クロス結合になる。UNIONの前提が崩れる。
学習のポイント
- UNION句: 同じ列構成のSELECT文を結合する。重複行は自動除去(UNION ALLなら除去しない)。
- 売上高の計算: SELECT内で「販売単価*販売数量 AS 売上高」のように算出可能。
- 構文の正確性: SELECT句・FROM句・演算・AS句の順序に注意。