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

目录

一.视图

[1.1 含义](#1.1 含义)

[1.2 操作](#1.2 操作)

二.案例

三.思维导图


一.视图

1.1 含义

虚拟表,查询方面和普通表一样使用。

1.2 操作

1.创建视图:

  • create or replace view 视图名
    as
    查询语句;

2.视图的修改:

  • 方式1
    • create or replace view 视图名
      as
      查询语句;
  • 方式2
    • alter view 视图名
      as
      查询语句;

3.删除视图:

  • drop view 视图名,视图名,...

4.查看视图:

  • DESC 视图名; ------ 查看视图相关字段
  • SHOW CREATE VIEW 视图名; ------ 查看视图相关语句

二.案例

**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 "课程的情况

  • 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 )

  • 连接方式:外连接
  • 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 "课程的情况

  • 考核:子查询
  • 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 cid = '02'

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

  • 考核:聚合函数意味着分组,外连接
  • SELECT
    s.sid,
    s.sname,
    ROUND( avg( sc.score ), 2 ) n
    FROM
    t_mysql_student s
    LEFT JOIN t_mysql_score sc ON s.sid = sc.sid
    GROUP BY
    s.sid,
    s.sname
    HAVING
    n >= 60

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

  • 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 )

  • 考核:聚合函数,外连接
  • 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 '李%'

三.思维导图

相关推荐
Miqiuha3 分钟前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐1 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
Java探秘者5 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2301_786964365 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase
苹果醋35 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
阿维的博客日记6 小时前
图文并茂解释水平分表,垂直分表,水平分库,垂直分库
数据库·分库分表
wrx繁星点点7 小时前
事务的四大特性(ACID)
java·开发语言·数据库
小小娥子7 小时前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK7 小时前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
计算机学姐8 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis