MySQLでビューを作成する方法

MySQLでビューを作成する方法

基本的な構文

CREATE VIEW ステートメントを使用してビューを作成できます。

構文の形式は次のとおりです。

CREATE VIEW <ビュー名> AS <SELECT ステートメント>

構文については以下に説明します。

  • <ビュー名>: ビューの名前を指定します。名前はデータベース内で一意である必要があり、他のテーブルやビューと同じにすることはできません。
  • <SELECT ステートメント>: 複数の基本テーブルまたはソース ビューを照会するために使用できるビューを作成するための SELECT ステートメントを指定します。

ビューを作成する際の SELECT ステートメントの指定には、次の制限が適用されます。

  • CREATE VIEW 権限に加えて、ユーザーには操作に関係する基本テーブルやその他のビューに対する権限も付与されます。
  • SELECT ステートメントはシステム変数またはユーザー変数を参照できません。
  • SELECT ステートメントでは、FROM 句にサブクエリを含めることはできません。
  • SELECT ステートメントは準備されたステートメント パラメータを参照できません。

ビュー定義で参照されるテーブルまたはビューが存在している必要があります。ただし、ビューを作成した後で、定義が参照するテーブルまたはビューを削除することができます。 CHECK TABLE ステートメントを使用して、ビュー定義にこのような問題がないか確認できます。

ビュー定義では ORDER BY ステートメントが許可されていますが、特定のビューから選択し、そのビューが独自の ORDER BY ステートメントを使用する場合、ビュー定義内の ORDER BY は無視されます。

TEMPORARY テーブル (一時テーブル) はビュー定義で参照できず、TEMPORARY ビューを作成することもできません。

WITH CHECK OPTION は、ビューを変更するときに、挿入されたデータが WHERE で設定された条件を満たしているかどうかを確認することを意味します。

単一のテーブルに基づいてビューを作成する

MySQL は単一のテーブルにビューを作成できます。

以下に示すように、test_db データベースの tb_students_info テーブルのデータを表示します。

mysql> tb_students_info から * を選択;
+----+---------+---------+-------+--------+----------+-----------+
| ID | 名前 | 部門 ID | 年齢 | 性別 | 身長 | ログイン日 |
+----+---------+---------+-------+--------+----------+-----------+
| 1 | ダニー | 1 | 25 | F | 160 | 2015-09-10 |
| 2 | グリーン | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | ヘンリー | 2 | 23 | 男 | 185 | 2015-05-31 |
| 4 | ジェーン | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | ジム | 1 | 24 | 男性 | 175 | 2016-01-15 |
| 6 | ジョン | 2 | 21 | 男性 | 172 | 2015-11-11 |
| 7 | リリー | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | スーザン | 4 | 23 | 女性 | 170 | 2015-10-01 |
| 9 | トーマス | 3 | 22 | 男 | 178 | 2016-06-07 |
| 10 | トム | 4 | 23 | 男 | 165 | 2016-08-05 |
+----+---------+---------+-------+--------+----------+-----------+
セット内の行数は 10 です (0.00 秒)

【例1】

tb_students_info テーブルに view_students_info というビューを作成します。入力した SQL 文と実行結果は次のとおりです。

mysql> ビュー view_students_info を作成します
  -> AS SELECT * FROM tb_students_info;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)
mysql> view_students_info から * を選択します。
+----+---------+---------+-------+--------+----------+-----------+
| ID | 名前 | 部門 ID | 年齢 | 性別 | 身長 | ログイン日 |
+----+---------+---------+-------+--------+----------+-----------+
| 1 | ダニー | 1 | 25 | F | 160 | 2015-09-10 |
| 2 | グリーン | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | ヘンリー | 2 | 23 | 男 | 185 | 2015-05-31 |
| 4 | ジェーン | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | ジム | 1 | 24 | 男性 | 175 | 2016-01-15 |
| 6 | ジョン | 2 | 21 | 男性 | 172 | 2015-11-11 |
| 7 | リリー | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | スーザン | 4 | 23 | 女性 | 170 | 2015-10-01 |
| 9 | トーマス | 3 | 22 | 男 | 178 | 2016-06-07 |
| 10 | トム | 4 | 23 | 男 | 165 | 2016-08-05 |
+----+---------+---------+-------+--------+----------+-----------+
10 行セット (0.04 秒)

デフォルトでは、作成されたビューのフィールドはベーステーブルのフィールドと同じです。ビューフィールドの名前を指定してビューを作成することもできます。

【例2】

tb_students_info テーブルに v_students_info というビューを作成します。入力した SQL 文と実行結果は次のとおりです。

mysql> ビュー v_students_info を作成します
  -> (s_id、s_name、d_id、s_age、s_sex、s_height、s_date)
  -> AS SELECT id、名前、部門ID、年齢、性別、身長、ログイン日
  -> tb_students_info から;
クエリは正常、影響を受けた行は 0 行 (0.06 秒)
mysql> v_students_info から * を選択します。
+------+--------+-------+-------+---------+----------+-----------+
| s_id | s_name | d_id | s_age | s_sex | s_height | s_date |
+------+--------+-------+-------+---------+----------+-----------+
| 1 | ダニー | 1 | 24 | F | 160 | 2015-09-10 |
| 2 | グリーン | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | ヘンリー | 2 | 23 | 男 | 185 | 2015-05-31 |
| 4 | ジェーン | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | ジム | 1 | 24 | 男性 | 175 | 2016-01-15 |
| 6 | ジョン | 2 | 21 | 男性 | 172 | 2015-11-11 |
| 7 | リリー | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | スーザン | 4 | 23 | 女性 | 170 | 2015-10-01 |
| 9 | トーマス | 3 | 22 | 男 | 178 | 2016-06-07 |
| 10 | トム | 4 | 23 | 男 | 165 | 2016-08-05 |
+------+--------+-------+-------+---------+----------+-----------+
セット内の行数は 10 行 (0.01 秒)

view_students_info ビューと v_students_info ビューのフィールド名は異なりますが、データは同じであることがわかります。したがって、ビューを使用する場合、ユーザーは実際のテーブルのデータにアクセスするだけでなく、基本テーブルの構造を理解する必要もなく、データベースのセキュリティが確保されます。

複数のテーブルに基づくビューの作成

MySQL では、CREATE VIEW ステートメントを使用して 2 つ以上のテーブルにビューを作成することもできます。

【例3】

テーブル tb_student_info と tb_departments にビュー v_students_info を作成します。入力した SQL 文と実行結果は次のとおりです。

mysql> ビュー v_students_info を作成します
  -> (s_id、s_name、d_id、s_age、s_sex、s_height、s_date)
  -> AS SELECT id、名前、部門ID、年齢、性別、身長、ログイン日
  -> tb_students_info から;
クエリは正常、影響を受けた行は 0 行 (0.06 秒)
mysql> v_students_info から * を選択します。
+------+--------+-------+-------+---------+----------+-----------+
| s_id | s_name | d_id | s_age | s_sex | s_height | s_date |
+------+--------+-------+-------+---------+----------+-----------+
| 1 | ダニー | 1 | 24 | F | 160 | 2015-09-10 |
| 2 | グリーン | 3 | 23 | F | 158 | 2016-10-22 |
| 3 | ヘンリー | 2 | 23 | 男 | 185 | 2015-05-31 |
| 4 | ジェーン | 1 | 22 | F | 162 | 2016-12-20 |
| 5 | ジム | 1 | 24 | 男性 | 175 | 2016-01-15 |
| 6 | ジョン | 2 | 21 | 男性 | 172 | 2015-11-11 |
| 7 | リリー | 6 | 22 | F | 165 | 2016-02-26 |
| 8 | スーザン | 4 | 23 | 女性 | 170 | 2015-10-01 |
| 9 | トーマス | 3 | 22 | 男 | 178 | 2016-06-07 |
| 10 | トム | 4 | 23 | 男 | 165 | 2016-08-05 |
+------+--------+-------+-------+---------+----------+-----------+
セット内の行数は 10 行 (0.01 秒)

このビューは、基本テーブル内のデータを効果的に保護できます。ビューには、s_id、s_name、および dept_name が含まれます。s_id フィールドは tb_students_info テーブルの id フィールドに対応し、s_name フィールドは tb_students_info テーブルの name フィールドに対応し、dept_name フィールドは tb_departments テーブルの dept_name フィールドに対応します。

クエリビュー

ビューが定義されると、データ テーブルをクエリするのと同じように、SELECT ステートメントを使用してビュー内のデータをクエリできます。構文は、基本テーブル内のデータをクエリする場合と同じです。

