我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职加薪了

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!

Java经典面试问题(含答案解析)

阿里巴巴技术笔试心得

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

select 字段 from 表1 别名1,表2 别名2 where 链接条件 and 其他条件

2.1 例子1:

========

查询许仙的成绩;

具体看看整个查询的过程;

首先直接进行学生表和分数表的链接查询:

select * from student inner join score;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

以及

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

查询到的表中共有189行数据,每个人都对应了成绩表中的所有成绩,也就是说每个人有了21个成绩,所以9个学生有189条数据,与上述的笛卡尔积相互对应起来。

接下来要给查询加上条件:我们知道在score表中,有student_id和course_id,因此要从score表中筛选出sutdnet_id和student中的id相等的分数。

select * from student inner join score on student.id=score.student_id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

此时,我们看到的表中,所有人的成绩和本人都对应起来,现在就可以去筛选出许仙了;

select * from student inner join score on student.id=score.student_id and student.id =4;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

到这一步其实查询已经结束了,我们已经获得了许仙的各科成绩了,但是只有课程id不知道课程的名字。

进行改进:

select stu.sn,stu.name,sco.score,cou.name from student stu inner join score sco on stu.id=sco.student_id

inner join course on score.course_id=course.id and student.id=4;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

分析上述代码,要查询的是学生表中的学生sn和name,以及成绩表中的score,以及课程表中的name;

首先通过分数表中的学生id和学生表中的id对应查到当前每个学生的成绩,然后通过分数表中的课程id在课程表中查询相对应的课程名;

上述代码也可以不使用inner join来查询:

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

2.2 查询所有学生的总成绩

==============

重点关注查询的条件,首先stu.id=sco.student_id,此条件用于查询属于每个学生的对应成绩。

select stu.sn,stu.name,sum(score) from student stu,score sco where stu.id=sco.student_id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

这样子查询到的结果并没有将学生分开,而是查询到了单个学生的成绩,并且也不是单个学生的总成绩,而是将成绩表中的所有的成绩进行了加和,但是为什么只显示了李逵呢,去掉sum再试试。

select stu.sn,stu.name,score from student stu,score sco where stu.id=sco.student_id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

由此可以看出,因为没有设置对单个学生的查询条件,显示结果将所有的score加和到了一起,并且只显示了第一个学生。

对上述代码进行改进:加上分组将每个学生的成绩都分开;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

3.外连接

=====

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。

首先是左连接,以左表为主表,显示左表中所有的内容。

select stu.id,stu.name,sco.score from student stu left join score sco on stu.id=sco.student_id group by stu.id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

右连接,以右表为主,显示右表中有的内容:

select stu.id,stu.name,sco.score from student stu right join score sco on stu.id=sco.student_id group by stu.id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

可以看出左链接中显示了左表也就是student表的全部内容而右链接,显示了右表score中的全部内容,null的内容不显示,如果不指定左右链接,就会显示两张表的交集都不为空的情况。

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

再来看看如何区分左右表:

select stu.id,stu.name,sco.score from score sco left join student stu on stu.id=sco.student_id group by stu.id;

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

在from之后将score和student的位置进行了互换,可以看出当前结果以score表为主表,显示其所有内容,null的就不显示。

4. 自连接

=======

例子:查询所有计算机原理比java成绩高的分数信息。

首先看看课程表中的信息:

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

可以看到:计算机原理的id=3;java的id=1;

因此我们需要在score表中去搜索id=3的成绩>id=1的成绩;

需要进行自己与自己的内容进行对比,这种方式成为自链接;

自链接的实现:

需要注意的是:我们在实现该次查询的时候,要注意学生的id需要相等,因为我们查询的是同一个学生的计算机原理比java成绩高的成绩信息。

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

我用Mysql查询优化了数据库,工作效率提升100%,领导给我升职了

查询结果中只显示了计算机原理的成绩,这是由于我们联合查询中 select s2.*;条件中查询的是 s2.course_id=3的课程信息。

以上查询可以表示为,查询s1和s2表中,学生id相等的情况下;表1中的course_id=1和course_id=3且1的成绩小于3的成绩,并显示表二中信息,

其实就是在对比表1和表2中的信息,首先筛选出学生id相等的信息,然后筛选出表2中的courseid=3的成绩大于表1中coureseid=1的信息,并将其显示出来。

最后

面试题文档来啦,内容很多,485页!

由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

1111道Java工程师必问面试题

MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:

Elasticsearch 24 题 +Memcached + Redis 40题:

Spring 26 题+ 微服务 27题+ Linux 45题:

Java面试题合集:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[外链图片转存中…(img-HFVVt3n9-1715543926385)]

Java面试题合集:

[外链图片转存中…(img-AA6MSpuu-1715543926385)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值