当前位置: 首页 > article >正文

MySQL——视图(三)应用实例——视图的应用

        本节将通过一个应用案例让读者熟练掌握在实际开发中创建并使用视图的完整过程。

1.案例的目的

        掌握视图的创建、查询、更新和删除操作。

        假如有来自河北和山东的三个理科学生报考北京大学(Peking University)和清华大学(Tsinghua University),现在需要对其考试的结果进行查询和管理,清华大学的录取分数线为 725,北京大学的录取分数线为 720。需要创建三个表对学生的信息进行管理,这三个表分别是学生表、报名表和成绩表,其中这三个表的主键(sid)是统一的。

stu表结构

字段名数据结构主键外键非空唯一自增
s_idINT(11)
s_nameVARCHAR(20)
addrVARCHAR(50)
telVARCHAR(50)

 sign表结构

字段名数据结构主键外键非空唯一自增
s_idINT(11)
s_nameVARCHAR(20)
s_schVARCHAR(50)
s_sign_schVARCHAR(50)

stu_mark 表结构

字段名数据结构主键外键非空唯一自增
s_idINT(11)
s_nameVARCHAR(20)
markINT(11)

stu 表数据

s_ids_nameaddrtel
1ZhangPengHeibei13889075861
2LiXiaoShandong13953508223
3HuangYunShandong13905350996

sign 表数据

s_ids_names_schs_sign_sch
1ZhangPengHigh School1Peking University
2LiXiaoHigh School2Peking University
3HuangYunHigh School3Tsing University


mark 表数据

s_ids_namemark
1ZhangPeng730
2LiXiao725
3HuangYun736

 

2.案例操作过程

        (1)创建学生表 stu,插人三条记录。登录数据库后进人 chapter07 数据库,创建学生表,SQL语句如下所示:

mysql> CREATE TABLE stu(
    -> s_id INT(11) PRIMARY KEY,
    -> s_name VARCHAR(20) NOT NULL,
    -> addr VARCHAR(50) NOT NULL,
    -> tel VARCHAR(50) NOT NULL
    -> );
Query OK, 0 rows affected (0.05 sec)

        上述 SQL语句执行成功后,表示学生表 stu 创建成功,这时,使用 INSERT 语句向表中插入数据,SQL语句如下所示:

mysql> INSERT INTO stu
    -> VALUES (1,'zhangPeng','Hebei','13889075861'),
    -> (2,'Lixiao','shandong','13953508223'),
    -> (3,'HuangYun','Shandong','13905350996');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

        上述 INSERT 语句执行成功后,向表中插入了三条记录,分别是学生的学号、姓名所在省份和电话号码,这时,使用 SELECT 语句查看 stu 表中的数据信息,查询结果如下所示:

mysql> SELECT * FROM stu;
+------+-----------+----------+-------------+
| s_id | s_name    | addr     | tel         |
+------+-----------+----------+-------------+
|    1 | zhangPeng | Hebei    | 13889075861 |
|    2 | Lixiao    | shandong | 13953508223 |
|    3 | HuangYun  | Shandong | 13905350996 |
+------+-----------+----------+-------------+
3 rows in set (0.00 sec)

        从查询结果可以看出,在当前的数据库中创建了一个 stu表,并成功插入了三条记录,stu 表的主键为s_id。

(2)创建报名表 sign,插人三条记录。

        首先创建报名表 sign,SQL 语句如下所示:

mysql> CREATE TABLE sign(
    -> s_id INT(11) PRIMARY KEY,
    -> s_name VARCHAR(20) NOT NULL,
    -> s_sch VARCHAR(50) NOT NULL,
    -> s_sign_sch VARCHAR(50) NOT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)

        上述 SQL语句执行成功后,表示报名表 sign 创建成功,接下来,使用 INSERT 语句向 sign 表中插人数据,SQL语句如下所示:

mysql> INSERT INTO sign
    -> VALUES (1,'ZhangPeng','High School1','Peking University'),
    -> (2,'LiXiao','High sehool2','Peking University'),
    -> (3,'HuangYun','High School3','Tsinghua University');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

        上述 SQL语句执行成功后,向表中插入了三条记录,分别是学生的学号、姓名、所在学校和报考的学校名称,这时,使用 SELECT 语句查看 sign 表中的数据信息,查询结果如下所示:

mysql> SELECT * FROM sign;
+------+-----------+--------------+---------------------+
| s_id | s_name    | s_sch        | s_sign_sch          |
+------+-----------+--------------+---------------------+
|    1 | ZhangPeng | High School1 | Peking University   |
|    2 | LiXiao    | High sehool2 | Peking University   |
|    3 | HuangYun  | High School3 | Tsinghua University |
+------+-----------+--------------+---------------------+
3 rows in set (0.00 sec)

        从查询结果可以看出,sign表创建成功,同时向表中插入了三条记录,sign 表的主键为s_id。

(3)创建成绩表 stu_mark,插入三条记录创建成绩表,SQL 语句如下所示:

mysql> CREATE TABLE stu_mark(
    -> s_id INT(11) PRIMARY KEY,
    -> s_name VARCHAR(20) NOT NULL,
    -> mark INT NOT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)

        上述 SQL语句执行成功后,表示成绩表 stu_mark 创建成功,这时,使用 INSERT 语句向表中插入数据,执行结果如下所示:

mysql> INSERT INTO stu_mark VALUES(1,'ZhangPeng',730),(2,'LiXiao',725),(3,'HuangYun',736);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

        上述 SQL语句执行成功后,向表中插人了三条记录,分别是学生的学号、姓名和成绩,这时,使用 SELECT 语句查看 stu mark 表中的数据信息,查询结果如下所示:

mysql> SELECT * FROM stu_mark;;
+------+-----------+------+
| s_id | s_name    | mark |
+------+-----------+------+
|    1 | ZhangPeng |  730 |
|    2 | LiXiao    |  725 |
|    3 | HuangYun  |  736 |
+------+-----------+------+
3 rows in set (0.00 sec)

        从查询结果可以看出,stu_mark 表创建成功,同时向表中插人了三条记录,stu_mark表的主键为s_id。

(4)创建考上北京大学(Peking University)的学生视图。

        视图的名称为 beida,视图的内容包含考上北大的学生学号、姓名、成绩和报考学校名称4个字段,创建 beida 视图的 SQL 语句如下所示:

mysql> CREATE
    -> VIEW beida(id,name,mark,sch)
    -> AS
    -> SELECT stu_mark.s_id,stu_mark.s_name,stu_mark.mark,sign.s_sign_sch
    -> FROM stu_mark,sign
    -> WHERE stu_mark.s_id=sign.s_id
    -> AND stu_mark.mark >= 720
    -> AND sign.s_sign_sch='PeKing University';
Query OK, 0 rows affected (0.01 sec)

        上述 SQL语句执行成功后,接下来,使用查询语句查看满足条件的学生信息,执行结果如下所示:

mysql> SELECT * FROM beida;
+----+-----------+------+-------------------+
| id | name      | mark | sch               |
+----+-----------+------+-------------------+
|  1 | ZhangPeng |  730 | Peking University |
|  2 | LiXiao    |  725 | Peking University |
+----+-----------+------+-------------------+
2 rows in set (0.00 sec)

        从上述查询结果可以看出,符合北京大学录取条件的有两名学员,分别是ZhangPeng 和 LiXiao,他们的成绩分别是 730 分和 725 分。

(5)创建考上清华大学(Tsinghua University)的学生视图。

        视图的名称为 qinghua,视图的内容包含考上清华的学生学号、姓名、成绩和报考学校名称4个字段,创建 qinghua 视图的 SQL 语句如下所示:

