MySQL之视图&案例

目录

一.视图

1.1 含义

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

1.2 操作

1.创建视图

create view 视图名

as

查询语句;

2.视图的修改

方式一:

create or replace view 视图名

as

查询语句

方式二:

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 sc.cid = '02'

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

考核:聚合函数意味着分组,外链接

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表存在成绩的学生信息

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

三.思维导图

相关推荐
IT19955 小时前
Fail2Ban 防护 MySQL 实战|登录失败 3 次,IP 封禁 24 小时
数据库·mysql
夕除5 小时前
redis--IO 多路复用(select + poll)
数据库·sql
paopaokaka_luck8 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
lzhdim9 小时前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来9 小时前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹9 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB10 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航10 小时前
PostgreSQL的备份与恢复
数据库·postgresql
这个DBA有点耶10 小时前
从 MySQL 到时序数据库:我帮朋友做迁移的完整记录
数据库·架构·dba
泡海椒10 小时前
深度解析JQuick-SQL AST到逻辑计划转换机制|分布式SQL原理
数据库·分布式·sql