mysql模拟题三_mysql经典45题(3刷)

Mysql 经典练习题

我使用的Mysql版本是5.7.27-log,答案可能会因版本会有少许出入。

一、数据源准备及说明:

1.1、数据字段说明:

1.学生表 Student(SId,Sname,Sage,Ssex)

SId :学生编号

Sname:学生姓名

Sage :出生年月

Ssex:学生性别

2.课程表 Course(CId,Cname,TId)

CId :课程编号

Cname :课程名称

TId :教师编号

3.教师表 Teacher(TId,Tname)

TId :教师编号

Tname :教师姓名

4.成绩表 SC(SId,CId,score)

SId :学生编号

CId :课程编号

score: 分数

1.2、将数据导入数据库:

导入数据方法:

1、将以下 mysql 语句,完整复制到 workbench 语句窗口(或者是mysql 的黑窗口或者Navicat窗口也可以)

2、然后运行即可导入,不需要另外创建表,下面表的操作一样。

注释:这些语句第一条是创建表(create table),后面都是插入数据到表中(insert into table ):

学生表 Student:

create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));

insert into Student values('01' , '赵雷' , '1990-01-01' , '男');

insert into Student values('02' , '钱电' , '1990-12-21' , '男');

insert into Student values('03' , '孙风' , '1990-05-20' , '男');

insert into Student values('04' , '李云' , '1990-08-06' , '男');

insert into Student values('05' , '周梅' , '1991-12-01' , '女');

insert into Student values('06' , '吴兰' , '1992-03-01' , '女');

insert into Student values('07' , '郑竹' , '1989-07-01' , '女');

insert into Student values('09' , '张三' , '2017-12-20' , '女');

insert into Student values('10' , '李四' , '2017-12-25' , '女');

insert into Student values('11' , '李四' , '2017-12-30' , '女');

insert into Student values('12' , '赵六' , '2017-01-01' , '女');

insert into Student values('13' , '孙七' , '2018-01-01' , '女');

科目表 Course:

create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));

insert into Course values('01' , '语文' , '02');

insert into Course values('02' , '数学' , '01');

insert into Course values('03' , '英语' , '03');

教师表 Teacher:

create table Teacher(TId varchar(10),Tname varchar(10));

insert into Teacher values('01' , '张三');

insert into Teacher values('02' , '李四');

insert into Teacher values('03' , '王五');

成绩表 SC:

create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));

insert into SC values('01' , '01' , 80);

insert into SC values('01' , '02' , 90);

insert into SC values('01' , '03' , 99);

insert into SC values('02' , '01' , 70);

insert into SC values('02' , '02' , 60);

insert into SC values('02' , '03' , 80);

insert into SC values('03' , '01' , 80);

insert into SC values('03' , '02' , 80);

insert into SC values('03' , '03' , 80);

insert into SC values('04' , '01' , 50);

insert into SC values('04' , '02' , 30);

insert into SC values('04' , '03' , 20);

insert into SC values('05' , '01' , 76);

insert into SC values('05' , '02' , 87);

insert into SC values('06' , '01' , 31);

insert into SC values('06' , '03' , 34);

insert into SC values('07' , '02' , 89);

insert into SC values('07' , '03' , 98);

二、练习题目:

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

分析:题意就是想查询所有学生中01课程分数比02课程分数高的学生有哪些?

思路:分别查出01和02的sid和分数,然后与student表内连接查询学生姓名,输出样式:Sid,Sname,score01,score02,然后用where条件a.score > b.score过滤一下即可实现查询结果。

SELECT a.sid

,st.Sname

,a.score

,b.score

FROM(SELECT SId

,score

FROM sc

WHERE CId = 01) AS a # 查询01课程的分数

INNER JOIN (SELECT SId

,score

FROM sc

WHERE CId = 02) AS b ON a.sid = b.sid # 查询02课程的分数

INNER JOIN student AS st ON st.SId = a.SId # 2个内连接查交集

WHERE a.score > b.score;

1.1、查询同时学过" 01 "课程和" 02 "课程的学生信息

