内、外连接查询-MySQL数据库 (头歌实践平台)

文章目的初衷是希望学习笔记分享给更多的伙伴,并无盈利目的,尊重版权,如有侵犯,请官方工作人员联系博主谢谢。

目录

第1关:内连接查询

任务描述

相关知识

内连接查询

编程要求

测试说明

第2关:外连接查询

任务描述

相关知识

外连接查询

外连接查询的使用

编程要求

 第3关:复合条件连接查询

任务描述

相关知识

复合条件连接查询

编程要求


第1关:内连接查询

任务描述

本关任务:使用内连接查询数据表中学生姓名和对应的班级。

相关知识

为了完成本关任务,你需要掌握: 1.什么是内连接查询; 2.如何使用内连接查询。

内连接查询

  • 仅将两个表中满足连接条件的行组合起来作为结果集,称为内连接;

  • 关键字:[inner] join ... on

语法:

表1 [inner] join 表2 on 表1.字段=表2.字段

语法解释:

  1. 从表1中取出每一条记录,去表2中与所有的记录进行匹配,匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义(如下面两张表中的 employee.dept_id 和 department.id),大多数情况下为两张表中的主外键关系。

内连接查询的使用

现在我们有两张表,数据如下: employee表数据:

idnamedept_id
1Nancy4
2Tod2
3Carly1
4Allen2
5Mary(null)

department表数据:

idname
1开发部
2测试部
3运维部
4销售部

现在想要查询出员工姓名以及其对应的部门名称,我们就使用内连接来进行查询。

  • 我们可以将关联查询思路分为三步:
1.确定所连接的表,

2.确定所要查询的字段,

3.确定连接条件与连接方式。

 

其中,没有部门的员工和部门没有员工的部门都没有被查出来,这就是内连接的特点,只查询在连接表中有对应的记录,其中dept.id=emp.dept_id是连接条件。

编程要求

在右侧编辑器补充代码,查询数据表中学生姓名以及对应的班级名称,将其对应的列名分别另命名为studentNameclassName

我们为你提供了两张表,内容如下:

tb_student表数据:

idnameclass_id
1Emma2
2Mary4
3Allen(null)
4Kevin1
5Rose2
6James1

tb_class表数据:

idname
1软件1631
2软件1632
3测试1631
4测试1632

测试说明

平台会对你编写的代码进行测试:

预期输出:

USE School;

########## 查询数据表中学生姓名和对应的班级 ##########
#请在此处添加实现代码
########## Begin ##########


select tb_student.name as studentName,tb_class.name as className #从学生表中选择学生名字、课程表中选择课程名字
from tb_student join tb_class on tb_class.id = tb_student.class_id;#根据class-id和id相等作为依据,将他们内连接在一起

########## End ##########

第2关:外连接查询

任务描述

本关任务:使用外连接查询数据表中所有班级和对应班级里学生的姓名。

相关知识

为了完成本关任务,你需要掌握: 1.什么是外连接查询; 2.如何使用外连接查询。

外连接查询

  • 以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空(null),称为外连接。

  • 外连接查询分为左外连接查询和右外连接查询

  • left/right [outer] join ... on
    

语法:


表1 left/right [outer] join 表2 on 表1.字段=表2.字段

语法解释:

左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL;
右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL。

外连接查询的使用

我们仍使用如下两张数据表:

employee表数据:

idnamedept_id
1Nancy4
2Tod2
3Carly1
4Allen2
5Mary(null)

department表数据:

idname
1开发部
2测试部
3运维部
4销售部

例如查询所有员工姓名以及他所在部门,在内连接Mary没有被查出,因为他没有对应的部门,现在想把Mary也查出来,就要使用左外连接

此查询语句以employee为主表查询,因此最终记录至少不少于主表已有的记录数。

  • 右外连接是同理的,只是基准表的位置变化了而已。
  • 我们在这里只是将left修改成了right,但是基准表变化了,是以department表的数据去匹配employee表,所以左外连接能做到的查询,右外连接也能做到,仅展现的效果有所不同。

    虽然左外连接和右外连接有主表差异,但左外连接和右外连接可以互转,如上面的右外连接也等效于如下查询语句,只需将基准表换一下:

编程要求

在右侧编辑器补充代码,分别使用左外连接右外连接查询数据表中所有学生姓名和对应的班级名称,查询结果列分别另命名为studentNameclassName

