MySQL第四战:视图以及常见面试题(上)

这篇具有很好参考价值的文章主要介绍了MySQL第四战:视图以及常见面试题(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

目录:

一.视图

1.介绍什么是视图

2.视图的语法

语法讲解

实例操作 

二.MySQL面试题

1.SQL脚本

2.面试题实战

三.思维导图


目录:

随着数字化时代的飞速发展,数据库技术,特别是MySQL,已经成为IT领域中不可或缺的一环。从简单的数据存储到复杂的数据分析,从个人博客到大型企业的核心系统,MySQL都在背后默默地发挥着作用。而在这不断演变的过程中,我们对于MySQL的了解和掌握也需要与时俱进。

在之前的博客中,我们已经探讨了MySQL的许多基础和进阶功能。但今天,我们要深入到一个经常被忽视,但又非常重要的主题——视图(View)。视图在数据库中起到了一个非常特殊的角色,它能够简化复杂的查询操作,提高数据的安全性,并帮助我们更好地组织和理解数据。

此外,为了更好地服务我们的读者,这篇博客还将涉及到一些常见的MySQL面试题。通过解答这些问题,我们不仅能够测试和巩固自己的知识,还能为即将参加面试的朋友们提供一些参考和启示。

在接下来的篇幅中,我们将深入探讨视图的创建、使用和优化,以及解答那些常常在面试中出现的关于MySQL的疑问。希望通过这次的学习,你能对MySQL有更深入的理解和掌握。

准备好了吗?让我们开始这次的探索之旅!

一.视图

1.介绍什么是视图

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

2.视图的语法

语法讲解

创建视图

create view 视图名 as 查询语句 ;

视图修改

#方式一
create  or  replace view 视图名
as
查询语句;

#方式二
alert  view  视图名
as
查询语句;

删除视图

drop view 视图名

查看视图

#查看视图相关字段
desc 视图名;
#查看视图相关语句
show  create  view 视图名;

实例操作 

创建视图

CREATE  VIEW v_su  as
SELECT   s.*,sc.cid,sc.score
FROM
	t_mysql_student s,
	t_mysql_score sc 
WHERE
	s.sid = sc.sid;
	

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

修改视图

	ALTER VIEW v_su  as
SELECT   s.*,sc.cid,sc.score
FROM
	t_mysql_student s,
	t_mysql_score sc 
WHERE
	s.sid = sc.sid

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

CREATE or REPLACE  VIEW v_zx  as
SELECT   s.*,sc.cid,sc.score
FROM
	t_mysql_student s,
	t_mysql_score sc 
WHERE
	s.sid = sc.sid;
	

 MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

查看视图 

desc  v_sU

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

SHOW  CREATE  view v_su

 MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

二.MySQL面试题

1.SQL脚本

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 80018
 Source Host           : localhost:3306
 Source Schema         : mybatis_ssm

 Target Server Type    : MySQL
 Target Server Version : 80018
 File Encoding         : 65001

 Date: 04/07/2023 23:53:33
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_mysql_course
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_course`;
CREATE TABLE `t_mysql_course`  (
  `cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程编号',
  `cname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程名称',
  `tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师编号',
  PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '课程信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_course
-- ----------------------------
INSERT INTO `t_mysql_course` VALUES ('01', '语文', '02');
INSERT INTO `t_mysql_course` VALUES ('02', '数学', '01');
INSERT INTO `t_mysql_course` VALUES ('03', '英语', '03');

-- ----------------------------
-- Table structure for t_mysql_score
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_score`;
CREATE TABLE `t_mysql_score`  (
  `sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生编号,外键',
  `cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程编号,外键',
  `score` float NULL DEFAULT 0 COMMENT '成绩',
  INDEX `sid`(`sid`) USING BTREE,
  INDEX `cid`(`cid`) USING BTREE,
  CONSTRAINT `t_mysql_score_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `t_mysql_student` (`sid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `t_mysql_score_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `t_mysql_course` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '成绩信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_score
-- ----------------------------
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);

-- ----------------------------
-- Table structure for t_mysql_student
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_student`;
CREATE TABLE `t_mysql_student`  (
  `sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生编号',
  `sname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生名称',
  `sage` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生年龄',
  `ssex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学生性别',
  PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_student
-- ----------------------------
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', '女');

-- ----------------------------
-- Table structure for t_mysql_teacher
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_teacher`;
CREATE TABLE `t_mysql_teacher`  (
  `tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师编号',
  `tname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教师名称',
  PRIMARY KEY (`tid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '教师信息表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_mysql_teacher
-- ----------------------------
INSERT INTO `t_mysql_teacher` VALUES ('01', '张三');
INSERT INTO `t_mysql_teacher` VALUES ('02', '李四');
INSERT INTO `t_mysql_teacher` VALUES ('03', '王五');

SET FOREIGN_KEY_CHECKS = 1;

2.面试题实战

1.查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
#考察内容:联表查询  内连接 所需表:t_mysql_student t_mysql_score

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第四战:视图以及常见面试题(上),MySQL,mysql,数据库


2. 查询同时存在" 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第四战:视图以及常见面试题(上),MySQL,mysql,数据库


 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第四战:视图以及常见面试题(上),MySQL,mysql,数据库


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

	SELECT
	* 
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'

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库


05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
#聚合函数=》 分组  外连接 

SELECT
	s.sid,
	s.sname,
	ROUND( AVG( sc.score ) ) 分数 
FROM
	t_mysql_student s
	LEFT JOIN t_mysql_score sc ON s.sid = sc.sid 
GROUP BY
	s.sid,
	s.sname 
HAVING
	分数 >= 60

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库


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

 MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库


 07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
#考核点 聚合函数 外连接

SELECT
	s.sid,
	s.sname,
	COUNT( sc.cid ),
	SUM( sc.score ) 
FROM
	t_mysql_score sc,
	t_mysql_student s 
WHERE
	sc.sid = s.sid 
GROUP BY
	s.sid,
	s.sname

 MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库



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

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

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库

三.思维导图

MySQL第四战:视图以及常见面试题(上),MySQL,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-782261.html

到了这里,关于MySQL第四战:视图以及常见面试题(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL之CRUD及常见面试题讲解

    目录 一、CRUD是什么 二、什么是SQL注入 三、行转列的使用 四、CRUD中常用 : GROUP BY HAVING  ORDER BY  五、聚合函数和连表查询 聚合函数 连表查询 六、DELETE、TRUNCATE、DROP的区别 七、MySQL常见面试题讲解 CRUD是一个常用的缩写词,用于描述四种基本的数据库操作,即

    2024年02月13日
    浏览(37)
  • 【MySQL 数据库】8、视图

    视图(View)是一种虚拟存在的表 视图中的数据并不在数据库中真实存在 行和列数据来自 定义视图的查询中使用的表 ,并且是在使用视图时动态生成的 当使用 WITH CHECK OPTION 子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如 插入,更新,删除 ,以使其符合视图

    2024年02月08日
    浏览(64)
  • MySQL数据库——MySQL创建视图(CREATE VIEW)

    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。 可以使用 CREATE VIEW 语句来创建视图。 语法格式如下: 语法说明如下。 视图名 : 指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。 SEL

    2024年02月02日
    浏览(60)
  • 玩转MYSQL数据库之--视图详解

    从今天开始本系列文章就带各位小伙伴学习数据库技术。 数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 全文大约 【1297】字 ,不说废话,只讲可以让你学到技术、

    2024年02月05日
    浏览(105)
  • mysql数据库实验实训6,数据视图(详细)

    1、掌握视图功能和作用 2、掌握视图创建和管理办法 对YGGL数据库完成以下视图操作: 1、在员工管理数据库YGGL中创建视图Emp_view1,包含所有男员工的员工编号、姓名、工作年限和学历: 代码: mysql create or replace view Emp_view1 - as select 员工编号,姓名,工作年限,学历 - from employee

    2024年02月07日
    浏览(69)
  • 【MySQL数据库】看完还有谁学不会 MySQL 中的视图?

    在MySQL中,视图是一种虚拟表,它是由一个或多个基本表的行或列组成的。视图并不实际存储数据,而是根据定义的查询语句动态生成结果集。视图可以简化复杂的查询操作,提高查询效率,同时也可以保护数据的安全性,隐藏敏感数据。 视图是一种虚拟表,它是由一个或多

    2024年02月10日
    浏览(58)
  • MySQL数据库期末考试试题及参考答案(06)

    本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 普通索引使用KEY或____定义。 在MySQL中,DROP VIEW语句用于____。 MySQL中常见的索引大致分为普通索引、 ____ 、 ____ 、全文索引、空间索引。 只有在查询条件中使用了复合索引中的____字段时,该复合索引才会被使用

    2024年02月08日
    浏览(51)
  • MySQL数据库期末考试试题及参考答案(08)

    本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl MySQL用户变量由符号____和变量名组成。 MySQL中____循环语句会无条件执行一次语句列表。 DELIMITER语句可以设置MySQL的____。 MySQL中打开游标使用____。 存储过程的过程体以____表示过程体的开始,以____表示过

    2024年02月11日
    浏览(50)
  • MySQL数据库期末考试试题及参考答案(02)

    本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 创建数据库时,语句中添加____可以防止数据库已存在而引发的程序报错。 如果使用非图形化工具操作数据表,操作之前应该先使用____命令指定操作是在哪个数据库中进行。 在MySQL中,小数的表示分为____和定点

    2024年02月11日
    浏览(47)
  • MySQL数据库期末考试试题及参考答案(05)

    本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 交叉连接查询返回的结果是被连接的两张数据表中所有数据行的____ 。 左连接查询的结果包括LEFT JOIN子句中左表的____,以及右表中满足连接条件的记录。 内连接查询的语法中,ON用于指定查询的____。 被外键引

    2024年02月05日
    浏览(96)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包