【MySQL】视图,15道常见面试题---含考核思路详细讲解

目录

一 视图

1.1视图是什么 

1.2 创建视图

1.3 查看视图(两种)

1.4 修改视图(两种)

1.5 删除视图

二 外连接&内连接&子查询介绍

2.1 外连接

2.2 内连接

2.3 子查询

三 外连接&内连接&子查询案例

3.1 了解表结构与数据

3.2 15道常见面试题

四 思维导图 



一 视图

1.1视图是什么 

视图是在数据库中定义的虚拟表。它是一个基于一个或多个实际表的查询结果集可以像实际表一样被查询和操作,视图本身并不存储数据,它只是通过定义一个查询。视图可以看作是一个动态生成的数据表,其内容是从其他表中选择、过滤和计算得到的。

视图通过使用SQL查询语句来定义,这些查询语句可以包括与一个或多个表的连接、条件过滤、列计算、聚合函数等操作。在视图定义中,我们可以指定要在视图中包含的列和行,以及对这些列进行何种计算和处理

1.2 创建视图

语句

create view 视图名
as
查询语句

案例

① 创建视图create view V_stu_sc
as 
select 
stu.*,sc.cid,sc.score
from t_mysql_student stu,t_mysql_score sc
where stu.sid=sc.sid

1.3 查看视图(两种)

语句:

① desc  视图名;
② show create view 视图名;

1.4 修改视图(两种)

① 

create or replace view 视图名

as

查询语句;

② 

alter view 视图名

as

查询语句;

1.5 删除视图

语句:

drop view 视图名

二 外连接&内连接&子查询介绍

2.1 外连接

    外连接分为左外连接(Left Outer Join)和右外连接(Right Outer Join)。左外连接会返回左表中的所有记录以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果集中对应的字段将为NULL。右外连接与左外连接相反,会返回右表中的所有记录以及左表中满足连接条件的记录

左外连接(LEFT JOIN):

      返回左表中的所有记录以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果集中对应的字段将为NULL

右外连接(RIGHT JOIN):

          返回右表中的所有记录以及左表中满足连接条件的记录。如果左表中没有匹配的记录,则结果集中对应的字段将为NULL

语句:

-- 左外连接  
SELECT 列名  
FROM 表1  
LEFT OUTER JOIN 表2  
ON 表1.列名 = 表2.列名;  -- 右外连接  
SELECT 列名  
FROM 表1  
RIGHT OUTER JOIN 表2  
ON 表1.列名 = 表2.列名;

2.2 内连接

      内连接是最常见的连接类型,它会返回两个表中满足连接条件的记录。只有当两个表中的指定字段具有匹配的值时,记录才会被包含在结果集中

语句:

SELECT 列名  
FROM 表1  
INNER JOIN 表2  
ON 表1.列名 = 表2.列名;

2.3 子查询

      子查询可以在一个查询中嵌套另一个查询,通常用于生成另一个查询的派生数据。子查询可以出现在SELECT、FROM或WHERE子句中,根据其位置和用途,子查询可以有多种形式。子查询可以在查询的列名、条件或排序中使用

-- 子查询在SELECT子句中  
SELECT 列名, (子查询) AS 别名  
FROM 表名;  -- 子查询在FROM子句中作为派生表  
SELECT 派生表.列名  
FROM (子查询) AS 派生表;  -- 子查询在WHERE子句中作为条件  
SELECT 列名  
FROM 表名  
WHERE 列名 = (子查询);

三 外连接&内连接&子查询案例

3.1 了解表结构与数据

首先先了解表结构,有利于我们后续查询做题

①学生表-t_mysql_student 
   sid 学生编号,sname 学生姓名,sage 学生年龄,ssex 学生性别

②教师表-t_mysql_teacher
   tid 教师编号,tname 教师名称

③ 课程表-t_mysql_course
   cid 课程编号,cname 课程名称,tid 教师名称

④ 成绩表-t_mysql_score
    sid 学生编号,cid 课程编号,score 成绩

所有表数据:

-- 学生表
insert into t_mysql_student values('01' , '赵雷' , '1990-01-01' , '男');
insert into t_mysql_student values('02' , '钱电' , '1990-12-21' , '男');
insert into t_mysql_student values('03' , '孙风' , '1990-12-20' , '男');
insert into t_mysql_student values('04' , '李云' , '1990-12-06' , '男');
insert into t_mysql_student values('05' , '周梅' , '1991-12-01' , '女');
insert into t_mysql_student values('06' , '吴兰' , '1992-01-01' , '女');
insert into t_mysql_student values('07' , '郑竹' , '1989-01-01' , '女');
insert into t_mysql_student values('09' , '张三' , '2017-12-20' , '女');
insert into t_mysql_student values('10' , '李四' , '2017-12-25' , '女');
insert into t_mysql_student values('11' , '李四' , '2012-06-06' , '女');
insert into t_mysql_student values('12' , '赵六' , '2013-06-13' , '女');
insert into t_mysql_student values('13' , '孙七' , '2014-06-01' , '女');-- 教师表
insert into t_mysql_teacher values('01' , '张三');
insert into t_mysql_teacher values('02' , '李四');
insert into t_mysql_teacher values('03' , '王五');-- 课程表
insert into t_mysql_course values('01' , '语文' , '02');
insert into t_mysql_course values('02' , '数学' , '01');
insert into t_mysql_course values('03' , '英语' , '03');-- 成绩表
insert into t_mysql_score values('01' , '01' , 80);
insert into t_mysql_score values('01' , '02' , 90);
insert into t_mysql_score values('01' , '03' , 99);
insert into t_mysql_score values('02' , '01' , 70);
insert into t_mysql_score values('02' , '02' , 60);
insert into t_mysql_score values('02' , '03' , 80);
insert into t_mysql_score values('03' , '01' , 80);
insert into t_mysql_score values('03' , '02' , 80);
insert into t_mysql_score values('03' , '03' , 80);
insert into t_mysql_score values('04' , '01' , 50);
insert into t_mysql_score values('04' , '02' , 30);
insert into t_mysql_score values('04' , '03' , 20);
insert into t_mysql_score values('05' , '01' , 76);
insert into t_mysql_score values('05' , '02' , 87);
insert into t_mysql_score values('06' , '01' , 31);
insert into t_mysql_score values('06' , '03' , 34);
insert into t_mysql_score values('07' , '02' , 89);
insert into t_mysql_score values('07' , '03' , 98);

3.2 15道常见面试题

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

考核:内连接
涉及表:t_mysql_course,t_mysql_score

语句:

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

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

考核:内连接

涉及表:t_mysql_score   

为了让数据更加直观加上了优化表

优化表:t_mysql_student

语句:

SELECTs.*,( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROMt_mysql_student s,( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
WHEREs.sid = t1.sid AND t1.sid = t2.sid

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

考核:外连接中的左外连接

涉及表:t_mysql_scor    t_mysql_student

语句:

SELECTs.*,( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROMt_mysql_student sINNER JOIN ( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1 ON s.sid = t1.sidLEFT JOIN ( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 ON t1.sid = t2.sid


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

考核:外连接中的右外连接

涉及表:t_mysql_scor    t_mysql_student

语句:

SELECTs.*,( CASE WHEN sc.cid = '01' THEN sc.score END ) 语文,( CASE WHEN sc.cid = '02' THEN sc.score END ) 数学 
FROMt_mysql_student s,t_mysql_score sc 
WHEREs.sid = sc.sid AND s.sid NOT IN ( SELECT sid FROM t_mysql_score WHERE cid = '01' ) AND sc.cid = '02'

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

考核:聚合函数=》 分组,筛选  外连接中的左外连接

涉及表:t_mysql_student    t_mysql_score

语句:

SELECTs.sid,s.sname,round( avg( sc.score ), 2 ) 平均数 
FROMt_mysql_student sLEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BYs.sid,s.sname 
HAVING平均数 >= 60


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

考核:聚合函数》分组,外连接的左外连接

语句:

SELECTs.sid,s.sname 
FROMt_mysql_student sLEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BYs.sid,s.sname


 

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

考核:聚合函数》分组,求和,总数。外连接中的左外连接

语句:

SELECTs.sid,s.sname,count( sc.score ) 选课总数,sum( sc.score ) 总成绩 
FROMt_mysql_student sLEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BYs.sid,s.sname

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

考核:聚合函数》总数。like的使用

语句:

select count(*) from t_mysql_teacher where tname like '李%'

09)查询学过「张三」老师授课的同学的信息

sql语句:

SELECTs.*,c.cname,t.tname,sc.score 
FROMt_mysql_course c,t_mysql_student s,t_mysql_teacher t,t_mysql_score sc 
WHEREt.tid = c.tid AND c.cid = sc.cid AND sc.sid = s.sid AND t.tname = '张三'

10)查询没有学全所有课程的同学的信息
sql语句:

SELECTs.sid,s.sname,count( sc.score ) n 
FROMt_mysql_student sLEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BYs.sid,s.sname 
HAVINGn < (SELECTcount(*) FROMt_mysql_course)

11)查询没学过"张三"老师讲授的任一门课程的学生姓名

sql语句:

SELECTs.sid,s.sname 
FROMt_mysql_score sc,t_mysql_student s 
WHEREs.sid = sc.sid AND sc.cid NOT IN ( SELECT cid FROM t_mysql_course c, t_mysql_teacher t WHERE c.tid = t.tid AND t.tname = '张三' ) 
GROUP BYs.sid,s.sname

12)查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

sql语句:

SELECT s.sid,
s.sname,avg(sc.score) n
from
t_mysql_student s,
t_mysql_score sc
where s.sid=sc.sid
and sc.score<60
GROUP BY s.sid,
s.sname

13)检索" 01 "课程分数小于 60,按分数降序排列的学生信息

