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プログラムの問題を解決する

推薦する

MySQLは現在の日付と時刻を取得する関数

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

Centos8 で yum を使用して rabbitmq をインストールするチュートリアル

/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...

Nginx プロキシを使用してフロントエンドのクロスドメイン問題を解決する方法

序文Nginx (「エンジン エックス」と発音) は、リバース プロキシ、ロード バランサ、HTTP...

Vueのウォッチリスナーの使い方を説明する記事

目次リスナーウォッチ形式リスナーを設定します。要約するリスナーウォッチ関数名は、リッスンする要素の名...

Dockerコンテナ内にkibanaトークナイザーをインストールする方法

ステップ: 1. 仮想マシンディレクトリに新しいdocker-compose.ymlファイルを作成し...

JavaScriptにおけるPromiseの使い方と注意点について(推奨)

1. 約束の説明Promise は、非同期操作の最終状態 (失敗または正常完了) とその結果の値を...

Vue での props の使い方の紹介

序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...

Vueライフサイクルカメラの8つのフック関数

目次1. beforeCreateとcreated関数2. beforeMountとmount関数3...

CSS3 アニメーション ボールローリング JS コントロールアニメーション一時停止

CSS3 はアニメーションを作成でき、多くの Web ページのアニメーション画像、Flash アニメ...

Vue 親コンポーネントが子コンポーネント関数の実装を呼び出す

Vue親コンポーネントは子コンポーネントの関数を呼び出す親コンポーネントはイベントを通じて子コンポー...

ファイル操作のためのLinuxシステムコール

目次1. ファイルを開くパラメータの紹介2. ファイルの読み取り3. ファイルを書き込む4. 閉じる...

JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)

JavaScriptでよく使われるいくつかの文字列メソッド文字列は読み取り専用データです。よく使用...

メニューのホバー効果を実現するCSS3

結果: html <nav id="nav-1"> <a cl...

実務経験7年のフロントエンドスーパーバイザーによる経験共有

今日はベテランの貴重な経験を共有します。著者は技術管理の経験が7年あり、多い時は80人以上を率いてい...