mysql> CREATE
    -> VIEW qinghua(id,name,mark,sch)
    -> AS
    -> SELECT stu_mark.s_id,stu_mark.s_name,stu_mark.mark,sign.s_sign_sch
    -> FROM stu_mark,sign
    -> WHERE stu_mark.s_id=sign.s_id
    -> AND stu_mark.mark >= 725
    -> AND sign.s_sign_sch='Tsinghua University';
Query OK, 0 rows affected (0.00 sec)

        上述 SQL语句执行成功后,接下来使用查询语句查看满足条件的学生信息,执行结果如下所示:

mysql> SELECT * FROM qinghua;
+----+----------+------+---------------------+
| id | name     | mark | sch                 |
+----+----------+------+---------------------+
|  3 | HuangYun |  736 | Tsinghua University |
+----+----------+------+---------------------+
1 row in set (0.00 sec)

        从上述查询结果可以看出,符合清华大学录取条件的学员是HuangYun,他的成绩是 736分。

(6)更新视图 qinghua。

        HuangYun 的成绩在录人的时候录入错误,多录了10分,接下来对 HuangYun 的成绩进行修改,减去多录入的10分。在视图中可以使用UPDATE语句对基本表 stu_mark的数据进行更新,更新的 SQL 语句如下所示:

mysql> UPDATE stu_mark SET mark=mark-10 WHERE stu_mark.s_name='HuangYun';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

        上述 SQL 语句执行成功后,表示 stu_mark 表修改成功,这时,使用查询语句查看修改后的 stu_mark 表的数据,执行结果如下所示:

mysql> SELECT * FROM stu_mark;
+------+-----------+------+
| s_id | s_name    | mark |
+------+-----------+------+
|    1 | ZhangPeng |  730 |
|    2 | LiXiao    |  725 |
|    3 | HuangYun  |  726 |
+------+-----------+------+
3 rows in set (0.00 sec)

        从上述查询结果可以看出,s_name 值为 HuangYun 的学生成绩减去了多录的 10分,变为 726 分。接下来查看 qinghua 视图表中的信息情况,执行结果如下所示:

mysql> SELECT * FROM qinghua;
+----+----------+------+---------------------+
| id | name     | mark | sch                 |
+----+----------+------+---------------------+
|  3 | HuangYun |  726 | Tsinghua University |
+----+----------+------+---------------------+
1 row in set (0.00 sec)

        从上述的查询结果可以看出,HuangYun 同学的信息依然在 qinghua 视图中,因为清华大学的录取分数线是 725 分,虽然 HuangYun 同学减去了多录的 10 分,但依然以超出分数线一分的成绩,顺利被清华大学录取。

 


http://www.kler.cn/a/297916.html

相关文章:

  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 【软件设计】常用设计模式--单例模式
  • 4G工业路由器:SR700的智能连接解决方案
  • 详细讲解hive on tez中各个参数作用,以及如何优化sql
  • iOS——通知协议代理
  • 两个实用小函数--多线程装饰器和自动记录退出程序
  • 极狐GitLab 新一代容器镜像仓库正式上线啦!
  • 【OpenCV-图像梯度】Scharr算子和laplacian算子
  • 闲鱼放弃成为淘宝复刻版了吗?上线学生专属交易交流版块“学生鱼”频道
  • 自己动手实现mybatis的底层框架(不用动态代理直接用执行器、用动态代理自己实现。图文分析!)
  • nohup与
  • 【Redis】Redis 典型应用 - 缓存 (Cache) 原理与策略
  • 基于单片机控制的无线烟雾检测报警系统
  • 手机变身无线话筒
  • 【大数据】Hadoop里的“MySQL”——Hive,干货满满
  • DDR3 SDRAM操作流程
  • Redis 集群会有写操作丢失吗?为什么?
  • LeetCode_sql_day21(1440.计算布尔表达式的值)
  • 机器学习 第8章 集成学习
  • 可扩展性、可维护性和可复用性