小蔺的米哈游数据分析师之路——MYSQL多表查询强化篇

一,多表查询

        多表查询是我们呢在实际生活开发中所使用的最为广泛的一个内容,也是我们在sql学习中较为进阶的一个内容,我们这部分需要着重来看下。

        那么首先我们先要明白我们日常中的多表查询的表结构关系钟存在的联系,一共有三种,分别为
        一对多(多对一):例如员工表和部门表,一张表为员工信息表,一张表为部门信息表

        多对多:学生与课程的关系,学生可以选择多个课程,课程也可以有多个学生来上

        一对一:最简单的对应关系

        那如何进行,多表查询操作呢, 我们现在就来给大家演示一下,首先我们对于emp和dept两张表进行一个联合查询,输入:

SELECT
	*
FROM
	emp,dept

        我们可以查看到总共有102条数据, 但是我们可以看到我们所有查到的数据会将emp中的数据和dept的数据全部都匹配了出来,产生了笛卡尔积的情况,那我们在查看表的时候,就需要我们消除无效的笛卡尔积,这时候我们就需要将我们的表中字段链接起来,那就会用到我们得找到他们中的对应关系,并且连接起来

        那么我们这两张表中可以看到我们对应关系是emp表的dept_id字段与dept表的id字段相关联,那我们在编写代码时,就可以加上一些限制条件,如:

SELECT
	*
FROM
	emp,dept
WHERE
	emp.dept_id = dept.id

        这样,运行后我们的数据就只有16条,对应到了每个人的数据之上了

        那这样就引出了我们多表查询的分类,多表查询我们分为一下几类

连接查询

        内连接:相当于查询A,B交集部分数据

        外连接:

                左外连接:查询左表所有数据,以及两张表交集部分数据

                右外连接:查询右表所有数据,以及两张表交集部分数据

        自连接:当前表与自身的连接查询,自连接必须使用表别名

 子查询

1,内连接

        那首先我们先来介绍内连接,内连接又详细分为两类:隐式内连接和显式内连接

        那我们用一个实际的需求来学习下这两种连接方式,当我们需要查找每一个员工的姓名以及关联的部门名称,首先使用隐式内连接:

SELECT
	emp.name,
	dept.name
FROM
	emp,dept
WHERE
	emp.dept_id = dept.id

        这样就实现了我们的需求,那要是用显式内连接呢,我们输入的是

SELECT
	emp.name,
	dept.name
FROM
	emp inner join dept
on
	emp.dept_id = dept.id

         这样运行后显示的效果是一样的,那我们从这两个例子可以看出对比隐式内连接是将两张表连接的语句为inner join ,查询条件跟在on之后,而显示内连接用‘,’连接两张表,查询条件为where,但是他们产生的效果其实是相同的

2,外连接

        讲解完了内连接,接下来我们开始学习外连接,外连接又分为两种,一种是左外连接,一种是右外连接,那我们来看看这两种连接的使用方法

        那我们现在同样开始根据需求来查询我们所需要的值,首先我们需要查询emp表中的所有数据以及对应的部门信息

        由于我们的emp表中,id为17的员工没有关联的部门数据,所以如果用内连接是无法查看的,这时候我们需要用到我们的左外连接,这时候需要我们输入

SELECT 
	e.*,d.name
FROM
	emp e LEFT JOIN dept d
on
 e.dept_id = d.id

        这时候我们就查看到了所有的数据并且,没有对应的17号员工也被查了出来

        那接下来如果我们需要查询dept表的数据和对应员工的信息,我们就需要使用到右外连接了,这时候我们需要输入

SELECT 
	d.*,e.*
FROM
	emp e RIGHT outer JOIN dept d 
ON
	e.dept_id=d.id

        可以看到我们不仅查到了部门内所有员工的信息,也查询到了没有员工的部门的信息 

        其中左外链接和右外连接如果想要交换使用,只需要将两张表的顺序对调即可

3,自连接

        指的是单张表自己自行链接的语句,我么同样也根据我们的需求来看我们的实现。

        我们现在有一张员工表,员工名称与自己领导并没有对应,但是对应到了领导的ID,如下图所示

        目前我们需要查询员工及其所属领导的名字,这里就涉及到了我们的自连接,我们输入:

SELECT 
	a.name,b.name
FROM
 emp a,emp b
WHERE
	a.managerid=b.id

         这样的话我们就查到了我们所有人对应的领导名称了,我们可以看到我们在这张表中,单张表引用多次,这里值得注意的地方就是我们的自连接一定要给我们的表起一个别名,不然系统会无法识别具体是哪张表。

        那接下来我们用下一个需求来强化下我们的学习成果

        目前我们需要查询所有员工及其领导的名字,如果员工没有领导也需要查询出来,那我们可以输入以下代码

SELECT 
	a.name '员工' , b.name '领导'
FROM
	emp a LEFT JOIN emp b
ON
	a.managerid	= b.id

        运行后我们便得到了全部的信息

4,联合查询

        联合查询就是将多次查询的结果连接起来组成一个新的查询结果集

        比如我们需要查询薪资低于5000的员工和年龄大于50岁的员工,我们就可以使用联合查询的方式进行查询,我们输入

