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 の 4 つのトランザクション分離レベルを例を使って分析する

序文データベース操作では、同時データ読み取りの正確性を効果的に保証するために、トランザクション分離レ...

MySQL に外部キー制約を追加する具体的な方法

このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...

Dockerデータストレージのバインドマウントの詳細な説明

この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...

MySQL 8.0.11 の新機能の紹介

MySQL 8.0 for Windows v8.0.11 公式無料バージョン 64 ビット1. デ...

MySQL インデックスの一般的な問題の概要

Q1: データベースにはどのようなインデックスがありますか?メリットとデメリットは何ですか? 1. ...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

Keras を使って SQL インジェクション攻撃を判断する (例の説明)

この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...

MySQL接続クエリにおけるととwhereの違いの簡単な分析

1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明

MySQL 8.0をインストールする docker run -p 63306:3306 -e MYS...

docker で mysql に接続できない場合の解決策

シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...

DOCTYPEタイプの詳細な紹介

<br />通常、HTML では次の方法で DOCTYPE を宣言します。 <!D...

vue_drf は SMS 認証コードを実装します

目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...

Ubuntuの基本設定: openssh-serverのインストールと使用

Ubuntu 17.10 での openssh-server のインストールと使用を記録します。イン...