mysql create view tutorial with code examples
このMySQLCreate Viewチュートリアルでは、さまざまな句と例を使用してMySQLでビューを作成する方法についてすべて説明しています。また、ビューをドロップして管理する方法についても説明します。
MySQLでは、ビューは仮想テーブルであり、他のプログラムによるテーブルへのアクセスをブロックすることなくテーブル内のデータを確認できるため、デッドロック状態を回避できます。
ビューは、データを保持する1つまたは複数のテーブルの上に作成されます。先に進む前に、使用していることに注意してください MySQLバージョン8.0 。
学習内容:
MySQL Create View
構文:
CREATE (REPLACE) VIEW view_name AS SELECT col1, col2, ... FROM table_name WHERE condition;
構文の説明:
- 構文はキーワード「CREATEVIEW」で始まり、それによって実行されるアクティビティのタイプについてMySQLサーバーに通知します。これは必須のキーワードであり、省略できません。
- REPLACEはオプションのパラメーターです。これは、既存のビューで作業しているときに使用できます。
- 次はビューの名前です。テーブルや列の名前と同じように一意である必要があります。
- 次に、テーブルから列を選択します。ビューには、基になるテーブルのすべての列を含めることも、選択したいくつかの列のみを含めることもできます。
- 次に、ビューを実行する必要のあるテーブルの名前を示します。これは必須であり、省略できません。
- 次に、CREATEVIEWアクションを適用する必要のあるターゲット行の数を制限またはフィルタリングするWHERE条件が発生します。 WHEREもキーワードですが、オプションです。
ただし、WHERE句は重要です。言及されていない場合、または条件が正しく設定されていない場合は、テーブル全体または不要な行のいずれかがビューの一部になります。
MySQLCreateビューの例
以下に、MYSQLで作成されたサンプルテーブルを示します。
スキーマ名: パシフィック
テーブル名: 従業員
列名:
empNum :従業員番号の整数値を保持します。
苗字 :従業員の姓のvarchar値を保持します。
ファーストネーム :従業員の名のvarchar値を保持します。
Eメール :従業員の電子メールIDのvarchar値を保持します。
deptNum :従業員が属する部門IDのvarcharを保持します。
給料 :各従業員の給与の10進値を保持します。
開始日 :従業員の加入日の日付値を保持します。
スキーマ名: パシフィック
テーブル名: 部門
列名:
deptNum; 組織内の部門IDのvarcharを保持します。
市: 部門が所属する都市の名前を保持します。
国: 都市に対応する国の名前を保持します。
ボーナス ボーナスのパーセンテージ値を保持します。
MySQLSimpleビューを作成する
次に、上のテーブルの上にビューを作成しましょう。
以下にクエリを示します。
SELECT句には特定の列名を付けることも、「*」を使用してすべての列を取得することもできます。ビューを作成すると、列を追加または削除することはできません。列を追加または削除する場合は、新しいビューを作成するか、この既存のビューを置き換える必要があります。
出力ステートメントは、CREATE VIEWSQLステートメントが正常に実行されたことを示しています。また、影響を受けた行はないことも示しています。これは、新しい行が作成されても、基になるテーブルのデータに影響を与えないことを意味します。
次に、ビューをクエリしてみましょう。
クエリ:
CREATE VIEW employees_view AS SELECT empNum, lastName, firstName, email, deptNum, salary, start_date FROM employees ; SELECT empNum, firstName, lastName, email, deptNum, salary, start_date FROM employees_view ;
ResultSet:
empNum | 苗字 | ファーストネーム | Eメール | deptNum | 給料 | 開始日 |
---|---|---|---|---|---|---|
1008 | ベイリー | オリバー | Oliver.bailey@gmail.com | 3 | 24494.4 | 0001-01-01 |
1001 | アンドリュース | ジャック | ja@gmail.com | 1 | 3182.7 | 0001-01-01 |
1002 | シュワッツ | マイク | ms@gmail.com | 1 | 5304.5 | 0001-01-01 |
1003 | ラングレー | マーガレット | margaret.langley@gmail.com | 二 | 8820 | 0001-01-01 |
1004 | ハレラ | サンドラ | sh@gmail.com | 1 | 10609 | 0001-01-01 |
1005 | 読んだ | ピーター | pl@gmail.com | 二 | 14332.5 | 0001-01-01 |
1006 | キース | ジェニー | jk@gmail.com | 二 | 16537.5 | 0001-01-01 |
1009 | カップ | ハリー | hb@gmail.com | 5 | 30645.6 | 0001-01-01 |
1011 | ハンクス | トム | th@gmail.com | ヌル | 10100 | 0001-01-01 |
1012 | ルター | マーティン | ml@gmail.com | 3 | 13000 | 0001-01-01 |
1014 | マレー | キース | km@gmail.com | 1 | 25000 | 0001-01-01 |
1015 | ブランソン | ジョン | jb@gmail.com | 二 | 15000 | 0001-01-01 |
1016 | マーティン | リチャード | rm@gmail.com | 4 | 5000 | 0001-01-01 |
1017 | ジョンソン | イブ | ej@gmail.com | 3 | 5500 | 2019-11-25 |
1018 | つなぐ | ノーラン | nb@gmail.com | 二 | 15000 | 2019-09-13 |
GROUPBYとORDERBYを使用してビューを作成する
部門ごとに給与の合計額を取得する必要があるシナリオを想定してみましょう。
配列にJavaを追加する方法
以下にクエリを示します。
このクエリを毎回テーブルで実行するのではなく、情報が必要です。ビューにクエリを実行すると、データベースソースの消費量が少なくなります。
それでは、ビューの内容を見てみましょう。各部門が給与の観点から従業員に送っている金額を確認します。
クエリ:
CREATE VIEW salPerDept AS SELECT deptNum, sum(salary) FROM employees GROUP BY deptNum ORDER BY deptNum desc ; SELECT * FROM employees_view ;
結果セット:
deptNum | 合計(給与) | |||||
---|---|---|---|---|---|---|
1006 | キース | ジェニー | 二 | シャーロット | アメリカ | 5 |
5 | 30645.6 | |||||
4 | 5000 | |||||
3 | 42994.4 | |||||
二 | 69690 | |||||
1 | 44096.2 | |||||
ヌル | 10100 |
deptNumのNULLは、従業員がどの部門にも属していないが、組織の給与計算に参加していることを示します。
MySQLはJOINを使用してビューを作成します
部門、その拠点となる都市、およびその従業員に提供されるボーナスに関するデータを取得したいとします。この情報はすべての従業員に必要です。
これを実現するために、JOINキーワードを使用して、部門と従業員のテーブルからデータを取得します。
クエリとその出力を見てみましょう。
ここでは、要件に応じて、INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTERJOINなどのさまざまなタイプのJOINを使用できます。
クエリ:
CREATE VIEW join_view AS SELECT A.empNum, A.lastName, A.firstName, A.deptNum, B.city, B.country, B.bonus FROM employees A INNER JOIN departments B USING (deptNum) ; SELECT * FROM join_view ;
このビューでSELECTクエリを実行して、出力を確認してみましょう。
結果セット:
empNum | 苗字 | ファーストネーム | deptNum | 市 | 国 | ボーナス |
---|---|---|---|---|---|---|
1001 | アンドリュース | ジャック | 1 | ニューヨーク | アメリカ | 3 |
1002 | シュワッツ | マイク | 1 | ニューヨーク | アメリカ | 3 |
1004 | ハレラ | サンドラ | 1 | ニューヨーク | アメリカ | 3 |
1014 | マレー | キース | 1 | ニューヨーク | アメリカ | 3 |
1003 | ラングレー | マーガレット | 二 | シャーロット | アメリカ | 5 |
1005 | 読んだ | ピーター | 二 | シャーロット | アメリカ | 5 |
1015 | ブランソン | ジョン | 二 | シャーロット | アメリカ | 5 |
1018 | つなぐ | ノーラン | 二 | シャーロット | アメリカ | 5 |
1008 | ベイリー | オリバー | 3 | シカゴ | アメリカ | 8 |
1012 | ルター | マーティン | 3 | シカゴ | アメリカ | 8 |
1017 | ジョンソン | イブ | 3 | シカゴ | アメリカ | 8 |
1016 | マーティン | リチャード | 4 | ロンドン | イングランド | 10 |
1009 | カップ | ハリー | 5 | ベルリン | ドイツ | 13 |
サブクエリを使用してビューを作成する
この種のcreateviewステートメントでは、句がサブクエリの出力に基づいている列の値をフェッチしようとします。たとえば、給与が組織の平均給与を上回っているすべての従業員を見つける必要があります。
クエリを見てみましょう:
クエリ:
CREATE VIEW avgSal_view AS SELECT empNum, lastName, firstName, salary FROM employees WHERE salary > ( SELECT avg(salary) FROM employees ) ; SELECT * FROM avgSal_view ;
結果セット:
empNum | 苗字 | ファーストネーム | 給料 |
---|---|---|---|
1018 | つなぐ | ノーラン | 15000 |
1005 | 読んだ | ピーター | 14332.5 |
1006 | キース | ジェニー | 16537.5 |
1008 | ベイリー | オリバー | 24494.4 |
1009 | カップ | ハリー | 30645.6 |
1014 | マレー | キース | 25000 |
1015 | ブランソン | ジョン | 15000 |
ビューの管理
(ビューの変更)または(ビューの作成/置換)を使用すると、任意のビューを変更/置換できます。ビューを再コンパイルするためにALTERVIEWを明示的に使用することは無効です。
ALTER ANYテーブルのシステム権限がある場合、またはビューがスキーマにある場合は、ALTERVIEWステートメントを使用できます。
ALTER Viewクエリを使用することで、実行前に再コンパイルエラーを見つけることができます。 ALTER VIEWステートメントを使用すると、それに依存している他のオブジェクト/ビューに影響を与える可能性があります。したがって、変更後にビューを再コンパイルできます。
(ビューの作成)を使用してビューを再定義し、(ビューの置換)クエリで既存のビューを置き換えることができます。
例えば、 employee_viewを検討してください。ここに、lastName列とfirstName列がいくつかあります。 firstName列とlastName列をマージする必要があると考えてください。
以下に、ALTERクエリを実行する前のビューのスナップショットを示します。
次に、ALTER VIEWクエリを実行して、firstNameとlastNameをマージします。
クエリを以下に示します。
クエリ:
ALTER VIEW employees_view AS SELECT empNum, CONCAT(firstName, ' ', lastName) AS empName, email, deptNum, salary, start_date FROM employees ;
今すぐemployees_viewの内容を見てみましょう。
お気づきの方もいらっしゃると思いますが、名前の列は2つありません。代わりに、名と姓の両方が連結された1つの列があります。
詳細= >> MySQLCONCAT関数
クエリ:
SELECT * FROM employees_view;
結果セット:
empNum | empName | Eメール | deptNum | 給料 | 開始日 |
---|---|---|---|---|---|
1008 | オリバーベイリー | Oliver.bailey@gmail.com | 3 | 24494 | 0001-01-01 |
1001 | ジャックアンドリュース | ja@gmail.com | 1 | 3182.7 | 0001-01-01 |
1002 | マイクシュワッツ | ms@gmail.com | 1 | 5304.5 | 0001-01-01 |
1003 | マーガレットラングレー | margaret.langley@gmail.com | 二 | 8820 | 0001-01-01 |
1004 | サンドラ・ハレラ | sh@gmail.com | 1 | 10609 | 0001-01-01 |
1005 | ピーター・リー | pl@gmail.com | 二 | 14333 | 0001-01-01 |
1006 | ジェニーキース | jk@gmail.com | 二 | 16538 | 0001-01-01 |
1009 | ハリービーカー | hb@gmail.com | 5 | 30646 | 0001-01-01 |
1011 | トム・ハンクス | th@gmail.com | 10100 | 0001-01-01 | |
1012 | マルティン・ルター | ml@gmail.com | 3 | 13000 | 0001-01-01 |
1014 | キースマレー | km@gmail.com | 1 | 25000 | 0001-01-01 |
1015 | ジョン・ブランソン | jb@gmail.com | 二 | 15000 | 0001-01-01 |
1016 | リチャードマーティン | rm@gmail.com | 4 | 5000 | 0001-01-01 |
1017 | イブ・ジョンソン | ej@gmail.com | 3 | 5500 | 2019-11-25 |
1018 | ノーランボンド | nb@gmail.com | 二 | 15000 | 2019-09-13 |
ビューをドロップする
DROPVIEWステートメントを使用してビューを削除できます。 DROP ANYビュー権限を持っている場合、またはスキーマに含める必要がある場合は、DROPVIEWを使用できます。垂れ下がったビューは、ビューが作成された基になるテーブルやそのテーブルのデータには影響しません。
クエリ:
DROP VIEW (view name);
よくある質問
Q#1)MySQLでビューを作成するにはどうすればよいですか?
回答: MySQLでビューを作成する方法は複数あります。以下に示すように、4つの異なる方法を実行しました。
1. MySQLSimpleビューの作成
2. MySQL GROUPBYおよびORDERBYを使用したビューの作成
3.JOINを使用したMySQLのビューの作成
4.サブクエリを使用したMySQLのビューの作成
Q#2) MySQLのビューとは何ですか?
回答: ビューは、論理構造に格納された事前に実行されたクエリのようなものであるため、テーブルで複雑なクエリを再実行する必要はありません。テーブルに影響を与えることなく、ビューをクエリしてデータを取得するだけです。
Q#3) ビューの作成中にビューにJOINを適用できますか?
回答: はい、JOINステートメントは、テーブルで使用するのと同じように、ビューで使用できます。
Q#4) 別のビューからビューを作成できますか?
回答: ビューは基本的にテーブルとして機能しますが、仮想ビューとして機能します。したがって、テーブルの上にビューを作成する方法で、同様に別のビューの上にビューを作成できます。
Q#5) なぜビューを使用するのですか?
回答: SQLクエリの結果として、ビューは論理テーブルを作成します。ビューを使用する理由は次のとおりです。
- ビューを使用することで、関連するタスクの行と列の表示を制限できます(SelectおよびWhere句を使用)。
- ビューは、行と列を組み合わせるときに使用されます( 連合 および結合)複数のテーブルから。
- (Group byとHavingを使用して)行をより詳細なテーブルに集約することをより明確に表現するため。
- ビューは、列(ASを使用)または行(JOIN、IF、CASE、またはOracleのDECODEを使用)の名前を変更またはデコードするときに使用されます。
- 上記のいずれかをセキュリティ設定と組み合わせることで、ユーザーが許可されているものにのみアクセスできるかどうかを確認できます。
結論
このチュートリアルでは、MySQLでビューを作成するさまざまな方法について説明しました。
1. MySQLSimpleビューの作成
2. MySQL GROUPBYおよびORDERBYを使用したビューの作成
3.JOINを使用したMySQLのビューの作成
4.サブクエリを使用したMySQLのビューの作成
プロジェクトの要件に応じて、これらのオプションのいずれかを選択できます。
さらに読む= >> MySQL CREATE TABLE
ハッピーラーニング!!