11 KiB
Question05 - 更新系SQL(削除)
本資料の練習問題は、複数のプログラミング言語(Java / PHP / C# / Python)で共通して利用できるよう記述されています。使用するデータベース接続の仕組み(JDBC、PDO、ADO.NET、DB-API 2.0準拠のドライバ など)やSQLへのパラメータの指定方法、自動採番された値の取得方法など、言語・環境固有の仕様に基づき、問題文の表現をご使用の環境の仕様に適宜読み替えて進めてください。
共通の前提を参照してください。
この問題のねらい
- データベースに登録されている既存のデータを削除するSQLを実行できること
- 削除条件(対象を絞り込む条件)を変えることで、削除される件数が変わることを理解する
- 削除した内容が実際にデータベースへ反映されていることを、検索によって確認できること
以下の設問はそれぞれ独立したプログラムとして実装してください。
部署ID 1〜3 の部署には社員テーブルの社員が所属しているため、削除しようとするとエラーになります。動作確認では、所属する社員がいない部署ID 4・5 の部署(東京支店・大阪支店)を削除の対象としてください(共通の前提を参照)。
ファイル名・フォルダ構成
- 設問ごとに1つのフォルダを作成し、そのフォルダの直下にプログラムのファイルを配置すること。
- フォルダ名は、設問番号に対応した連番(
question01、question02、…)とすること(全言語共通・小文字)。 - ファイル名は、設問番号に対応した連番(
Question01、Question02、…)を基本とし、言語の慣習に合わせて次のとおりとすること。 - 本問題(Question05-Delete)の構成は次のとおり。
Question05-Delete/
├── 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に一致する部署のデータを部署テーブルから削除するプログラムを実装してください。
※この設問を実行する前(2回以上実行する場合も含む)に、テーブル作成用SQLを実行し直して、データベースを初期データの状態に戻してください。 削除したデータは元に戻らないため、初期状態に戻さずに実行すると、削除の対象とする部署(東京支店・大阪支店)が残っておらず、実行例のとおりの結果になりません。
要件
- データベースへの接続・SQLの実行・接続の切断を、すべて自分で実装すること
- 「削除対象の部署IDを入力してください」と表示し、標準入力から部署IDを読み込むこと
- 部署IDの指定には、SQLに値を直接埋め込むのではなく、パラメータとして値を渡す仕組みを使用すること
- 削除の結果、実際に削除された件数を確認し、次のとおり出力すること
- 1件以上削除された場合:「削除完了」
- 該当する部署IDが存在せず、1件も削除されなかった場合:「一致する部署は見つかりませんでした」
- 削除完了の出力に続けて、「確認のため、検索する部署IDを入力してください」と表示し、標準入力から部署IDを読み込んだうえで、その部署IDに一致する部署のデータを部署テーブルから検索すること(削除内容がデータベースに反映されていることを、自分で検索して確認できるようにする)。検索結果が存在しない場合は「一致する部署は見つかりませんでした」と出力し、存在する場合は検索結果(部署ID・部署名)をタブ区切りで出力すること
実行例
- 「削除対象の部署IDを入力してください」に対して
4と入力した場合- 出力:
削除完了 - 続けて「確認のため、検索する部署IDを入力してください」と表示された後に
4と入力した場合- 出力:
一致する部署は見つかりませんでした
- 出力:
- 出力:
- 「削除対象の部署IDを入力してください」に対して
99(存在しない部署ID)と入力した場合- 出力:
一致する部署は見つかりませんでした
- 出力:
設問2
標準入力から部署IDの下限値を受け取り、その値以上の部署IDを持つすべての部署のデータを、部署テーブルから削除するプログラムを実装してください(該当する部署は0件・1件・複数件のいずれの場合もあります)。
※この設問を実行する前(2回以上実行する場合も含む)に、テーブル作成用SQLを実行し直して、データベースを初期データの状態に戻してください。 削除したデータは元に戻らないため、初期状態に戻さずに実行すると、削除の対象とする部署(東京支店・大阪支店)が残っておらず、実行例のとおりの結果になりません。
手順・要件
- 次の処理を、有効な入力が得られるまで繰り返してください。
- 「削除対象とする部署IDの下限値を入力してください」と表示する
- 標準入力から1行分のテキストを読み込む
- 読み込んだ内容が整数として解釈できない場合、「数値を入力してください」と表示し、手順1に戻る
- 整数として解釈できた場合、その値を下限値として繰り返し処理を終了する
- 確定した下限値を使って、部署テーブルから、部署IDがその値以上であるデータを削除する。この際、SQLに値を直接埋め込むのではなく、パラメータとして値を渡す仕組みを使用し、比較演算子を伴う条件として値を渡すこと
- 削除の結果、実際に削除された件数を確認し、次のとおり出力すること
- 1件以上削除された場合:「X件削除しました」(Xは削除件数)
- 該当する部署が存在せず、1件も削除されなかった場合:「一致する部署は見つかりませんでした」
- 1件以上削除した場合は、続けて「確認のため、検索する部署IDを入力してください」と表示し、標準入力から部署IDを読み込んだうえで、その部署IDに一致する部署のデータを検索すること(削除内容がデータベースに反映されていることを、自分で検索して確認できるようにする)。検索結果が存在しない場合は「一致する部署は見つかりませんでした」と出力し、存在する場合は検索結果(部署ID・部署名)をタブ区切りで出力すること。手順3で1件も削除されなかった場合、この確認のための検索は行わない
実行例
- 入力が
4の場合- 出力:
2件削除しました - 続けて「確認のため、検索する部署IDを入力してください」と表示された後に
4と入力した場合- 出力:
一致する部署は見つかりませんでした
- 出力:
- 出力:
- 入力が
10(該当する部署がない値)の場合- 出力:
一致する部署は見つかりませんでした
- 出力:
設問3
標準入力から部署名の一部の文字列を受け取り、部署名にその文字列を含むすべての部署のデータを、部署テーブルから削除するプログラムを実装してください。
※この設問を実行する前(2回以上実行する場合も含む)に、テーブル作成用SQLを実行し直して、データベースを初期データの状態に戻してください。 削除したデータは元に戻らないため、初期状態に戻さずに実行すると、削除の対象とする部署(東京支店・大阪支店)が残っておらず、実行例のとおりの結果になりません。
要件
- データベースへの接続・SQLの実行・接続の切断を、すべて自分で実装すること
- 「削除対象の部署名の一部を入力してください」と表示し、標準入力から部署名の一部の文字列を読み込むこと
- 部署名の指定には、SQLに値を直接埋め込むのではなく、パラメータとして値を渡す仕組みを使用し、部分一致検索に対応した形で値を渡すこと
- 削除の結果、実際に削除された件数を確認し、次のとおり出力すること
- 1件以上削除された場合:「X件削除しました」(Xは削除件数)
- 一致するデータが存在せず、1件も削除されなかった場合:「一致する部署は見つかりませんでした」
- 1件以上削除した場合は、続けて「確認のため、検索する部署IDを入力してください」と表示し、標準入力から部署IDを読み込んだうえで、その部署IDに一致する部署のデータを検索すること(削除内容がデータベースに反映されていることを、自分で検索して確認できるようにする)。検索結果が存在しない場合は「一致する部署は見つかりませんでした」と出力し、存在する場合は検索結果(部署ID・部署名)をタブ区切りで出力すること。一致するデータが存在せず削除が行われなかった場合、この確認のための検索は行わない
実行例
- 「削除対象の部署名の一部を入力してください」に対して
支店と入力した場合- 出力:
2件削除しました - 続けて「確認のため、検索する部署IDを入力してください」と表示された後に
4と入力した場合- 出力:
一致する部署は見つかりませんでした
- 出力:
- 出力:
- 「削除対象の部署名の一部を入力してください」に対して
総務(一致するものがない文字列)と入力した場合- 出力:
一致する部署は見つかりませんでした
- 出力: