ホームページ  >  記事  >  データベース  >  MySQL データベース ビューの詳細な例

MySQL データベース ビューの詳細な例

WBOY
WBOY転載
2022-07-13 12:10:342137ブラウズ

この記事では、mysql に関する関連知識を提供します。主に、ビューの導入と役割、ビューの作成、ビューの変更、ビューの更新、ビューの名前変更と削除など、データベース ビューに関連する問題が整理されています。 、ビューの練習など、一緒に見ていきましょう。皆さんの参考になれば幸いです。

MySQL データベース ビューの詳細な例

推奨される学習: mysql ビデオ チュートリアル

1 ビューの概要と役割

ビューの概要:

  • View ビューは現実には存在しない仮想テーブルです。その 本質は、SQL ステートメントに基づいて動的データ セットを取得し、それらに名前を付けることです。 ユーザーはビュー名を使用するだけで結果セットを取得し、それをテーブルとして使用できます。
  • ビューの定義のみがデータベースに保存され、ビュー内のデータは保存されません。 データは元のデータ テーブルにまだ存在します。
  • ビューを使用してデータをクエリする場合、データベース システムは元のテーブルから対応するデータを取得します。したがって、 ビューのデータは、元のテーブルのデータに依存します。 テーブル内のデータが変更されると、それに応じてビュー内のデータも変更されます。

ビューの役割:

  • コードを簡素化します。クエリを再利用できるようにビューにカプセル化すると、複雑なクエリを理解しやすくなります;
  • より安全になります。たとえば、テーブルに大量のデータがあり、他の人に見られたくない情報がたくさんある場合、ビューを使用してユーザーごとに異なるビューを使用できます。
2 ビューの作成

ビューを作成するための構文は次のとおりです:

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

パラメータの説明:

  1. algorithm: ビュー選択のアルゴリズムを表します (オプション);
  2. view_name: 作成されたビューの名前;
  3. column_list: ビュー内の各属性の名詞を指定します。 , それは SELECT ステートメントでクエリされたものと同じです。属性は同じです;
  4. select_statement: は完全なクエリ ステートメントを表し、クエリ レコードをインポートしますビューに;
  5. [[カスケード | ローカル] チェック オプションを使用]: は、ビューを更新するときに、ビューがアクセス許可の範囲内にあることを確認することを意味します。
3 ビューの変更

ビューの変更とは、データベース内の既存のテーブルの定義を変更することを意味します。ベース テーブルの一部のフィールドが変更された場合、

ビューを変更することで、ビューとベース テーブルの間の一貫性を維持できます。

構文形式:

alter view 视图名 as select语句;

4 ビューの更新

すべてのビューを更新できるわけではありません。ビューを UPDATE、DELETE、または INSERT ステートメントで使用して、基になるテーブルの内容を更新できます。更新可能なビューの場合、ビュー内の行と基になるテーブル内の行の間に 1 対 1 の関係が必要です。

ビューに次の構造のいずれかが含まれている場合、ビューは更新できません。 :

    集計関数 (SUM()、MIN()、MAX() など);
  • DISTINCT;
  • HAVING;
  • UNION または UNION ALL;
  • 選択内にあるサブクエリリスト ;
  • JOIN;
  • FROM 句内の更新不可能なビュー;
  • ##WHERE サブFROM 句内のテーブルを参照する FROM 句内のサブクエリ;
  • はリテラル値のみを使用します (この場合、更新するベース テーブルはありません)。
注:

データはビュー内で更新できますが、多くの制限があります。 一般に、ビューを介してデータを更新するのではなく、データをクエリするための仮想テーブルとしてビューを使用することが最善です。
ビュー内のフィールドが実際のテーブルで変更された場合、ビューを更新する必要があります。更新しないと、ビューは無効なビューになります。
5 ビューの名前変更と削除


ビューの名前を変更します:

rename table 视图名 to 新视图名;
ビューを削除します : #
drop view if exists 视图名;

#ビューを削除すると、ビューの定義のみが削除され、実際のテーブル内のデータは削除されません

複数のビューを同時に削除する場合は、次の構文形式を使用します。

drop view if exists 视图名1, 视图名2, 视图名3...;
6 ビューの演習

#6.1 データの準備

次のことができます。まず、次のコードに基づいて練習用に 2 つの基本的なテーブルを作成します。
create table college(
    cno   int         null,
    cname varchar(20) null);
create table student(
    sid     int         null,
    name    varchar(20) null,
    gender  varchar(20) null,
    age     int         null,
    birth   date        null,
    address varchar(20) null,
    score   double      null);

两表的基本数据如下图所示:

MySQL データベース ビューの詳細な例

6.2 查询平均分最高的学校名称

结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:

SELECT cname
FROM (SELECT cname, rank() over (order by avg_score desc ) item
      FROM (SELECT cname, avg(score) avg_score
            FROM student
                     JOIN college ON sid = cno
            GROUP BY cname) t) tt
WHERE item = 1;

在上述代码中,先将student 与 college两表关联,将关联的查询作为子表,并根据子表进行平均数的排序,平均数序号为1的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
MySQL データベース ビューの詳細な例

这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图

视图解决方式代码:

-- 1 视图一,连接两表并计算平均数
CREATE VIEW t_view AS
SELECT cname, avg(score) avg_score
FROM student
         JOIN college ON sid = cno
GROUP BY cname;

-- 2 视图二,利用视图一对平均分数进行排序标号
CREATE VIEW tt_view AS
SELECT cname, rank() over (order by avg_score desc ) item
FROM (t_view);

-- 3 利用视图查询
SELECT cname
FROM (tt_view)
WHERE item = 1;

在创建完视图后,如果想要查询平均分前三名学校,则方便很多,创建好的视图可以直接使用!

参考代码及结果:

SELECT cnameFROM (tt_view)WHERE item = 1
   OR item = 2
   OR item = 3;

MySQL データベース ビューの詳細な例

推荐学习:mysql视频教程

以上がMySQL データベース ビューの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。