- ベストアンサー
学校の課題のSQLでVIEWの意味と作成方法がわかりません。
学校でSQLを使って、データベースを作るという期末課題がでました。 当方バイクの知識が少々あるため、バイクとバイク販売店というデータベースを作ってみることにしました。 バイクのデータ100個分とお店のデータは10個ほどなのですが、課題の条件の中にVIEWを作成すること、とあるのですが、VIEWとは何者なのでしょうか? 授業のページを見ても、難しい事しか載っていなくて困っています。 またテーブルの入力と、データの入力はなんとか覚えたのですが、VIEWの作り方は全く意味がわかりません。なので・・・ VIEWの意味と役割を教えてください。 初心者なので出来るだけわかりやすく教えていただけたら幸いです。 またVIEWの作成方法(create viewだとかなんとか・・・)を教えてください。 ちなみにテーブルデータとかはこんな感じに作っております。なのでこんな感じでVIEWの作成方法をご教授いただけたらありがたい次第です。 create table bike( maker text, name text, size int, nennshiki date, kaizou text, shaken text, nedann float, shop text ) よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1回答者です。 バイクは詳しくないので、自動車の例で説明します。 一つの表で、メーカー名や車種名などを管理すると、冗長な情報を管理することになってしまいます。 =====表定義例===== create table メーカー (メーカーid smallint primary key, メーカー名 varchar(16)); create table 車種 (メーカーid smallint, 車種id smallint, 車種名 varchar(30), primary key(メーカーid,車種id)); create table 型名情報 (メーカーid smallint, 車種id smallint, 型名 varchar(30) primary key, 年式 smallint, 排気量 smallint, 定価 int); create index 型名情報idx on 型名情報(メーカーid,車種id); =====ここまで===== このように分けることで、メーカー名を車の情報分、持たなくてすみます。 仮にメーカー名が変更になった場合は、「メーカー」表のみを更新すればよくなります。 「マーチ」といった車種で、いろいろな年式があるでしょうから、車種名と年式といった情報も、表を分けます。 このようにして置くと、情報変更時の更新箇所が限られるし、メーカーの検索、車種名の検索といったことが容易に行えます。 =====データ例===== insert into メーカー values(1,'TOYOTA'); insert into メーカー values(2,'NISSAN'); insert into メーカー values(3,'HONDA'); insert into 車種 values(1,1,'カローラ XXXX'); insert into 車種 values(1,2,'クラウン XXXX'); insert into 車種 values(2,1,'スカイライン XXXX'); insert into 車種 values(2,2,'マーチ'); insert into 車種 values(3,1,'アコード'); insert into 型名情報 values(1,1,'ABC-DEF-1234',2003,1600,150); insert into 型名情報 values(1,1,'ABC-DEF-1240',2005,1600,160); insert into 型名情報 values(1,2,'ABC-XYZ-1111',2005,2000,250); insert into 型名情報 values(2,1,'EFGH-IJK-LMN-12',2002,2000,200); insert into 型名情報 values(2,2,'HIJK-LMN-OPQ-20',2005,1600,120); insert into 型名情報 values(3,1,'XY-ZABC-DE-12345',2003,2000,200); =====ここまで===== いよいよ検索です。 三つに分けた表から、メーカー名や車種名、年式といった情報を検索します。 =====検索SQL例===== select x.メーカー名,y.車種名,年式,排気量,定価 from (メーカー as x left join 車種 as y on x.メーカーid=y.メーカーid) left join 型名情報 as z on y.メーカーid=z.メーカーid and y.車種id=z.車種id; =====ここまで===== 少し複雑になってしまいました。 これをビューにして登録しておき、検索SQLは簡単に記述できるようにしてしまいます。 =====ビュー定義例1===== create view 車検索 as select x.メーカー名,y.車種名,年式,排気量,定価 from (メーカー as x left join 車種 as y on x.メーカーid=y.メーカーid) left join 型名情報 as z on y.メーカーid=z.メーカーid and y.車種id=z.車種id; =====ここまで===== このビューを利用して検索する場合、検索SQLは以下のように簡単に記述できます。 =====ビューを使った検索1===== select * from 車検索; =====ここまで===== ビューで、特定のデータのみ見せる(他のデータは見せない)ことが可能です。 例えば上述のビューを「TOYOTA」の車種のみを見せるビューに変えてみます。 =====ビュー定義例2===== drop view 車検索; create view 車検索 as select x.メーカー名,y.車種名,年式,排気量,定価 from (メーカー as x left join 車種 as y on x.メーカーid=y.メーカーid) left join 型名情報 as z on y.メーカーid=z.メーカーid and y.車種id=z.車種id where x.メーカー名='TOYOTA'; =====ここまで===== 以下の検索(「ビューを使った検索1」と同じ)を行うと、今度は「TOYOTA」の車種しか見えなくなります。 =====ビューを使った検索2===== select * from 車検索; =====ここまで===== このようにビューを使うと、特定のデータだけ見せたり、SQLを簡単にできるといったメリットがあります。
その他の回答 (3)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1、#3回答者です。 ビューの役割や使い方を説明しましたが、ビューとは何かを説明していませんでしたね。 ビューというのは、実体(DB中のデータ)を持たない仮想の表です。 ビューを利用時に、ビューで参照している表から、実際のデータが持ってこられます。 使う目的や使い方は、既に回答の通りです。
- cathy25
- ベストアンサー率34% (8/23)
viewは元ある表から生成された表のことです。以下のような表があるとしましょう。名前は商品一覧です。 商品名 |倉庫|単価 Tシャツ |A1|100 ジーンズ |A1|200 スカート |B1|150 キャップ |B2|50 これが元の表のときに、例えば倉庫A1にあるものだけを一覧にして見たい、と。そのときこのようにviewを作ります↓ create view 倉庫A1 as select * from 商品一覧 where 倉庫='A1'; すると、倉庫A1というviewが生成され、テーブル一覧\dでもselect * from 倉庫a1;でもビューの内容は確認できます。 viewは元の表のように削除はできないため、viewを消すときはviewごとdrop view 倉庫a1;で消します。
- chukenkenkou
- ベストアンサー率43% (833/1926)
各列には、どのような値を入れるのですか? textなんて使用するのはやめて、varchar(n)にしましょう。 →「文章をそのまま格納する」といった要件以外では、文字数の上限がある程度分かるはずです。また、textは近い将来、削除される予定です。 floatなんて使用するのはやめて、intやdecを使用しましょう。 →floatは概数であり、大きな数値を表せる半面、小数点以下の値は誤差が出ます。 ビューの使用目的は、幾つかあります。 (1)特定の列のみ見せる (2)特定の行のみ見せる (3)複雑なSQLをビューで吸収し、操作時のSQLは簡単に書けるようにする などです。
お礼
わざわざ丁寧な回答ありがとうございます。 とても参考になりました。感謝いたします。 それにしても、少し覚えるまでに、時間がかかりそうですね。頑張って覚えたいと思います。
お礼
回答ありがとうございます。詳しい説明をいただき、なんとか少しづつ理解できそうです。 感謝いたします。