ホーム > データベーススペシャリスト試験 > 2013年

データベーススペシャリスト試験 2013年 午前206


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;
この例では、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文の選択項目リストに関する解説でした。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