ホームページ >データベース >mysql チュートリアル >MySQL データベース ビューの詳細な例
この記事では、mysql に関する関連知識を提供します。主に、ビューの導入と役割、ビューの作成、ビューの変更、ビューの更新、ビューの名前変更と削除など、データベース ビューに関連する問題が整理されています。 、ビューの練習など、一緒に見ていきましょう。皆さんの参考になれば幸いです。
推奨される学習: mysql ビデオ チュートリアル
ビューの概要:
ビューの役割:
create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
パラメータの説明:
ビューを変更することで、ビューとベース テーブルの間の一貫性を維持できます。
構文形式:alter view 视图名 as select语句;
ビューに次の構造のいずれかが含まれている場合、ビューは更新できません。 :
データはビュー内で更新できますが、多くの制限があります。 一般に、ビューを介してデータを更新するのではなく、データをクエリするための仮想テーブルとしてビューを使用することが最善です。
ビュー内のフィールドが実際のテーブルで変更された場合、ビューを更新する必要があります。更新しないと、ビューは無効なビューになります。
5 ビューの名前変更と削除
rename table 视图名 to 新视图名;ビューを削除します : #
drop view if exists 视图名;
#ビューを削除すると、ビューの定義のみが削除され、実際のテーブル内のデータは削除されません
複数のビューを同時に削除する場合は、次の構文形式を使用します。 drop view if exists 视图名1, 视图名2, 视图名3...;
6 ビューの演習
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);
两表的基本数据如下图所示:
结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:
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的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图
视图解决方式代码:
-- 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 データベース ビューの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。