ビューは、次の領域でのクエリに使用されます。

  • 取得したデータを再フォーマットするにはビューを使用します。
  • ビューを使用して複雑なテーブル結合を簡素化します。
  • ビューを使用してデータをフィルタリングします。

DESCRIBE を使用してビューを表示できます。構文は次のとおりです。

DESCRIBE ビュー名;

【例4】

DESCRIBE ステートメントを使用して、ビュー v_students_info の定義を表示します。入力 SQL ステートメントと実行結果は次のとおりです。

mysql> DESCRIBE v_students_info;
+----------+---------------+------+-----+----------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+----------+---------------+------+-----+----------+-------+
| s_id | int(11) | いいえ | | 0 | |
| s_name | varchar(45) | はい | | NULL | |
| d_id | int(11) | はい | | NULL | |
| s_age | int(11) | はい | | NULL | |
| s_sex | enum('M','F') | はい | | NULL | |
| s_height | int(11) | はい | | NULL | |
| s_date | 日付 | はい | | 2016-10-22 | |
+----------+---------------+------+-----+----------+-------+
セット内の行数は 7 行 (0.04 秒)

注意: DESCRIBE は通常、DESC と省略できます。このコマンドを入力した場合の実行結果は、DESCRIBE を入力した場合と同じです。

上記は、MySQL でビューを作成する方法の詳細です。MySQL でビューを作成する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLにおけるビューの作成(CREATE VIEW)と使用制限の詳しい説明
  • MySQL ビューの原理と使用法の詳細な分析
  • MySQLのビューとインデックスの使い方と違いの詳細な説明
  • MySql ビュー、トリガー、ストアド プロシージャに関する簡単な説明
  • MySql ビュー トリガー ストアド プロシージャの詳細な説明
  • MySQLビューの原理と使用法の詳細な説明
  • MySQL ビュー管理ビューの例の詳細説明 [追加、削除、変更、クエリ操作]
  • MySQLで更新可能なビューを作成する方法の詳細な説明
  • MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い
  • mysql 3つのテーブルを接続してビューを作成する
  • MySQL ビューの原則分析

<<:  シンプルなドラッグ効果を実現するJavaScript

>>:  VScode設定のリモートデバッグLinuxプログラムの問題を解決する

推薦する

HTMLで下線を設定するには?HTMLでテキストに下線を付ける方法

HTML で下線を引くには、以前はテキストを <u></u> タグで囲む必要...

Nginx リバース プロキシと負荷分散の実践

リバースプロキシリバースプロキシとは、プロキシサーバーを介してユーザーのアクセス要求を受信し、ユーザ...

Docker で MySQL をインストールし、リモート接続を実装するチュートリアル

画像をプルする docker プル mysql完成した画像を見る Docker イメージイメージを介...

Zabbix を使用して Oracle データベースを監視する方法の詳細な説明

1. 概要Zabbix は非常に強力で、最も広く使用されているオープンソースの監視ソフトウェアです。...

Dockerでパラメータ変数を外部から指定する方法

この記事は主にDockerでパラメータ変数を外部から指定する方法を紹介します。この記事のサンプルコー...

CSS 疑似要素を使用して複数の連続する要素のスタイルを制御する方法

CSS 疑似要素を使用して要素を制御する場合、一部の要素のスタイルを変更する必要があることがよくあり...

CSS3 はアニメーション属性を使用してクールな効果を実現します (推奨)

animation-name アニメーション名。複数のアニメーションがバインドされていることを示す...

CentOs システムで Python と yum をアンインストールするソリューション

事故の背景: 数日前、プロジェクトの必要性により、サーバーに python-mysql モジュールを...

MySQLの再帰問題

MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...

Centos7環境でMySQL 5.6のインスタンスを複数作成する方法の詳細な説明

この記事では、CentOS 7 環境で MySQL 5.6 の複数のインスタンスを作成する方法につい...

VMware 12 での Ubuntu 16.04 インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...

MySQL クエリ データベース容量方法手順

すべてのデータベースの合計サイズを照会する方法は次のとおりです。 mysql> informa...

Vue-Jest自動テストの基本構成の詳しい説明

目次インストール構成よくある間違い事前テスト作業依存関係の扱いインスタンスとDOMを生成する要約する...

Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...

Docker メモリ監視とストレステストの方法

起動していたDockerコンテナはメモリを使い果たした状態になっており、再起動せずにコンテナのメモリ...