sql语句:

SELECTs.sid,s.*,sc.score 
FROMt_mysql_student s,t_mysql_score sc 
WHEREs.sid = sc.sid AND sc.cid = '01' AND sc.score < 60 
ORDER BYsc.score desc

14)按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 

① case when 

② if

sql语句:

① case语法:
SELECTs.sid,s.sname ,sum((case when sc.cid='01' then sc.score end))语文,sum(    (case when sc.cid='02' then sc.score end))数学,sum((case when sc.cid='03' then sc.score end))英语,ROUND(avg(sc.score),2) 
FROMt_mysql_score scRIGHT JOIN t_mysql_student s ON sc.sid = s.sid 
GROUP BYs.sid,s.sname② if语法:SELECTs.sid,s.sname ,sum(if(sc.cid='01',sc.score,0))语文,sum(if(sc.cid='02',sc.score,0))数学,sum(if(sc.cid='03',sc.score,0))英语,ROUND(avg(sc.score),2) 
FROMt_mysql_score scRIGHT JOIN t_mysql_student s ON sc.sid = s.sid 
GROUP BYs.sid,s.sname

15)查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

sql语句:

SELECTc.cid,c.cname,count(sc.sid) 人数,max(sc.score) 最高分,min(sc.score) 最低分,ROUND(avg(sc.score),2) 平均分 ,CONCAT(ROUND(sum(if(sc.score>=90,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  优秀率,CONCAT(ROUND(sum(if(sc.score>=80 and sc.score<90,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  优良率,CONCAT(ROUND(sum(if(sc.score>=70 and sc.score<80,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%')  中等率,CONCAT(ROUND(sum(if(sc.score>=60,1,0))/(SELECT count(1) from t_mysql_student)*100,2),'%') 及格率FROMt_mysql_score scLEFT JOIN t_mysql_course c ON sc.cid = c.cid GROUP BYc.cid,c.cname

四 思维导图 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】GROUP BY 后面直接使用数字的写法(简写)

力扣题 1、题目地址 1699. 两人之间的通话次数 2、模拟表 表&#xff1a;Calls Column NameTypefrom_idintto_idintdurationint 该表没有主键(具有唯一值的列)&#xff0c;它可能包含重复项。该表包含 from_id 与 to_id 间的一次电话的时长。from_id ! to_id 3、要求 编…

linux磁盘总结

什么是page_cache linux读写磁盘&#xff0c;如果都是采用directIO的话&#xff0c;效率太低&#xff0c;所以我们在读写磁盘上加了一层缓存&#xff0c;page_cache。读的话&#xff0c;如果page_cache有的话&#xff0c;就不用向磁盘发出请求。写的话&#xff0c;也直接写入的…

C# 使用多线程,关闭窗体时,退出所有线程

this.Close(); 只是关闭当前窗口&#xff0c;若不是主窗体的话&#xff0c;是无法退出程序的&#xff0c;另外若有托管线程&#xff08;非主线程&#xff09;&#xff0c;也无法干净地退出&#xff1b;Application.Exit(); 强制所有消息中止&#xff0c;退出所有的窗体&…

移动神器RAX3000M路由器不刷固件变身家庭云之六(高级应用):设置https

本系列文章&#xff1a; 移动神器RAX3000M路由器变身家庭云之一&#xff1a;开通SSH&#xff0c;安装新软件包 移动神器RAX3000M路由器变身家庭云之二&#xff1a;安装vsftpd 移动神器RAX3000M路由器变身家庭云之三&#xff1a;外网访问家庭云 移动神器RAX3000M路由器变身家庭云…

nginx和CDN应用

一、代理的工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#xff0c;以便下次请求相同的数据时快速响应。 二、代理服务器的…

Kali安装Xrdp结合内网穿透实现无公网ip远程访问系统桌面

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…

【C语言】计算水仙花数

水仙花数&#xff0c;也被称为阿姆斯特朗数&#xff0c;是指一个 n 位数 (n≥3)&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。例如&#xff0c;153 是一个水仙花数&#xff0c;因为 1^3 5^3 3^3 153。 代码&#xff1a; /* 计算100 - 999 之间的水仙花数 */#in…

vscode在node环境中如何调试

1.在vscode编辑器中&#xff0c;点击左侧的小图标。创建launch.js文件&#xff08;这个文件创建好以后会在项目的.vscode文件下&#xff09; 配置文件内容如下&#xff0c;我们只需要关注program字段&#xff0c;这是入口文件&#xff0c;写绝对路径就行 {// 使用 IntelliS…

用Swift库写爬虫采集统计局公开数据

国家统计局公开的信息还是比较真实准确的&#xff0c;他可以给一个行业带来一些参考性意见。因此&#xff0c;有公司找上我&#xff0c;让我爬取一些行业数据&#xff0c;因为是老客户了也就没推辞&#xff0c;但是因为最近也比较忙&#xff0c;也就利用晚上时间加个班搞下。 首…

Python学习从0到1 day1 你好 Python

我会在那腥臭腐朽的日子里熠熠生辉 ——24.1.11 1.第一个Python程序 安装python程序,输出第一个程序:你好,世界 print("Hello World"); 2.Python解释器 python解释器,是一个计算机程序,用来翻译python代码,并提交给计算机执行 功能:1.翻译代码 2.提交给计算机…

自动化测试框架搭建

思想&#xff1a; 1、基本目录的搭建 report:静态输出目录(报告或者日志) data&#xff1a;静态输入目录(可以存放Excel数据&#xff0c;被读取的一些数据) utils:实用方法层(这里存放的是项目的公共方法&#xff0c;一般拿到别…

Nginx学习

在Nginx配置中&#xff0c;以$符号开头的变量通常是内置变量或者从请求上下文中提取的变量。这些变量用于获取请求的各种信息&#xff0c;例如请求头、URI等。以下是一些常见的以$符号开头的变量&#xff1a; $uri&#xff1a;请求中的URI&#xff08;不包括查询字符串&#x…

汽车产线设备CAN总线一键刷写方案

汽车产线设备CAN总线一键刷写方案 一、概述 随着汽车工业的不断发展&#xff0c;CAN总线技术在汽车产线设备中得到了广泛应用。然而&#xff0c;在实际生产过程中&#xff0c;设备的软件升级和配置更改是不可避免的。为了提高生产效率&#xff0c;我们推出了一键刷写CAN总线解…

初识QT。

文章目录 前言一、QWidget1、了解内容main文件中的基本内容。.pro项目文件的内容。mywidget.h文件内容。命名规范和快捷键Qt助手 2、button按钮3、对象树4、信号和槽5、自定义信号和槽函数拓展 6、Lambda表达式7、练习 二、QMainWindow1、菜单栏和菜单项2、工具栏3、状态栏4、铆…

UKP3d和AutoPDMS管道出图线宽的设置

杭州的一家用户A截轴测图在群里&#xff0c;不料被杭州另一家细心的用户B捕捉到了&#xff0c;B带着疑惑&#xff0c;不相信的口吻问到&#xff1a;“优易抽出来的轴测图吗&#xff1f;我的单线图线很细&#xff0c;这个是怎么设置的&#xff1f;” 可惜&#xff0c;杭州用户A回…

SpringBoot 启动流程

一、SpringBoot 启动流程主要可以概括为以下几个步骤&#xff1a; 加载启动类 当 SpringBoot 项目启动时&#xff0c;会在当前工作目录下寻找有SpringBootApplication注解标识的类&#xff0c;并把这个类作为应用程序的入口点。如果找不到这样的主类&#xff0c;则会打印错误信…

Macos下修改Python版本

MacOS下修改Python版本 安装 查看本机已安装的Python版本&#xff1a;where python3 ~ where python3 /usr/bin/python3 /usr/local/bin/python3 /Library/Frameworks/Python.framework/Versions/3.12/bin/python3如果没有你想要的版本&#xff0c;去python官网下载安装包。…

科技云报道:“存算一体”是大模型AI芯片的破局关键?

科技云报道原创。 在AI发展历史上&#xff0c;曾有两次“圣杯时刻”。 第一次发生在2012年10月&#xff0c;卷积神经网络&#xff08;CNN&#xff09;算法凭借比人眼识别更低的错误率&#xff0c;打开了计算机视觉的应用盛世。 第二次是2016年3月&#xff0c;DeepMind研发的…

解决Java调用Python代码返回中文乱码问题

解决Java调用Python代码返回中文乱码问题 一、乱码原因分析 在Java调用Python代码执行时遇到乱码&#xff0c;我们的第一反应可能是检查文件编码设置是否一致。但在本例中&#xff0c;无论是Java还是Python&#xff0c;编码格式均已设为“UTF-8”&#xff0c;因此排除了编码不…

SSRF扫描工具汇总记录

目录 漏洞简单描述 常出现的位置 工具介绍 SSRFmap 介绍 输入参数