视图

musql视图介绍

1.1视图简介(一)

在后台,我们提供了一个 teachers 表的视图 v_teachers, 现在需要你查看这个视图中的内容。

SELECT * FROM v_teachers;

1.2视图简介(二)

现在我们需要查看当前数据库中的所有表和视图名称和它的类型,请编写 SQL 语句来实现

show full tables;

第二章:创建视图

2.1CREATE VIEW(一)

现在,你的上级主管要求你写一个简单的视图,命名为 v_courses_teachers。要求提供 courses 表的所有信息,并且以 teacher_id、teacher_name 和 teacher_email 来展示关联表 teachers 中的主键、讲师姓名和讲师邮箱。

CREATE VIEW v_courses_teachers AS SELECT c.*,t.name AS teacher_name ,t.email AS teacher_email FROM courses c left join teachers t on c.teacher_id=t.id

2.2CREATE VIEW(二)

现在,你的上级主管要求你写一个简单的视图(v_courses)。要求从教师表(teachers)和课程表(courses)中查询国籍不为 USA 和 JP 的老师所教的课程和所对应的学生数量 student_count。

CREATE VIEW v_courses AS SELECT c.id AS id, c.name AS name, c.student_count AS student_count FROM courses c --询国籍不为 USA 和 JP 的老师所教的课程 LEFT JOIN teachers t ON t.id = c.teacher_id WHERE t.`country` NOT IN ('USA', 'JP') OR t.country IS NULL

2.3CREATE VIEW(三)

我们提供了一个视图 v_courses,包含了教师 id 和该教师教授的总学生数。现在我们想要进一步获取更多的教师信息,请基于视图 v_courses ,创建一个新的视图 v_teachers 展示更多的信息。

CREATE VIEW v_teachers AS SELECT teacher_id, t.name, email, age, country, c.student_count FROM teachers t RIGHT JOIN v_courses c ON t.id = c.teacher_id ORDER BY t.id;

第三章 MySQL视图处理

3.1MySQL 视图处理算法(一)

请创建一个视图 v_teachers 查看 teachers 表中年龄大于25岁的教师信息,并使用 Merge 的视图算法

CREATE ALGORITHM = MERGE VIEW v_teachers AS SELECT * FROM teachers WHERE age>25;

3.2MySQL 视图处理算法(二)

请创建一个视图 v_teachers 查看 teachers 表中国籍为 CN 的教师信息,并使用 TEMPTABLE 的视图算法

CREATE ALGORITHM=TEMPTABLE VIEW v_teachers AS SELECT * FROM teachers WHERE country ='CN';

第四章:MySQL ALTER VIEW

4.1MySQL ALTER VIEW语句(一)

张三曾经有一个梦想,想要听遍学校里的每一位教师的课程,于是写了一个视图 v_mydream 展示了所有的课程与授课教师的信息,并按教师姓名升序去实现,但是张三发现课程实在是太多太多,梦想需要改一改,于是他把梦想改成了去听每一位教师最受欢迎的课程(听课学生越多越受欢迎,如果该教师没有教授课程则课程与学生数显示为 NULL),学校也非常支持他,听说他最近在学 MySQL,就给了他 2 张表的数据让他自己去找,teachers 表中记录着教师的信息,courses 表中记录着课程信息。张三一看,“ 哇~ 这也太简单了,感谢学校大大提供的数据 ”,可是他正要把原来的梦想视图改写,就发现李四从旁边过。李四肚子饿的呱呱叫,看到张三就问要不要一起去吃饭,张三灵光一闪,“ 这么巧~ 我也打算去吃饭,但是现在我这里有一个很简单的问题,你帮我解决了我就请你吃饭 ”,李四一听还有这等好事,立马答应下来了,结果发现不会。为了不掉面子并且能吃上一顿,就偷偷联系了你,请求你帮他解决。

