MySQL之视图&内连接、外连接、子查询

一、视图

1.1 含义

虚拟表,和普通表一样使用

视图(view)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。

2.1 视图的基本语法

创建视图

create view 视图名
as
查询语句;

查看视图有两种方式

方式1:
这里看到的是视图的字段
DESC 视图名;
方式2:
这里可以看到视图的创表语句
SHOW CREATE VIEW 视图名

视图的修改

修改视图有两种方式

方式1:
创建视图的时候你可以更改视图
CREATE OR REPLACE VIEW
AS
查询语句;

方式2:
ALTER VIEW 视图名
AS
查询语句;

删除视图

DROP 视图名

二、案例

01)查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:内连接
  3.行转列:流程函数

  • SELECT
     s.*,
      (CASE WHEN t1.cid='01' then t1.score END) 语文,
        (CASE WHEN t2.cid='02' then t2.score END) 数学
    FROM
        t_mysql_student s,
        ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
        ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
    WHERE
        s.sid = t1.sid 
        AND t1.sid = t2.sid 
        AND t1.score > t2.score

02)查询同时存在" 01 "课程和" 02 "课程的情况 

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:内连接
  3.行转列:流程函数

  • SELECT
    s.*,
      (CASE WHEN t1.cid='01' then t1.score END) 语文,
        (CASE WHEN t2.cid='02' then t2.score END) 数学
    FROM
        t_mysql_student s,
        ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
        ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
    WHERE
        s.sid = t1.sid 
        AND t1.sid = t2.sid

 03)查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:外连接
  3.行转列:流程函数

  • SELECT
    s.*,
        (CASE WHEN t1.cid='01' then t1.score END) 语文,
        (CASE WHEN t2.cid='02' then t2.score END) 数学
    FROM
        t_mysql_student s INNER JOIN 
        ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1
        ON s.sid = t1.sid LEFT JOIN 
        ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
        ON t1.sid = t2.sid

04)查询不存在" 01 "课程但存在" 02 "课程的情况

  1.下面代码使用的是子查询

  •  SELECT
    s.*,
        (CASE WHEN sc.cid='01' then sc.score END) 语文,
        (CASE WHEN sc.cid='02' then sc.score END) 数学 
    FROM
        t_mysql_student s,
        t_mysql_score sc 
    WHERE
        s.sid = sc.sid and 
        s.sid NOT IN ( SELECT sid FROM t_mysql_score WHERE cid = '01' )
    AND sc.cid = '02'

05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:外连接

  • SELECT
        s.sid,s.sname,
        ROUND(avg(sc.score),2) 平均分数
    FROM
        t_mysql_student s LEFT JOIN 
        t_mysql_score sc on s.sid = sc.sid
    GROUP BY s.sid,s.sname
    HAVING 平均分数 >= 60 

06)查询在t_mysql_score表存在成绩的学生信息

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:内连接

  • SELECT
    s.sid,s.sname
    FROM
        t_mysql_student s INNER JOIN
        t_mysql_score sc ON s.sid = sc.sid
    GROUP BY s.sid,s.sname

07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null ) 

  1.涉及表:t_mysql_student,t_mysql_score
  2.连接方式:外连接

  • SELECT
        s.sid,s.sname,
        count(sc.score) 选课总数,
        sum(sc.score) 总成绩
    FROM
        t_mysql_student s
        LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
    GROUP BY
        s.sid,
        s.sname 

08)查询「李」姓老师的数量

  • SELECT
        count(*) 
    FROM
        t_mysql_teacher 
    WHERE
        tname LIKE '%李%' 

三、思维导图

相关推荐

  1. Mysql查询 , 连接

    2024-01-07 06:30:06       31 阅读
  2. MYSQL多表关联查询详解(连接

    2024-01-07 06:30:06       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 06:30:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 06:30:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 06:30:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 06:30:06       20 阅读

热门阅读

  1. MFC与Qt多个控件响应统一响应消息处理

    2024-01-07 06:30:06       36 阅读
  2. 系统安全的加固

    2024-01-07 06:30:06       39 阅读
  3. 1.6 力扣回溯中等

    2024-01-07 06:30:06       38 阅读
  4. MFC如何动态创建button按钮并添加点击事件

    2024-01-07 06:30:06       35 阅读
  5. MFC CRuntimeClass 学习

    2024-01-07 06:30:06       33 阅读
  6. python使用隐马尔可夫模型识别波形数据MFCC特征

    2024-01-07 06:30:06       38 阅读
  7. vim常用命令总结

    2024-01-07 06:30:06       35 阅读
  8. vuetify 回到顶部

    2024-01-07 06:30:06       36 阅读
  9. Vue 进阶面试题

    2024-01-07 06:30:06       31 阅读