MVTS-NET.COM

Category: 授業 (page 1 of 3)

DataBase07 解答

課題一覧

以下を実行せよ。

  1. 最初に製品表、生産表、在庫表のデータのバックアップの存在を確認して(第3 回でバックアップを作成してあるはずである) テーブルとビューを(データではない) 削除しておく。また、サーバーPC(ZPC) のバックアップデータを使用し、BULK INSERT コマンドにより、リストアできるよう、データの存在するディレクトリを確認しておくこと。
    ※昔は以下のコマンドを利用することで、リストアできていたのだが、現在はセキュリティの関係によりできない。

    BULK INSERT <テーブル名> FROM '¥<サーバ名>¥<共有ディレクトリ名>¥<ファイル名>'
    WITH (CHECK CONSTRAINTS)

    ここで、WITH (CHECK CONSTRAINTS) は制約のチェックを行うためのオプションである。

  2. 以下の制約を付け、削除したテーブルを再定義し、BULK INSERT コマンドによって作り直したテーブルにデータを挿入せよ。
    (a) 各テーブルに主キーをつける(どれが主キーになるか自分で判断すること)。
    (b) 製品表condition は0 以上2 以下の数値であるという検査制約を付ける(数値を強調する必要はない)
    (c) 製品表prod_id はS で始まる二文字の文字列であるという検査制約を付ける(2 文字目は数字でなくても良い)。
    (d) 在庫表のstor_id は6 文字以内であるという検査制約を付ける(型から6 文字以内であることは確かだが検査制約でチェックがかかるように)
    (e) 生産表のprod_id は製品表のprod_id を参照しているという参照整合性制約をつける。
    (f) 在庫表のprod_id は製品表のprod_id を参照しているという参照整合性制約をつける。
    (g) 生産表のfact_address、在庫表のstor_address はNULL を許さない制約をつける。
  3. 製品表のprod_id がS7 のデータについて、price は未定だったためにNULL となっていたが、これを15 に確定した。データを変更せよ。
  4. 製品表の製品番号S1 のデータについて、製品番号をT1 に更新せよ。どういうメッセージが返るか?
  5. 製品表の製品番号S2 のデータについて状況を3 に更新せよ。どういうメッセージが返るか?
  6. 以下の2 つの場合それぞれについて、サーバが返すメッセージがどうか調べよ。
    (a) 製品表の製品番号S1 のデータを削除しようとした場合
    (b) 生産表、在庫表の製品番号S1 のデータ削除をした後に、製品表の製品番号S1 のデータを削除しようとした場合
  7. 在庫表に以下のデータを挿入せよ。どういうメッセージが返るか。
    Continue reading

DataBase05 解答

課題一覧

  1. 製品表の行数を表示させなさい(どの列にNULL があるか知らないものとする)。
  2. 異なる製品名の総数を表示させなさい。
  3. 工場番号F4 で生産される製品たちで生産量が一番少ないものの生産量を表示させなさい。
  4. 工場番号F2 で生産される製品たちで生産量が一番多いものの製品名と生産量を表示させなさい。
  5. 全ての製品について製品番号と全国での総生産量を表示させなさい(S7 の生産量はNULL が返ってもよい)。
  6. 東京の工場で生産量が10 よりも大きい製品について、製品番号と全国での総生産量を表示させなさい。
  7. 製品名、型、およびそれら毎の総生産量を表示させなさい。ただし、製品名は全て文字を大文字にして表示させること(S7 の情報も含める)。
  8. 工場番号F4 の生産量の総数を1000 個単位ではなく1 個単位で表示させなさい。
  9. 各製品について総生産量が50 以上のものに対し、その製品番号と総生産量を求めなさい。
  10. 神戸以外の工場の生産状況を考える。最大生産量が30 未満の製品に対し、その製品番号と最大生産量を表示させなさい。

Continue reading

DataBase04 解答

課題一覧

  1. 生産表の全てのデータと製品表のS7 を除く全てのデータを、意味をもたせたまま(すなわちCROSS JOIN せず) 組み合わせて工場番号順に表示させなさい。ただしWHERE 句にprod_id に関する条件を書かないこと。
  2. 生産表の全てのデータと製品表のS7 を含めた全てのデータを、意味をもたせたまま(すなわちCROSS JOIN せず) 組み合わせたものについて製品番号、製品名、価格、工場番号、生産量、工場住所(prod_id,name, price, fact_id, prod_qty, fact_address) を工場番号順に表示させなさい。ただしWHERE 句にprod_id に関する条件を書かないこと。
  3. 生産中(seihin.condition が0) である製品のみの在庫状況(製品番号、在庫量、倉庫住所) を、意味のあるデータとして(すなわちCROSS JOIN をせずに) 表示させなさい。ただしWHERE 句にprod_idに関する条件を書かないこと。
  4. 全ての製品(S7 も含む) の在庫状況(製品番号、在庫量、倉庫住所) を表示させなさい。
  5. 神奈川で一番多く生産されている製品よりも多く生産されている(工場の場所は問わない) 製品の製品番号とそれを在庫している倉庫の倉庫番号(stor_id) を限定述語を用いて求めなさい。
  6. 神奈川で一番多く生産されている製品よりも多く生産されている(工場の場所は問わない) 製品の製品番号とそれを在庫している倉庫の倉庫番号をEXISTS 述語を用いて求めなさい。
  7. 現在の日付と時刻をSELECT 文で表示させなさい。
  8. 自分が生まれた日時(時刻が分からなければ00:00 とする) から今この瞬間まで何年、あるいは何日、あるいは何秒が経過しているかそれぞれ表示させなさい(負の数にならないように気をつけること)。
  9. 製品名を全て大文字にして重複なく取り出しなさい。
  10. 製品表の全データを製品名の長い順に(ソート)表示させなさい。

Continue reading

DataBase03 解答

課題一覧

  1. 製品表に含まれている製品名を重複なく表示しなさい。
  2. 生産量が20 以上の製品について、それを生産している工場の工場番号、製品名、生産量を求めなさい。
    ヒント:製品表と生産表の2つの表で製品番号を見る。
  3. 製品名がStereo である製品の製品番号と単価を表示させなさい。
  4. Stereo 以外の製品の製品番号と単価を表示させなさい。
  5. 製品名がRa で始まるものの製品名と型を表示させなさい。
  6. 単価が決まっている(price カラムが空白でない) 製品の製品名と型を表示させなさい。
  7. 倉庫番号W1TKY1 の製品の製品番号と在庫量と安全在庫量の差をdifference という見出しで表示させなさい。
  8. 東京工場の生産量を管理している管理者がいるとする。彼には東京工場以外のデータを見せたくない。
    そこで、東京工場のみについて工場番号、生産している製品名、製品型、生産量、工場の住所を保持したビューvw tokyo を作成しなさい。
  9. 上で作成したビューの全データを表示させなさい。
  10. 各テーブルの全データをseihin.dat、seisan.dat、zaiko.dat という名前のファイルにバックアップをとりなさい。
    なお、製品表についてはbcp コマンドで、そのほかの表については、GUI にてバックアップを取ること。また、形式については「列区切りはタブ、行区切りは改行」とすること。

Continue reading

DataBase02 解答

課題一覧

  1. 自分の名前のついたデータベースを作成しなさい。(鈴木なら「suzuki_DB」)
  2. 自分のデータベース内に以下の3 つのテーブル※3 を作成しなさい。このテーブルは今後の実習で使うため、入力しやすいように日本語は用いない。また制約はつけないこととする。
    ※3 テーブルが3 つあるが列名からわかるようにそれらは相互に関係している。なぜ1 つではなく3 つのテーブルになっているかというと正規化という作業が行われたからである。正規化については教科書の29~34 頁を参照していただきたい。
    表7: 作成する表のリスト
    テーブル名 カラム名
    データ型
    カラム名
    データ型
    カラム名
    データ型
    カラム名
    データ型
    カラム名
    データ型
    seihin prod_id
    char(2)
    name
    varchar(14)
    type
    char(1)
    price
    int
    condition
    smallint
    seisan fact_id
    char(2)
    prod_id
    char(2)
    prod_qty
    int
    fact_address
    varchar(12)
    zaiko stor_id
    char(6)
    prod_id
    char(2)
    stoc_qty
    int
    safty_qty
    int
    stor_address
    varchar(12)

    表やカラムの名前は以下の日本語に由来する。

    表8: 作成する表の由来
    テーブル名 カラム名 カラム名 カラム名 カラム名 カラム名
    製品表 製品番号 製品名 単価 状況
    生産表 工場番号 製品番号 生産量 工場住所
    在庫表 倉庫番号 製品番号 在庫量 安全在庫量 倉庫住所
  3. テーブルがちゃんと作成されたかどうか調べるために、自分のデータベース内に存在する全てのテーブルをリスト表示しなさい。
  4. 作成した表に次頁のデータを挿入しなさい。ただし、製品表についてはINSERT INTO コマンドを、残る2 つの表についてはTAB 区切りのテキストファイルを使った方法を用いなさい。
    ここで、単価は1000 円単位で、生産量、在庫量および安全在庫量の単位も1000 個単位としている。
    状況のデータは0 =生産、1 =生産停止、2 =在庫切れである。
  5. 入力したデータを以下のコマンドで確認せよ。
