SQL のビューは、仮想テーブルとして機能する保存された SQL クエリです。通常のテーブルとは異なり、ビューはデータ自体を保存しません。代わりに、アクセスされるたびにビューに定義された SQL クエリを実行することでデータを動的に生成します。
1 つ以上のテーブルからデータをフェッチし、カスタマイズされた形式で表示できるため、開発者は次のことが可能になります。
- 複雑なクエリを簡素化します。 複雑な結合と条件を単一のオブジェクトにカプセル化します。
- セキュリティの強化: 特定の列または行へのアクセスを制限します。
- データを柔軟に提示: さまざまなユーザーに合わせたデータ ビューを提供します。
例としてこれら 2 つの SQL テーブルを使用します。
学生の詳細:
-- Create StudentDetails table
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY
NAME VARCHAR(255)
ADDRESS VARCHAR(255)
);
INSERT INTO StudentDetails (S_ID NAME ADDRESS)
VALUES
(1 'Harsh' 'Kolkata')
(2 'Ashish' 'Durgapur')
(3 'Pratik' 'Delhi')
(4 'Dhanraj' 'Bihar')
(5 'Ram' 'Rajasthan');
出力:
S_ID | 名前 | 住所 |
|---|---|---|
1 | ひどい | コルカタ |
2 | アシシ | ドゥルガプール |
3 | 練習する | デリー |
4 | ダンラージ | ビハール州 |
5 | ラム | ラジャスタン州 |
StudentMarks:
-- Create StudentMarks table
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY
NAME VARCHAR(255)
Marks INT
Age INT
);
INSERT INTO StudentMarks (ID NAME Marks Age)
VALUES
(1 'Harsh' 90 19)
(2 'Suresh' 50 20)
(3 'Pratik' 80 19)
(4 'Dhanraj' 95 21)
(5 'Ram' 85 18);
出力:
ID | 名前 | マーク | 年 |
|---|---|---|---|
1 | ひどい | 90 | 19 |
2 | スレシュ | 50 | 20 |
3 | 練習する | 80 | 19 |
4 | ダンラージ | 95 | 21 |
5 | ラム | 85 | 18 |
SQL でのビューの作成
CREATE VIEW ステートメントを使用してビューを作成できます。ビューは、単一のテーブルまたは複数のテーブルから作成できます。
構文:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
重要な用語:
- ビュー名 : ビューの名前
- テーブル名 : テーブルの名前
- 状態 : 行を選択する条件
例 1: 単一のテーブルから単純なビューを作成する
例1.1: この例では、DetailsView という名前のビューを作成します。 StudentDetails テーブルから。
クエリ:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
このビューからデータを取得するには、以下のクエリを使用します。
SELECT * FROM DetailsView;出力:
名前 | 住所 |
|---|---|
ひどい | コルカタ |
アシシ | ドゥルガプール |
練習する | デリー |
ダンラージ | ビハール州 |
例1.2: ここでは、StudentDetails テーブルから StudentNames という名前のビューを作成します。
クエリ:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
ここでビューを次のようにクエリすると、
SELECT * FROM StudentNames;
出力:
S_ID | 名前 |
|---|---|
2 | アシシ |
4 | ダンラージ |
1 | ひどい |
3 | 練習する |
5 | ラム java ハズネクスト |
例 2: 複数のテーブルからビューを作成する
この例では、StudentDetails テーブルと StudentMarks テーブルの両方のデータを結合するビュー MarksView を作成します。複数のテーブルからビューを作成するには、単に複数のテーブルを 選択 声明。
クエリ:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
View MarksView のデータを表示するには:
SELECT * FROM MarksView;出力:
名前 | 住所 | マーク |
|---|---|---|
ひどい | コルカタ | 90 |
練習する | デリー | 80 |
ダンラージ | ビハール州 | 95 |
ラム | ラジャスタン州 | 85 |
ビューの管理: リストの更新と削除
1. データベース内のすべてのビューの一覧表示
SHOW FULL TABLES ステートメントを使用するか、information_schema テーブルをクエリすることによって、データベース内のすべてのビューを一覧表示できます。
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
information_schema の使用
SELECT table_name
FROM information_schema.views
WHERE table_schema = 'database_name';
OR
SELECT table_schema table_name view_definition
FROM information_schema.views
WHERE table_schema = 'database_name';
2. ビューの削除
SQL を使用すると、既存のビューを削除できます。我々はできる 消去 または、DROP ステートメントを使用して View を削除します。
構文:
DROP VIEW view_name;例: この例では、ビュー MarksView を削除しています。
DROP VIEW MarksView;3. ビュー定義の更新
ビュー内の既存のデータを更新したい場合は、 アップデート 声明。
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
データに影響を与えずにビュー定義を更新する場合は、CREATE OR REPLACE VIEW ステートメントを使用します。たとえば、Ageの欄へMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
注記: UPDATE ステートメントを使用してすべてのビューを更新できるわけではありません。
SQL でビューを更新するためのルール:
ビューを更新するには、特定の条件を満たす必要があります。これらの条件のいずれかに該当する場合は、 ない ビューを更新できませんでした。
- ビューの作成に使用される SELECT ステートメントには、GROUP BY 句や 注文方法 句。
- SELECT ステートメントには 明確な キーワード。
- ビューにはすべて NOT NULL 値が含まれている必要があります。
- ビューは、ネストされたクエリまたは複雑なクエリを使用して作成しないでください。
- ビューは単一のテーブルから作成する必要があります。ビューが複数のテーブルを使用して作成されている場合、ビューを更新することはできません。
ビューを使用した高度なテクニック
1. ビューによるデータの更新
CREATE OR REPLACE VIEW ステートメントを使用して、ビューのフィールドを追加または置換できます。ビュー MarksView を更新し、StudentMarks テーブルからこのビューにフィールド AGE を追加する場合は、次のように実行できます。
例:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
MarksView からすべてのデータを次のようにフェッチするとします。
SELECT * FROM MarksView;出力:
名前 | 住所 | マーク | 年 |
|---|---|---|---|
ひどい | コルカタ | 90 | 19 |
練習する | デリー | 80 | 19 |
ダンラージ | ビハール州 Javaの配列リストメソッド | 95 | 21 |
ラム | ラジャスタン州 | 85 | 18 |
テーブルに挿入するのと同じ方法で、ビューに行を挿入できます。使用できます に挿入 ビューに行を挿入する SQL ステートメント。以下の例では、「単一のテーブルからビューを作成する」例で作成した ViewDetailsView に新しい行を挿入します。
例:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
今、DetailsView からすべてのデータをフェッチすると、
SELECT * FROM DetailsView;出力:
名前 | 住所 |
|---|---|
ひどい | コルカタ |
アシシ | ドゥルガプール |
練習する | デリー |
ダンラージ | ビハール州 |
スレシュ | グルガオン |
3. ビューから行を削除する
ビューから行を削除することも、テーブルから行を削除するのと同じくらい簡単です。 SQL の DELETE ステートメントを使用して、ビューから行を削除できます。また、ビューから行を削除すると、最初に実際のテーブルから行が削除され、その後、変更がビューに反映されます。 この例では、上記の行挿入例で追加したビューDetailsView から最後の行を削除します。
例:
DELETE FROM DetailsView
WHERE NAME='Suresh';
今、DetailsView からすべてのデータをフェッチすると、
SELECT * FROM DetailsView;出力:
名前 | 住所 |
|---|---|
ひどい | コルカタ |
アシシ | ドゥルガプル |
練習する | デリー |
ダンラージ | ビハール州 |
4. WITH CHECK OPTION 条項
SQL の WITH CHECK OPTION 句は、ビューにとって非常に便利な句です。これは更新可能なビューに適用されます。 これは、CREATE VIEW ステートメントの WHERE 句の条件が満たされない場合に、(INSERT または UPDATE を使用した) データ変更を防ぐために使用されます。
CREATE VIEW ステートメントで WITH CHECK OPTION 句を使用しており、UPDATE 句または INSERT 句が条件を満たさない場合は、エラーが返されます。以下の例では、WITH CHECK OPTION 句を使用して StudentDetails テーブルからビュー SampleView を作成しています。
例:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
このビューでは、NAME 列に NULL 値を持つ新しい行を挿入しようとすると、エラーが発生します。これは、ビューが NAME 列の条件を NOT NULL として作成されているためです。たとえば、ビューは更新可能ですが、このビューに対する次のクエリも無効です。
INSERT INTO SampleView(S_ID)クイズの作成
VALUES(6);