思路:使用子查询,先分别查询出01课程和02课程的sid,然后将这两个表内连接,即是同时学01和02课程的sid,此时再与studen表中的sid匹配查到学生详细信息。

解法1:标量子查询

SELECT student.*

FROM student

WHERE student.SId IN (SELECT a.SId

FROM (SELECT sid

FROM sc

WHERE CId = "01") AS a

INNER JOIN (SELECT *

FROM sc

WHERE CId = "02") AS b ON a.SId = b.SId);

但这个查询结果仅仅只能看到学生信息,看不到学生各个课程的分数,输出样式不是最优,所以我们希望输出的样式是这样的:sid,sname,score01,score02,那么就可以如题1一样,使用多表连接对三个表做内连接,然后直接取需要的字段即可:

SELECT a.sid

,st.Sname

,a.score

,b.score

FROM(SELECT SId

,score

FROM sc

WHERE CId = 01) AS a

INNER JOIN (SELECT SId

,score

FROM sc

WHERE CId = 02) AS b ON a.sid = b.sid

INNER JOIN student AS st ON st.SId = a.SId;

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

分析:所谓"情况",无非就是查这样一些人:必须学过01课课程,不一定学过02课程的学生是哪些,那既然知道了学生id,那很有可能想知道这些学生的信息,所以我们希望查询结果以这样的格式进行输出:sid,sname,score01,score02.

思路:多表连接的时候使用左连接即可,分别查询出学过01和02课程的sid和分数,然后将两个查询结果进行左连接,确保01课程的所有人都在,然后与student表左连接,这样就得到了想要查询结果了。

SELECT a.sid

,st.Sname

,a.score

,b.score

FROM(SELECT SId

,score

FROM sc

WHERE CId = 01) AS a

LEFT JOIN (SELECT SId

,score

FROM sc

WHERE CId = 02) AS b ON a.sid = b.sid

LEFT JOIN student AS st ON st.SId = a.SId;

1.3、查询不存在" 01 "课程但存在" 02 "课程的情况

思路:过滤掉cid = 01 课程的所有sid,再选取cid = 02的学生

解法1:使用子查询过滤掉学过01课程的学生,然后再选出那些学了02课程的学生,用AND将两个约束条件进行连接就可以得到最终的结果集了。

SELECT a.sid