SELECT * FROM <テーブル名>

表に挿入するデータは以下の通りとする。

表9: 製品表
製品番号 製品名 単価 状況
S1 TV A 200 0
S2 Radio Y 50 0
S3 Stereo M 400 0
S4 Stereo P 150 1
S5 RadioCassette E 30 0
S6 RadioCassette P 20 2
S7 Cassette P 1
表10: 生産表
工場番号 製品番号 生産量 工場住所
F1 S1 20 Tokyo
F1 S2 50 Tokyo
F1 S3 10 Tokyo
F2 S1 30 Kanagawa
F2 S4 20 Kanagawa
F3 S5 30 Osaka
F3 S6 20 Osaka
F4 S2 10 Kobe
F4 S3 20 Kobe
F4 S4 40 Kobe
F4 S5 30 Kobe
表11: 在庫表
倉庫番号 製品番号 在庫量 安全在庫量 倉庫住所
W1TKY1 S1 3 2 Tokyo
W1TKY1 S2 2 2 Tokyo
W1TKY1 S3 4 2 Tokyo
W1TKY1 S4 1 1 Tokyo
W1TKY1 S5 3 1 Tokyo
W1TKY1 S6 4 2 Tokyo
W2OSK1 S1 2 1 Osaka
W2OSK1 S2 3 1 Osaka
W2OSK1 S3 3 1 Osaka
W3NGY1 S3 3 2 Nagoya
W3NGY1 S4 4 2 Nagoya
W4FKO1 S2 1 1 Fukuoka
W4FKO1 S4 2 1 Fukuoka
W5SPO1 S1 5 2 Sapporo
W5SPO1 S2 3 2 Sapporo

解答一覧

1.自分の名前のついたデータベースを作成しなさい。(鈴木なら「suzuki DB」)

構文例:CREATE DATABASE suzuki_DB

2.自分のデータベース内に以下の 3 つのテーブル3を作成しなさい。このテーブルは今後の実習で使うため、入力しやすいように日本語は用いない。また制約はつけないこととする。

構文例:	CREATE TABLE seihin (prod_id char(2),name varchar(14),typechar(1),price int,condtion smallint)
	CREATE TABLE seisan (fact_id char(2),prod_id char(2),prod_qty int,fact_address varchar(12))
	CREATE TABLE zaiko (stor_id char(6),prod_id char(2),stoc_qty int,safty_qty int,stor_address varchar(12))

3.テーブルがちゃんと作成されたかどうか調べるために、自分のデータベース内に存在する全てのテーブルをリスト表示しなさい。

構文例:	TABLE_QUALIFIER
	TABLE_OWNER
	TABLE_NAME
	TABLE_TYPE                       REMARKS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
suzuki_DB
dbo
seihin
TABLE                            NULL
suzuki_DB
dbo
seisan
TABLE                            NULL
suzuki_DB
dbo
zaiko
TABLE                            NULL
suzuki_DB
sys
trace_xe_action_map
TABLE                            NULL
suzuki_DB
sys
trace_xe_event_map
TABLE                            NULL

(5 行処理されました)

4. 作成した表に次頁のデータを挿入しなさい。ただし、製品表については INSERT INTO コマンドを、残る2 つの表については TAB 区切りのテキストファイルを使った方法を用いなさい。
ここで、単価は 1000 円単位で、生産量、在庫量および安全在庫量の単位も1000 個単位としている。
状況のデータは 0 =生産、1 =生産停止、2 =在庫切れである。

構文例:	--製品表--
INSERT INTO VALUES(<'S1'><'TV'><'A'>)
INSERT INTO VALUES(<'S2'><'Radio'><'Y'>)
INSERT INTO VALUES(<'S3'><'Stereo'><'M'>)
INSERT INTO VALUES(<'S4'><'Stereo'><'P'>)
INSERT INTO VALUES(<'S5'><'RadioCssette'><'E'>)
INSERT INTO VALUES(<'S6'><'RadioCassette'><'P'>)
INSERT INTO VALUES(<'S7'><'Cassette'><'P'>)

	--生産表--
BULK INSERT seisan FROM 'D:\SQL\seisan.txt'

	--在庫表--
