データベース - SQL言語(II)

A、SQL言語()

ポータル:SQL言語()
一目で:

  • SQLデータ定義
  • 基本データ型
  • 基本的なスキーマ定義
  • 基本的なクエリ構造
  • ネストされたサブクエリ
  • データベースの変更

第二に、ビュー(ビュー)

  • いくつかのケースでは、すべてのユーザーが全体の論理モデルは適切ではありません見ることができます
  • 部門名の名前と場所、教師のアイデンティティを知るために、従業員のニーズを考慮したが、教師の給与の値を参照する権限がありません。この人は、次のSQL文で記述関係が表示されます。
select ID, name, dept_name
from instructor
  • ビューは、このメカニズムを提供します。ユーザーが特定のデータを非表示します
  • SQLは、「照会することによって定義することができます仮想関係をコンセプトに、クエリの結果が含まれ、そして、」事前に計算して保存されていませんがユーザ関係に見える虚像のような関係が呼び出されるビュー(ビュー)

1、ビュー定義

SQLでは、私たちはカスタムビューとビューのコマンドを作成し、formatコマンドは次のとおりです。AS <クエリ式ザ・> Vビューを作成します

create view v as 
< query expression >
  • <クエリ式>任意の有効なクエリ式を指定できます
  • V表しビュー名を
  • ビューを使用し目的の安全性と使いやすさを:
  • それに対応して、ビューを削除し、次のコマンドを使用します。ビューVをドロップ

「栗」のために、それは-
次のようにインストラクター関係の給与を除くすべてのデータにアクセスする必要性を再考するために、このビューが定義されています。

create view faculty as 
select ID, name, dept_name
from instructor

第二の「栗」 -
というビューを作成するリスト2009年の秋学期で物理学科、すべてのコースだけでなく、教えられた建物のどの部屋での各コースについての情報

create view physics_fall_2009 as
select course.course_id, sec_id, building, room_number
from course, section
where course.course_id = section.course_id
 	and course.dept_name = 'Physics'
 	and section.semester = 'Fall'
 	and section.year = '2009';
  • プロパティ名指定されたビューには、次のように表示することができます

李:各部門での教師の給与全ての合計を表示します

create view departments_total_salary(dept_name, total_salary) as
select dept_name, sum (salary)
from instructor
group by dept_name;
  • 我々は、ビューを定義する場合、データベース・システムは、ビュー定義自体を格納するクエリ式の結果を格納することなく、ビューで定義されています

ビューを使用して2、SQLクエリ

  • ビュー定義たら、ビュー生成ビュー名の世代の仮想関係を参照することができます。データベースのみビューの定義自体を格納するため、クエリに関係の観点から、クエリ式は、それが代わりに格納される場合

李:使用ビューphysics_fall_2009は、提供ワトソンビル物理学コースでは、すべて2009年秋学期を見つけます

select course_id, room_number
from physics_fall_2009
where building = 'Watson';
  • ビューに基づいて、あなたはまた、ビューを作成することができます

李は:2009年の秋学期にワトソンすべての物理学のコースで開かれた建物をビューphysics_fall_2009_Watson、リスト識別番号と教室を定義します

create view physics_fall_2009_watson as
select course_id, room_number
from physics_fall_2009
where building = 'Watson';

等価に

create view physics_fall_2009_watson as
select course_id, room_number
from (select course.course_id, building, room_number
 	  from course, section
 	  where course.course_id = section.course_id
 			and course.dept_name = ’Physics’
 			and section.semester = ’Fall’
 			and section.year =2009)
where building= ’Watson’;

図3に示すように、ビューを更新

私たちは教員のビューに新しいタプルを挿入すると仮定し、のように書くことができます。

insert into faculty values ('30765','Green','Music');