alter view v_mydream as select t.`name` as teacher_name, c.`name` as course_name, c.`student_count` as student_count from teachers t left join courses c on t.id = c.teacher_id where student_count = (select max(student_count) from courses where teacher_id = t.id) or student_count is null order by student_count,t.id;

第五章:创建 MySQL 可更新视图

5.1 MySQL 可更新视图(一)

这里提供了一个可更新的视图 v_teachers,请你编写 SQL 语句对 Linghu Chong 老师的年龄修改为 30 岁。

update v_teachers set age = 30 where name = 'Linghu Chong';

5.2 MySQL 可更新视图(二)

这里提供了一个可更新的视图 v_teachers,请你编写 SQL 语句删除 Linghu Chong 老师的信息。
DELETE from v_teachers
where name = 'Linghu Chong';

第六章:MySQL 视图和 WITH CHECK OPTION

WITH CHECK OPTION 子句

现在要求创建一个可更新视图 v_teachers,只允许查看和插入年龄小于 30 岁的教师信息,请编写 SQL 语句实现

CREATE VIEW v_teachers AS SELECT * FROM teachers WHERE age<30 WITH CHECK OPTION;

第七章:MySQL 显示视图

MySQL SHOW VERSION

现在我们需要查看当前数据库中的所有视图,请编写 SQL 语句来实现

SHOW FULL TABLES WHERE table_type = 'VIEW'

第八章:MySQL 重命名视图

MySQL RENAME VIEW

现在我们有一个视图 v_teachers 需要重命名为 v_teachers_1,请编写 SQL 语句来实现

RENAME TABLE v_teachers to v_teachers_1;

第九章:MySQL 删除视图

9.1MySQL DROP VIEW(一)

现在我们要删除一个视图,名为 v_teachers ,请编写 SQL 语句来实现

DROP VIEW v_teachers;

9.2MySQL DROP VIEW(二)

现在我们要删除一个视图,名为 v_courses_teachers ,请编写 SQL 语句来实现

DROP VIEW IF EXISTS v_courses_teachers;

第十章:MySQL 视图本地和级联

现在我们一个可更新视图 v_teachers,只允许查看年龄小于 30 岁的教师信息,要求基于 v_teachers 视图实现另一个视图 v_teachers_1,查看年龄小于 20 岁的教师信息,视图采用本地检查,请编写 SQL 语句实现。

CREATE OR REPLACE VIEW v_teachers_1 AS SELECT id,name,email,age,country FROM v_teachers WHERE age<20;

第十一章:MySQL 管理视图

11.1MySQL 管理视图(一)

我们有一个视图 v_teachers,但是现在我们想要显示这个视图的定义,请编写 SQL 语句来实现
show create view v_teachers;

11.2MySQL 管理视图(二)

张三在宿舍里打游戏,今天运气不太好,总是被匹配的队友坑,气得张三直接就把游戏给卸载了。没心情去吃饭的张三打开 QQ,发现有 999+ 的信息,原来是学校的老师给他发来的消息,想要他帮忙创建一个 SQL 视图 v_best_teachers,要他赶紧写好发过去。张三看了看需求,边看要求边写 SQL,结果发现...不对!学校的要求是查出每个国家最受欢迎的老师信息(听课学生数越多越受欢迎),并按国籍升序排序。现在张三在知识分享过程中,拿这道题来考你,并嘲讽你不能做出来……小伙子,打脸张三的时候到了,还在等什么 ?冲

create or replace view v_best_teachers as select teacher_id, student_count, country, email from( select teacher_id, sum(student_count) student_count, country, email from courses c inner join teachers t on c.teacher_id = t.id group by teacher_id, country, email) a where (student_count, country) in( select max(student_count), country from( select teacher_id, sum(student_count) student_count, country, email from courses c inner join teachers t on c.teacher_id = t.id group by teacher_id, country, email) aa group by country) order by country;

__EOF__

本文作者粥粥alg
本文链接https://www.cnblogs.com/3456939606zwp/p/17832972.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   粥粥alg  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示