SELECT * FROM emp WHERE salary< 5000
UNION ALL
SELECT * FROM emp WHERE age > 50

        我们查询到的结果如下,会将两个需求一次性都查询出来 ,但同时我们也发现鹿杖客在这里出现了两次,那遇到这种情况,我们可以将union all 改为union 运行后即可去掉这个重复项了

        但是我们联合查询有几个重点注意事项
        1,对于联合查询,多张表的列数及字段类型均需要保持一致

        2,union all会直接合并两列数据,union则会去重后合并,大家需要注意下两者区别
 

        到这里我们sql中基础查询的语句基本上已经学习完毕了,大家有空的时候可以多练习我们数据的提取以及应用到日常生活中, 这样可以更快地学习我们的sql知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 米哈游是一家以游戏开发为主要业务的公司,Java后端笔试可能会涉及以下方面的内容: 1. Java基础知识:笔试中可能会涉及Java的基本语法、面向对象编程、集合框架等内容,考察应聘者对Java语言的熟悉程度。 2. 数据库:Java后端开发常常需要与数据库进行交互,因此笔试中可能会考察SQL语句的编写、数据库设计与优化等方面的知识。 3. Web开发:Java后端开发通常需要熟悉一些Web开发技术,如Servlet、JSP、Spring框架等。笔试中可能会出现相关的题目,考察应聘者对Web开发的了解程度。 4. 网络通信:Java后端开发常常需要进行网络通信,可能会使用TCP/IP协议、HTTP协议等。笔试中可能会出现与网络通信相关的题目,考察应聘者对网络通信知识的掌握。 5. 算法与数据结构:Java后端开发中,对算法与数据结构的理解与运用也非常重要。笔试中可能会出现一些与算法与数据结构相关的题目,考察应聘者的编程能力与解决问题的能力。 米哈游作为一家游戏开发公司,对Java后端开发人员的要求较高。参加该公司笔试需要对Java开发、数据库、Web开发、网络通信等方面的基础知识有一定的了解与掌握。同时,还需要有较强的编程能力和解决问题的能力。只有掌握了这些知识和能力,才能在米哈游的Java后端笔试中有所斩获。 ### 回答2: 米哈游java后端笔试是米哈游公司的一项面试程序,用于选拔适合担任java后端开发职位的候选人。此笔试主要考察候选人在java后端开发方面的知识和技能。 在笔试中,候选人可能会遇到一些关于java编程语言和相关技术的问题。这些问题可能涉及到java的基本语法、面向对象编程、异常处理、多线程、IO操作等方面的内容。候选人需要能够熟练运用这些知识解决问题,并编写高质量的java后端代码。 此外,笔试可能还包括一些与数据库相关的问题,例如SQL查询语句的编写、数据库连接和事务处理等。候选人需要熟悉关系型数据库的基本概念和操作,以及常见的数据库管理系统如MySQL或Oracle等。 另外,米哈游java后端笔试也可能要求候选人解决一些算法和数据结构方面的问题。这些问题可能涉及到数组、链表、树、图等数据结构的使用以及常见的算法如搜索、排序和动态规划等。 总之,米哈游java后端笔试是一项通过考察候选人的java后端开发技能,来评估其适应米哈游公司java后端开发职位的能力和潜力的评估工具。候选人需要在笔试中展示他们在java编程语言、数据库和算法方面的扎实知识和解决问题的能力。 ### 回答3: 米哈游java后端笔试是米哈游公司针对java后端开发岗位的面试笔试。笔试内容主要考察应聘者在java开发方面的能力和经验。 笔试可能包括以下几个方面的内容: 1. Java基础知识:包括Java语法、面向对象编程、集合框架等基础知识。应聘者需要熟悉Java的常用类库和API,能够编写简单的Java程序。 2. 数据库和SQL:应聘者需要熟悉数据库的基本概念和常用操作,熟练使用SQL语言进行数据的查询和操作。可能需要编写一些简单的SQL语句。 3. Web开发:应聘者需要了解常用的Web开发技术,如Servlet、JSP、Spring、MyBatis等。可能需要编写一些简单的Web应用程序,实现基本的增删改查功能。 4. 多线程编程:应聘者需要理解多线程编程的基本概念和原理,能够使用Java提供的多线程相关API进行并发编程。 5. 性能优化和调优:应聘者需要了解如何进行性能优化和调优,能够使用一些常用的工具对程序进行性能分析和调试。 6. 设计模式:应聘者需要了解常用的设计模式,能够根据实际需求进行合理的设计和开发。 针对这些内容,应聘者可以提前进行充分准备,复习相关知识。同时,应该注重实践,多做一些相关的项目和练习题,提高自己的实际动手能力。 对于笔试中遇到的问题或难点,应聘者可以积极思考和分析,尽量给出自己的解决方案。如果不确定的地方可以标明,并在之后的面试环节中与面试官进行深入讨论。 最后,应聘者在笔试过程中要保持冷静和自信,展示出自己的优势和能力。希望以上回答能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值