Note/大学笔记/数据库导论/试题/综合案例4——视图应用.md

230 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 综合案例4——视图应用
本部分介绍了MySQL数据库中视图的含义和作用并且讲解了创建视图、修改视图和删除视图的方法。创建视图和修改视图是重点希望同学们认真学习这两部分内容并在计算机上进行操作。同学们在创建视图后一定要查看视图的结构确保创建的视图是正确的修改视图后也要查看视图的结构保证修改是正确的。
## 1、案例目的
掌握视图的创建、查询、更新和删除操作。
假如河南河北有三个学生参加了清华、北大的自学考试现在需要用数据对其考试结果进行查询和管理清华的分数线是40北大的分数线是41.学生表包含了学生的学号、姓名、家庭地址和电话号码报名表包含学号、姓名、所在学校和报名的学校表结构以及表中的内容分别如表1~表6所示。
表1 stu表结构
| 字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
| ------ | ------------- | ---- | ---- | ---- | ---- | ---- |
| 序号 | int11 | 是 | 否 | 是 | 是 | 否 |
| 姓名 | varchar20 | 否 | 否 | 是 | 否 | 否 |
| 地址 | varchar50 | 否 | 否 | 是 | 否 | 否 |
| 电话 | varchar50 | 否 | 否 | 是 | 否 | 否 |
表2 sign表结构
| 字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
| -------- | ------------- | ---- | ---- | ---- | ---- | ---- |
| 序号 | int11 | 是 | 否 | 是 | 是 | 否 |
| 姓名 | varchar20 | 否 | 否 | 是 | 否 | 否 |
| 学校 | varchar50 | 否 | 否 | 是 | 否 | 否 |
| 报名学校 | varchar50 | 否 | 否 | 是 | 否 | 否 |
表3 stu_mark表结构
| 字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
| ------ | ------------- | ---- | ---- | ---- | ---- | ---- |
| 序号 | int11 | 是 | 否 | 是 | 是 | 否 |
| 姓名 | varchar20 | 否 | 否 | 是 | 否 | 否 |
| 分数 | int11 | 否 | 否 | 是 | 否 | 否 |
表4 stu表内容
| 序号 | 姓名 | 地址 | 电话 |
| ---- | ---- | ---- | ------------- |
| 1 | 小王 | 河南 | 0317-12345678 |
| 2 | 小李 | 河北 | 13889072345 |
| 3 | 小田 | 河南 | 0317-12345670 |
表5 sign表内容
| 序号 | 姓名 | 学校 | 报名学校 |
| ---- | ---- | ----- | -------- |
| 1 | 小王 | 中学1 | 北大 |
| 2 | 小李 | 中学2 | 清华 |
| 3 | 小田 | 中学3 | 清华 |
表6 stu_mark表中的记录
| 序号 | 姓名 | 分数 |
| ---- | ---- | ---- |
| 1 | 小王 | 80 |
| 2 | 小李 | 71 |
| 3 | 小田 | 70 |
## 2、案例操作过程
1登录MySQL数据库。
```mysql
mysql -u root -p
```
截图:
![image-20220405094500300](https://lsky.hhdxw.top/imghub/img/image-20220405094500300.png)
2创建数据库stu_exam并选择使用此数据库。
```mysql
create database stu_exam;
use stu_exam;
```
截图:
![image-20220405094539472](https://lsky.hhdxw.top/imghub/img/image-20220405094539472.png)
3按照表1、表2、表3创建表创建成功后用desc查看表结构。
```mysql
create table stu(
序号 int(11) not null unique,
姓名 varchar(20) not null,
地址 varchar(50) not null,
电话 varchar(50) not null,
primary key(序号)
);
```
```mysql
create table sign(
序号 int(11) not null unique,
姓名 varchar(20) not null,
学校 varchar(50) not null,
报名学校 varchar(50) not null,
primary key(序号)
);
```
```mysql
create table stu_mark(
序号 int(11) not null unique,
姓名 varchar(20) not null,
分数 int(11) not null,
primary key(序号)
);
```
截图:
![image-20220405160214782](https://lsky.hhdxw.top/imghub/img/image-20220405160214782.png)
4将表4、表5、表6的记录分别插入三个表中。
```mysql
insert into stu values
(1,'小王','河南','0317-12345678'),
(2,'小李','河北','13889072345'),
(3,'小田','河南','0317-12345670');
```
```mysql
insert into sign values
(1,'小王','中学1','北大'),
(2,'小李','中学2','清华'),
(3,'小田','中学3','清华');
```
```mysql
insert into stu_mark values
(1,'小王',80),
(2,'小李',71),
(3,'小田',70);
```
截图:
![image-20220405161410429](https://lsky.hhdxw.top/imghub/img/image-20220405161410429.png)
5创建考上北大的学生视图视图中包含序号、姓名、分数和报名学校
```mysql
create view 北大
(序号,姓名,分数,报名学校) as
select stu_mark.序号,stu_mark.姓名,stu_mark.分数,sign.报名学校
from stu_mark,sign
where stu_mark.序号=sign.序号 and sign.报名学校='北大' and stu_mark.分数>=41;
```
截图:
![image-20220406200815038](https://lsky.hhdxw.top/imghub/img/image-20220406200815038.png)
6创建考上清华的学生视图视图中包含序号、姓名、分数和报名学校
```mysql
create view 清华
(序号,姓名,分数,报名学校) as
select stu_mark.序号,stu_mark.姓名,stu_mark.分数,sign.报名学校
from stu_mark,sign
where stu_mark.序号=sign.序号 and sign.报名学校='清华' and stu_mark.分数>=40;
```
截图:
![image-20220406201123556](https://lsky.hhdxw.top/imghub/img/image-20220406201123556.png)
7小田的成绩在录入的时候录入错误多录了50分对其录入成绩进行更新。
```mysql
update 清华 set 分数=分数-50 where 姓名='小田';
```
截图:
![image-20220405163009861](https://lsky.hhdxw.top/imghub/img/image-20220405163009861.png)
8查询更新过后的视图和表的情况。
```mysql
select * from 清华;
select * from stu_mark;
```
截图:
![image-20220406201156824](https://lsky.hhdxw.top/imghub/img/image-20220406201156824.png)
9查看视图的创建信息。
```mysql
show table status like '北大';
show table status like '清华';
```
截图:
![image-20220405163228521](https://lsky.hhdxw.top/imghub/img/image-20220405163228521.png)
10删除创建的视图。
```mysql
drop view 北大;
drop view if exists 清华;
```
截图:
![image-20220405163346868](https://lsky.hhdxw.top/imghub/img/image-20220405163346868.png)