この挿入される講師の関係のために挿入された発現は、即ち、給与の値を与えなければなりません。2つの合理的な解決策があります。

  • 挿入することを拒否し、エラーメッセージをユーザに返します
  • インストラクターの関係にタプルを挿入(「30765」、「グリーン」、「音楽」、ヌル

データベースビュー変更することで、問題の別のタイプは:このビューで発生する
「栗」の場合:
まず、このビューリストのすべての大学の先生のID、名前、および建物名、instructor_infoビューを作成します。

create view instructor_info as
select ID, name, building
from instructor, department
where instructor.dept_name = department.dept_name;

その後、我々は次のビューを挿入します。

insert into instructor_info value ('69987','White','Taylor');

仮定すると、何もありませんとして識別69987人の教師、に位置テイラービル部門は、唯一の解決策は、(明らかに実行可能ではない)です。

  • インストラクター挿入タプル('69 987' 、 'ホワイト'、NULLNULL
  • 部門挿入されたタプル(ヌル、「テイラー、ヌル

一般的には、以下の4つの条件のクエリ定義ビューを満たすことができるならば、我々はSQLビューがある呼び出し更新可能(更新可能)、である、ビューを挿入することができ、更新、または削除

  • 句から一つだけであるデータベースのリレーション
  • select句にのみ含まれている属性名の関係を、それがどの含まれていない表現、集約または個別のステートメントを
  • 任意の句は、select属性に表示されないことができ、ヌル値を取り、そこではないヌルこれらの特性には制約がなく、主キーの一部を構成するものではない、すなわち
  • クエリが含まれていないか、またはhaving句のグループを

一見おいしい「栗」:
上記の条件の下では、制約、以下のビュー上の実行UDPATE、挿入、および削除操作を許可します:

create view history_instructors as
select *
from instructor
where dept_name = 'History';

でも再生可能の場合には、問題が残っています。ビューhistory_instructorsに挿入されたタプルを仮定する。

  • ( '25566'、 'ブラウン'、 ' 生物学 '、100000)

しかし、このタプルは、所望のビューの選択基準を満たしていません

ではデフォルトで、SQLが可能にこれらの更新を実行します。ただし、ビュー定義の最後に追加することができます

  • チェックオプション付きビューを定義するための句

アップデートの確認

SQL-99ビューに挿入したときに実行される、更新、およびルールのより複雑なセットを削除し、我々はここでそれについて話すことはありません

4、マテリアライズド・ビュー

ビューはマテリアライズド(マテリアライズド・ビュー):特定のデータベースシステムのストレージ関係ビューを可能にするビューを定義するために使用されている場合、彼らは保証されている実際の関係の変化を図にもレビューに従っ

  • ビューである場合の実施形態は、マテリアdepartment_total _salary、その結果は、データベースに格納されます

マテリアライズド・ビューのメンテナンス(ビューのメンテナンスをマテリアライズ)、多くの場合、単にメンテナンスビュー(ビューのメンテナンス):マテリアライズド・ビューを維持するためには、されている日付のプロセス。
メンテナンスを表示するには、3つの方法:

  • すべての関係は、ビューの定義が更新されたビューのメンテナンスを構成するとき
  • ビューにアクセスすると、ビューのメンテナンスが行われました
  • 定期的にメンテナンスを表示(この場合は、データアクセスが古くなっている可能性があり)

第三に、インデックス(指数)

最適化するために、データベースの非常に重要な部分
データベースの使用時間のためのスペースは、メカニズムの非常に典型的です

1、インデックス定義

私たちは、indexコマンドを作成するデータベース・システムを可能にする、特定の財産関係のインデックスを作成するために、効率的にインデックスタプルの属性にそれらの関係を見つけることは、与えられた値を取り、すべてのタプル関係をスキャンしません。

CREATE INDEX <i-name> ON <table-name>(<attribute-list>);

私は-名前:インデックスの名前
表名(属性リスト):テーブル名(プロパティのインデックスを確立するために必要)

李:

CREATE INDEX ins_index on instructor(ID);
CREATE INDEX ins_ID_name_index on instructor(ID, name);

2、一意のインデックスを作成します

私たちは、ユニークなインデックスコマンドを作成する関係として、特定の属性のを作成するために、一意のインデックスを
(プロパティ自体がキーで、リスト内で繰り返されていません

CREATE UNIQUE INDEX uni_stu_index on student(ID);

3、インデックスを削除

私たちは、使用DROP INDEXコマンドをインデックスを削除します

DROP INDEX <i-name>

IVの概要

  • ビューの関係は、クエリ結果を含むように定義することができます。ビューは、不要な情報を非表示にすることができ、情報が単一のビューに関係の複数から収集することができます
  • 表示および更新に関する問題のルール
  • マテリアライズドビュー
  • 役割とインデックスを作成します
公開された17元の記事 ウォンの賞賛4 ビュー497

おすすめ

転載: blog.csdn.net/weixin_46072771/article/details/105234829