ホーム > データベーススペシャリスト試験 > 2013年
データベーススペシャリスト試験 2013年 午前2 問06
SQLのSELECT文の選択項目リストに関する記述として、適切なものはどれか。
ア:指定できるのは表の列だけである。
イ:集約関数で指定する列は、GROUP BY句で指定した列でなければならない。
ウ:同一の列を異なる選択項目に指定できる。(正解)
エ:表の全ての列を指定するには、全ての列名をコンマで区切って指定しなければならない。
解説
# SQLのSELECT文の選択項目リストに関する解説
SQLのSELECT文では、データベースから必要なデータを抽出するために「選択項目リスト」を指定します。この選択項目リストには、表示したい列名や式、関数、別名などを並べます。問題の各選択肢について詳しく見ていきましょう。
---
## 選択肢の検証
### ア: 指定できるのは表の列だけである。
- **誤り**です。
選択項目リストには単なる列名だけでなく、以下のようなものも指定可能です。
- 式(例:`price * quantity`)
- 関数(例:`SUM(sales)`)
- 定数や文字列リテラル(例:`'固定値'`)
- 別名付き項目(`AS` を用いたエイリアス)
つまり、「表の列だけ」という制約はありません。
---
### イ: 集約関数で指定する列は、GROUP BY句で指定した列でなければならない。
- **誤り**です。
GROUP BY句には集約関数を使わない**非集約列**(グルーピングする基準となる列)を指定します。
一方、選択項目リストにある集約関数(SUM, COUNT, AVG など)は、GROUP BYで指定しない列に対して適用されます。
例えば:
```sql
SELECT department, SUM(salary)
FROM employees
GROUP BY department;
この例では、
「集約関数で指定する列はGROUP BY句で指定しなければならない」というのは意味が逆転しています。
department
はGROUP BYで指定し、SUM(salary)
はその集約関数です。「集約関数で指定する列はGROUP BY句で指定しなければならない」というのは意味が逆転しています。
ウ: 同一の列を異なる選択項目に指定できる。
-
正しいです。
同じ列を複数の選択項目に指定することは問題ありません。例えば:SELECT employee_name, employee_name AS name_alias, salary FROM employees;
これは合法で、employee_name
をそのまま表示し、さらに別名をつけた選択項目としても指定しています。
解析上も問題なく利用できます。
エ: 表の全ての列を指定するには、全ての列名をコンマで区切って指定しなければならない。
-
誤りです。
全ての列を指定する簡単な手段として、*
(アスタリスク)を使えます。SELECT * FROM employees;
これでテーブルの全すべての列が選択されます。
全ての列名を手動で指定する必要はありません。
まとめ
- 正解は「ウ」
同一の列を複数の選択項目に指定することは問題ありません。 - 他の選択肢は、SQLの設計思想や構文に反しています。
参考補足
- 選択項目リストの例
SELECT column1, column2, SUM(column3) AS total, '固定文字列' AS label
FROM table_name
GROUP BY column1, column2;
- 選択項目として式や関数、文字列リテラル、別名の利用が一般的です。
以上、SQLのSELECT文の選択項目リストに関する解説でした。