MySQL之视图&外连接、内连接和子查询的使用

一. 视图

   1.1 含义


        视图(view)是一种虚拟存在的表,是一个逻辑表,视图中的数据并不在数据库中实际存在。 行和列数据来自我们定义视图的查询中使用的表,并且是在使用视图时动态生成的。作为一个select语句保存在数据字典中的,通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
 

1.2 视图的基本语法

创建视图

create view 视图名
as
查询语句

修改视图

方法一:
create view 视图名
as
查询语句;

方式2
alter view 视图名
as
查询语句;

删除视图

drop view 视图名,视图名,...;

查看视图

DESC 视图名(查看视图相关字段)


SHOW CREATE VIEW 视图名(查看视图相关语句)

二,实操

2.1,创建

MySQL之视图&外连接、内连接和子查询的使用_第1张图片

MySQL之视图&外连接、内连接和子查询的使用_第2张图片

查看视图相关字段

MySQL之视图&外连接、内连接和子查询的使用_第3张图片

三. 外连接、内连接和子查询的使用

  • 01)查询" 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 
	AND t1.score > t2.score

MySQL之视图&外连接、内连接和子查询的使用_第4张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第5张图片4

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

SELECT *  FROM
	( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1
LEFT JOIN 
	( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
ON t1.sid = t2.sid

MySQL之视图&外连接、内连接和子查询的使用_第6张图片

这种查询方式看着不太友好,所以还有另外的一种,加上学生的信息: 

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

MySQL之视图&外连接、内连接和子查询的使用_第7张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第8张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第9张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第10张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第11张图片

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

MySQL之视图&外连接、内连接和子查询的使用_第12张图片

四,思维导图

你可能感兴趣的:(mysql,数据库)