Maison >base de données >tutoriel mysql >Exemple détaillé de vue de base de données MySQL
Cet article vous apporte des connaissances pertinentes sur mysql, qui organise principalement les problèmes liés aux vues de base de données, y compris l'introduction et le rôle des vues, la création de vues, la modification de vues, la mise à jour de vues et la dénomination et la suppression de vues, les exercices de vues, etc. ., examinons-les ci-dessous, j'espère que cela sera utile à tout le monde.
Apprentissage recommandé : Tutoriel vidéo mysql
Introduction aux vues :
create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]
Description du paramètre :
Format de syntaxe : alter view 视图名 as select语句;
Toutes les vues ne peuvent pas être mises à jour. Les vues peuvent être utilisées dans les instructions UPDATE, DELETE ou INSERT pour mettre à jour le contenu de la table sous-jacente. Pour qu'une vue puisse être mise à jour, il doit y avoir une relation biunivoque entre les lignes de la vue et les lignes de la table sous-jacente.
Une vue ne peut pas être mise à jour si elle contient l'une des structures suivantes :Fonctions d'agrégation (SUM(), MIN(), MAX(), etc.);
Remarque :
5 Renommer et supprimer la vue
Renommer la vue : rename table 视图名 to 新视图名;
Supprimer la vue : drop view if exists 视图名;
Si vous souhaitez supprimer plusieurs vues en même temps, utilisez le format de syntaxe suivant :drop view if exists 视图名1, 视图名2, 视图名3...;
6.1 Préparation des données
Lorsque vous faites des exercices, vous pouvez créez d'abord deux tableaux de base pour la pratique :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视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!