我们为你提供了两张表,内容如下:

tb_student表数据:

idnameclass_id
1Emma2
2Mary4
3Allen(null)
4Kevin1
5Rose2
6James1

tb_class表数据:

idname
1软件1631
2软件1632
3测试1631
4测试1632

注意:请使用 tb_student 作为左表,tb_class 作为右表。

测试说明

平台会对你编写的代码进行测试:

预期输出:

 

USE School;

########## 使用左外连接查询所有学生姓名和对应的班级 ##########

#请在此处添加实现代码
########## Begin ##########
 #studentName列在左,className列在右
select tb_student.name as studentName,tb_class.name as className
from tb_class right join tb_student #class表右插入student表,student表在左边,以在左边的为name(emma-mary-allen-kevin-rose-james)为优先顺序先排(先放),
#然后将class表根据id号相等后连接
on tb_class.id=tb_student.class_id;


########## End ##########

########## 使用右外连接查询所有学生姓名和对应的班级 ##########

#请在此处添加实现代码
########## Begin ##########
#studentName列在左,className列在右
select tb_student.name as studentName,tb_class.name as className 
from tb_class left join tb_student#class表左插入student表,class表在左边,以在左边表的name(1631-1632-1631-1632)为顺序,根据class与student表的id号相等,连接
on tb_class.id=tb_student.class_id;


########## End ##########

 第3关:复合条件连接查询

任务描述

本关任务:使用连接查询,查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级。

相关知识

为了完成本关任务,你需要掌握:如何编写复合条件连接查询语句。

复合条件连接查询

  • 复合条件连接查询,就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确。

如下两张数据表:

employee表数据:

idnamedept_idage
1Nancy318
2Tod222
3Carly119
4Allen224

department表数据:

idname
1开发部
2测试部
3运维部

要求查询员工姓名和所在部门名称,使用内连接查询,将查询结果按照年龄升序排序:

编程要求

在右侧编辑器补充代码,查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级,其中学生的姓名和学生所在班级分别另命名为studentNameclassName

我们为你提供了两张表,内容如下:

tb_student表数据:

idnameclass_idscore
1Emma289
2Mary492
4Kevin176
5Rose368
6James199

tb_class表数据:

idname
1软件1631
2软件1632
3测试1631
4测试1632

测试说明

平台会对你编写的代码进行测试:

预期输出:

 

 

USE School;

########## 查询所有班级里分数在90分以上的学生的姓名和学生的成绩以及学生所在的班级 ##########
#请在此处添加实现代码
########## Begin ##########
select s1.name as studentName,score,s2.name as className 
from tb_student as s1,tb_class as s2 
where s1.class_id=s2.id and s1.score>90 
order by score desc ;;#order by 默认从小到大,order by + asc 默认从小到大,order by+ desc 默认从大到小



########## End ##########

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一个常用的系型数据库管理系统,可以通过连接查询来实现多个数据表之间的查询。 连接查询是指通过连接两个或多个数据表,根据表之间的联条件来获取相数据的查询操作。MySQL支持两种连接查询方式,分别是内连接外连接内连接(Inner Join)是连接两个数据表中的匹配数据,只返回满足连接条件的数据行。可以通过使用键字"JOIN"或者"INNER JOIN"来实现内连接查询,例如: SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段; 外连接外连接)则是连接两个数据表中的匹配数据以及未匹配的数据。MySQL支持左外连接(Left Join)、右外连接(Right Join)和全外连接(Full Join)这三种外连接方式。左外连接(Left Join)是指返回左表中所有行以及能够和右表连接的匹配行,右外连接(Right Join)则返回右表中所有行以及能够和左表连接的匹配行,而全外连接(Full Join)则是返回左表和右表中的所有行。可以通过使用键字"LEFT JOIN"、"RIGHT JOIN"或者"FULL JOIN"来实现外连接查询,例如: SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段; 除了使用连接查询来获取相数据,我们还可以通过使用连接查询来进行数据的添加、更新和删除操作。例如,可以根据连接查询的结果来更新表中的某些数据,或者根据连接查询的结果来删除某些数据。 总之,通过连接查询,我们可以快速、灵活地获取多个数据表之间的相数据,并进行相应的数据操作。在实际应用中,需要根据具体的业务需求和数据表的系来选择合适的连接查询方式,从而实现所需的数据查询和操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值