ビューは仮想テーブルであり、データを含むテーブルとは異なります。ビューは、SQLクエリの後で結果グラフのみをカプセル化します
まず、ビューの作成
- CREATE VIEWステートメントを使用してビューを作成する
- SHOW CREATE VIEW viewnameを使用して、ビューを作成したステートメントを表示します。
- DROP VIEW viewnameを使用してビューを削除します
- ビューを更新するには、まずDROPしてからCREATEを使用します。CREATE OR REPLACE VIEW viewnameを直接使用することもできます。更新するビューが存在しない場合、2番目の更新ステートメントはビューを作成し、存在する場合は元のビューを置き換えます。
次に、ビューを使用します
1.ビューを使用して複雑な接続をカプセル化する
CREATE VIEW productcustomer AS
SELECT cust_name,cust_contact,prod_id
FROM customers,orders,orderitems
WHERE customers.cust_id=orders.cust_id AND orderitems.order_num = orders.order_num
このステートメントは、productcustomerというビューを作成します。このビューは3つのテーブルを結合し、アイテムを注文した顧客のリストを返します。
以下は、ビューを直接使用して、TNT2を注文した顧客を取得できます。このビューにより、複雑なSQLステートメントの使用が大幅に簡略化されることがわかります。このビューを使用すると、基本的なSQLを一度に作成して再利用できます
SELECT * FROM productcustomer WHERE prod_id = 'TNT2'
2.ビューを使用して、取得したデータを再フォーマットします
ビューのもう1つの一般的な用途は、取得したデータを再フォーマットすることです。次のSELECTはベンダー名と場所を返します
SELECT CONCAT(vend_name,'(',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name
このフォーマットを頻繁に使用する場合は、この目的でビューを作成して、毎回使用できます。
CREATE VIEW vendorlocation AS
SELECT CONCAT(vend_name,'(',RTRIM(vend_country),')') AS vend_title
FROM vendors
ORDER BY vend_name
今後使用する必要があるたびに、ビューをクエリするだけで済みます
SELECT * FROM vendorlocation
3.ビューを使用して不要なデータをフィルタリングする
メールアドレスのない顧客をフィルタリングするビューを定義して、メーリングリストにメールを送信するときに、メールアドレスのないユーザーを除外できるようにします
CREATE VIEW customeremaillist AS
SELECT * FROM customers
WHERE cust_email IS NOT NULL
4.ビューと計算フィールドを使用する
各アイテムの合計価格を取得して計算するビューorderitemstotalを作成します。
CREATE VIEW orderitemstotal AS
SELECT
order_num,
prod_id,
quantity,
item_price,
quantity * item_price AS total_price
FROM orderitems
以下では、注文20005の詳細を取得できます。
SELECT * FROM orderitemstotal
WHERE order_num = 20005
3番目に、ビューを更新します
一般ビューの目的は、更新ではなく、取得を単純化することです。
ただし、ビューも更新可能であり、INSERT \ UPDATEおよびDELETEを使用できます。ビューを更新すると、そのベーステーブルが更新されます。
次の操作がビュー定義にある場合、ビューを更新できません
- グループ化
- 接続
- サブクエリ
- そして
- 集計関数
- 明確な
- 列をエクスポート