BULK INSERT zaiko FROM 'D:\SQL\zaiko.txt'

5.入力したデータを以下のコマンドで確認せよ。
SELECT * FROM <テーブル名>

構文例:	--製品表--
prod_id name           type price       condtion
------- -------------- ---- ----------- --------
S1      TV             A    200         0
S2      Radio          Y    50          0
S3      Stereo         M    400         0
S4      Stereo         P    150         1
S5      RadioCssette   E    30          0
S6      RadioCassette  P    20          2
S7      Cassette       P    NULL        1

(7 行処理されました)

	--生産表--
fact_id prod_id prod_qty    fact_address
------- ------- ----------- ------------
F1      S1      20          Tokyo
F1      S2      50          Tokyo
F1      S3      10          Tokyo
F2      S1      30          Kanagawa
F2      S4      20          Kanagawa
F3      S5      30          Osaka
F3      S6      20          Osaka
F4      S2      10          Kobe
F4      S3      20          Kobe
F4      S4      40          Kobe
F4      S5      30          Kobe

(11 行処理されました)

	--在庫表--
stor_id prod_id stoc_qty    safty_qty   stor_address
------- ------- ----------- ----------- ------------
W1TKY1  S1      3           2           Tokyo
W1TKY1  S2      2           2           Tokyo
W1TKY1  S3      4           2           Tokyo
W1TKY1  S4      1           1           Tokyo
W1TKY1  S5      3           1           Tokyo
W1TKY1  S6      4           2           Tokyo
W2OSK1  S1      2           1           Osaka
W2OSK1  S2      3           1           Osaka
W2OSK1  S3      3           1           Osaka
W3NGY1  S3      3           2           Nagoya
W3NGY1  S4      4           2           Nagoya
W4FKO1  S2      1           1           Fukuoka
W4FKO1  S4      2           1           Fukuoka
W5SPO1  S1      5           2           Sapporo
W5SPO1  S2      3           2           Sapporo

(15 行処理されました)

以上第2回DB実習解答でした。

DataBase11

今日の目標

今回はJAVA からデータベースへアクセスする実習を行う。
Microsoft では、JAVA からデータベースにアクセスする為にJDBC(Java DataBase Connectivity) を用意している。通常、データベースからJAVA にデータを受け渡す際、以下の手順を踏む。

データベースドライバ(JDBC)によりデータベースに接続
↓
データベースドライバを通じてデータを読み込む
↓
JAVA でデータを加工し表示

Continue reading

DataBase10

今日の目標

今回はストアドプロシージャを学習する。これまで学んできたSELECT 文などとは異なり、ストアドプロシージャでは一般的なプログラミング知識も求められるため、1 つ1 つの要素を確認しながら学習を進める。※1

※1 参考HP @ IT さらっと覚えるSQL & T-SQL 入門(9)「Transact-SQL でストアドプロシージャを作成する」
URL : http://www.atmarkit.co.jp/fdb/rensai/tsql09/tsql09 1.html

Continue reading

DataBase09

今日の目標

今回はデータベースのセキュリティに関する実習を行う。SQL Server のセキュリティチェックには、

1. SQL Server への接続(ログイン)
2. データベースへの接続
3. オブジェクト操作

がある。いま諸君は、Administrator 権限(Windows 認証) でログインを行っているので、全てのセキュリティチェックを通過しているが、本来は権限の弱いユーザーで、資源の利用を行うべきである。そこで、今回は権限の弱いユーザーでのSQL Server の利用について考える。 Continue reading

DataBase08

今日の目標

SQL は独立して動かすことも出来るが実用上は、VB,C,PHP,Java など他のプログラム言語から呼び出して使うことが多い。その際、データが集合として取り出されてるのは嬉しくないことである。例えば、あるデータの一つの属性(カラム) 値に対してif 文で分岐処理を行いたい場合を考えてみればよい。カラムの値をまとめて取り出しても分岐はさせられず、カラムの値を一つ一つ取り出して判断部分に渡す必要があることは自明であろう。そのために使うのがカーソルである※1。
今回はカーソルを使ったデータの取り出しについて学習する。 Continue reading

DataBase07

今日の目標

これまで主にデータを取り出す、すなわちデータベースの利用者側のコマンドを学んで来た。今回はデータベースの管理者側に立って、データ変更に関するコマンド、その際にデータの整合性を維持する機能に付いて学習する。 Continue reading

Older posts

Copyright © 2019 MVTS-NET.COM

Theme by Anders NorenUp ↑