# Question01 - 検索系SQL(全件取得) 本資料の練習問題は、複数のプログラミング言語(Java / PHP / C# / Python)で共通して利用できるよう記述されています。使用するデータベース接続の仕組み(JDBC、PDO、ADO.NET、DB-API 2.0準拠のドライバ など)やSQLへのパラメータの指定方法、自動採番された値の取得方法など、言語・環境固有の仕様に基づき、問題文の表現をご使用の環境の仕様に適宜読み替えて進めてください。 [共通の前提](../00.共通前提.md)を参照してください。 ## この問題のねらい - データベースに接続し、SQLを実行して結果を取得したうえで、接続を切断するという一連の流れを実装できること 以下の設問はそれぞれ独立したプログラムとして実装してください。 ## ファイル名・フォルダ構成 - 設問ごとに1つのフォルダを作成し、そのフォルダの直下にプログラムのファイルを配置すること。 - フォルダ名は、設問番号に対応した連番(`question01`、`question02`、…)とすること(全言語共通・小文字)。 - ファイル名は、設問番号に対応した連番(`Question01`、`Question02`、…)を基本とし、言語の慣習に合わせて次のとおりとすること。 - 本問題(Question01-SelectAll)の構成は次のとおり。 ``` Question01-SelectAll/ ├── question01/    ← 設問1 │ └── Question01.<拡張子> ├── question02/    ← 設問2 │ └── Question02.<拡張子> └── question03/    ← 設問3 └── Question03.<拡張子> ``` - Java: `Question01.java`(公開クラス名もファイル名と同じ `Question01` とする) - C#: `Question01.cs` - PHP: `Question01.php` - Python: `question01.py`(モジュール名は小文字とする慣習のため、ファイル名のみ小文字) - 上記ツリー中の `Question01.<拡張子>` は、使用する言語に応じて上記のファイル名に読み替えること。 - プロジェクトファイルが必要な場合など、言語・開発環境の規則上やむを得ない場合は、その規則を優先してよい。その場合も、設問ごとのフォルダ分けと連番の命名は維持すること。 - 設問内で追加で作成するクラス・関数などは、その設問のフォルダ直下に配置すること。 - 他の設問で作成したクラス等を使用する設問では、各フォルダ単独で実行できるよう、そのフォルダ直下にも同じ内容を配置すること。 --- ## 設問1 部署テーブルから全件のデータ(部署ID・部署名)を取得し、部署IDの昇順で、1件につき1行、部署IDと部署名をタブ区切りで出力するプログラムを実装してください。 ### 要件 - データベースへの接続・SQLの実行・接続の切断を、すべて自分で実装すること - 取得したデータは、取得した件数分すべて出力すること - ソートを使用すること ### 実行例 ``` 1 営業部 2 人事部 3 開発部 4 東京支店 5 大阪支店 ``` --- ## 設問2 部署テーブルから全件のデータ(部署ID・部署名)を取得し、部署IDの**降順**で、1件につき1行、部署IDと部署名をタブ区切りで出力するプログラムを実装してください。 ### 要件 - データベースへの接続・SQLの実行・接続の切断を、すべて自分で実装すること - 並び替えはSQL側(データベースへの問い合わせ)で行うこと - 取得したデータは、取得した件数分すべて出力すること ### 実行例 ``` 5 大阪支店 4 東京支店 3 開発部 2 人事部 1 営業部 ``` --- ## 設問3 部署テーブルに登録されている部署の件数を取得し、「部署は全部でX件登録されています」(Xは取得した件数)の形式で出力するプログラムを実装してください。 ### 要件 - データベースへの接続・SQLの実行・接続の切断を、すべて自分で実装すること - 件数は、取得した全データを1件ずつ数えるのではなく、集計を行う仕組み(SQLの集計関数に相当するもの)を使って、データベース側で算出すること ### 実行例 ``` 部署は全部で5件登録されています ```