,b.s

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,以下是一些面向高级 Java 工程师的 MySQL 填空: 1. 在 MySQL ,__数据库__ 是用于存储和管理数据的容器。 2. 在 MySQL ,____ 是由一组具有相同结构的记录组成的数据集合。 3. 在 MySQL ,__字段__ 是的一个列,用于存储特定类型的数据。 4. 在 MySQL ,__主键__ 是用于唯一标识每个记录的字段字段组合。 5. 在 MySQL ,__外键__ 是用于建立之间关系的字段,引用了其他的主键。 6. 在 MySQL ,__索引__ 是一种数据结构,用于加快数据检索操作的速度。 7. 在 MySQL ,__事务__ 是由一个或多个操作组成的逻辑工作单元,要么全部执行成功,要么全部回滚。 8. 在 MySQL ,__ACID__ 是指原子性、一致性、隔离性和持久性,用于描述事务的特性。 9. 在 MySQL ,__存储过程__ 是一种预定义在数据库的可重复使用的代码块。 10. 在 MySQL ,__触发器__ 是一种特殊类型的存储过程,可以在上的插入、更新或删除操作发生时自动执行。 11. 在 MySQL ,__视图__ 是由一个或多个的行和列组成的虚拟,可以简化复杂的查询操作。 12. 在 MySQL ,__游标__ 是用于按照一定顺序遍历结果集的数据库对象。 13. 在 MySQL ,__连接__ 是通过某些条件将多个的数据关联起来的操作。 14. 在 MySQL ,__子查询__ 是一个嵌套在其他查询语句的查询语句。 15. 在 MySQL ,__范式__ 是一种用于设计关系型数据库的规范化方法,包括第一范式、第二范式等。 16. 在 MySQL ,__反范式__ 是一种通过冗余数据来提高查询性能的方法。 17. 在 MySQL ,__存储引擎__ 是用于存储和检索数据的底层软件组件。 18. 在 MySQL ,__InnoDB__ 是一个常用的支持事务和行级锁定的存储引擎。 19. 在 MySQL ,__MyISAM__ 是一个常用的不支持事务但具有较高性能的存储引擎。 20. 在 MySQL ,__备份与恢复__ 是一种用于保护数据库数据的重要手段,可以防止数据丢失。 21. 在 MySQL ,__慢查询日志__ 是一种记录执行时间超过阈值的查询语句的日志。 22. 在 MySQL ,__锁__ 是一种用于控制并发访问数据库的机制。 23. 在 MySQL ,__主从复制__ 是一种将主数据库的更改复制到一个或多个从数据库的机制。 24. 在 MySQL ,__分区__ 是一种将大拆分为多个小的技术,可以提高查询性能。 25. 在 MySQL ,__分布式数据库__ 是一种将数据分布在多个物理节点上的数据库系统。 26. 在 MySQL ,__批量插入__ 是一种将多条记录同时插入数据库的方法,可以提高插入性能。 27. 在 MySQL ,__字符集__ 是一种用于存储和处理字符串数据的编码方式。 28. 在 MySQL ,__连接池__ 是一种用于管理数据库连接的技术,可以提高性能和资源利用率。 29. 在 MySQL ,__数据库优化器__ 是一种用于选择最优执行计划的组件。 30. 在 MySQL ,__查询优化__ 是一种通过调整数据库结构、索引设计、查询重写等方式来提高查询性能的方法。 31. 在 MySQL ,__复制__ 是一种将数据从一个数据库实例复制到另一个数据库实例的机制。 32. 在 MySQL ,__分布式事务__ 是一种在多个数据库实例上保持一致性的事务处理方式。 33. 在 MySQL ,__数据备份__ 是一种用于保护数据免受意外删除或损坏的手段。 34. 在 MySQL ,__数据恢复__ 是一种通过备份或日志来还原数据库到某个时间点的操作。 35. 在 MySQL ,__索引优化__ 是一种通过评估和优化索引来提高查询性能的方法。 36. 在 MySQL ,__查询缓存__ 是一种缓存查询结果的机制,可以提高查询性能。 37. 在 MySQL ,__并发控制__ 是一种用于处理多个并发事务的机制,保证数据一致性。 38. 在 MySQL ,__存储过程调优__ 是一种通过优化存储过程代码来提高性能的方法。 39. 在 MySQL ,__数据库分片__ 是一种将数据分散存储在多个物理节点上的技术,可以提高可扩展性。 40. 在 MySQL ,__连接优化__ 是一种通过合理设计和使用连接来提高查询性能的方法。 41. 在 MySQL ,__数据库安全__ 是一种保护数据库免受未经授权访问、数据泄露等威胁的措施。 42. 在 MySQL ,__数据库监控__ 是一种实时监视数据库性能和活动的技术。 43. 在 MySQL ,__查询分析器__ 是一种用于分析查询执行计划和性能瓶颈的工具。 44. 在 MySQL ,__数据库版本控制__ 是一种用于管理数据库结构和数据变更的技术。 45. 在 MySQL ,__外部键约束__ 是一种用于维护之间关系完整性的机制。 46. 在 MySQL ,__数据库压测__ 是一种通过模拟大量用户并发访问来评估数据库性能的方法。 47. 在 MySQL ,__数据库分析__ 是一种通过分析数据来获得有关业务和性能的洞察的技术。 48. 在 MySQL ,__数据库迁移__ 是一种将数据从一个数据库平台迁移到另一个数据库平台的过程。 49. 在 MySQL ,__数据库优化__ 是一种通过调整数据库配置和参数来提高性能的方法。 50. 在 MySQL ,__数据库设计__ 是一种通过合理设计结构和关系来满足业务需求的方法。 这些目较为复杂,需要对 MySQL 的各个方面有一定的了解,并且对高级概念有所了解。希望能帮到你!如果你还有其他问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值