前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >产品经理从0开始学SQL(四)

产品经理从0开始学SQL(四)

作者头像
产品的技术小课
发布2021-11-02 14:44:03
3230
发布2021-11-02 14:44:03
举报
文章被收录于专栏:产品的技术小课

如果我们需要从多个表的组合匹配关系中得出结果,那么就需要使用连接运算。

连接运算分为2种类型,分别是内连接和外连接。

No.1

内连接

语法:join后面跟着的是需要连接的表名,on后面跟着的是两个表关联起来的条件。

代码语言:javascript
复制
join {表名} on {表1字段} = {表2字段}

举个例子:假设有2张表,分别是t_student学生信息表和t_course课程表。

t_student:

t_course:

查询条件:找出所有学生选修了的课程信息 以前的写法:

代码语言:javascript
复制
select * from t_student,t_course 
where t_student.course_id=t_course.id

使用内连接的写法:

代码语言:javascript
复制
select * from t_student join t_course on 
t_student.course_id=t_course.id;

查询结果:

join..on 操作符把2个表在条件属性下取值相同的元组搜出来。需要注意的是,学生表中陈红这名学生没有选修任何课程,所以她的记录没有出现在结果表中,内连接会把2个关系没有匹配的元组 “丢失” 掉。

我们来看下查询结果中字段的排序,首先出现的是第一个表中的所有字段,紧接着的才是第二个表中的所有字段。

如果我们想找出所有学生的信息和选修的课程该怎么办呢?这时我们可以考虑使用外连接了。

No.2

外连接

外连接还分为三种子类型:

左外连接(left outer join): 只保留出现在连接符左边表的元组。

右外连接(right outer join): 只保留出现在连接符右边表的元组。

全外连接(full outer join):保留出现在2个表中的元组。

1、左外连接

我们继续上面的例子,找出所有学生选修的课程情况:

代码语言:javascript
复制
select * from t_student 
left outer join t_course on t_student.course_id=t_course.id

查询结果:可以看到结果中陈红这名同学是没有选修任何课程的,但是也出现在了结果表中。

左外连接会以左边表格元组为主,如果是没有找到匹配关系的元组,则左边表格的字段继续保留,右边表格的字段以 null 来填充。

2、右外连接

右外连接和左外连接是相对称的。举个例子:找出所有课程的选修情况:

代码语言:javascript
复制
select * from t_student 
right join t_course on t_student.course_id=t_course.id;

查询结果:可以看出算法和政治这2门课是没有学生选修的。

右外连接会以右边表格元组为主,如果是没有找到匹配关系的元组,则右边表格的字段继续保留,左边表格的字段以 null 来填充。

3、全外连接

全外连接是左外连接和右外连接的组合。如果想找出所有学生以及他们选修的所有课程列表,则就可以使用全外连接。但是需要注意的是Mysql中不支持全外连接的语法。我们可以使用 union 操作符代替。

代码语言:javascript
复制
(
select * from t_student  
left join t_course on t_student.course_id=t_course.id
) 
union
(select * from t_student 
right join t_course on t_student.course_id=t_course.id
)

查询结果:可以看到没有选修的课程和没有选修课程的学生信息都出现了。

注意:外连接可以省略outer这个关键字,直接写left...join..、right...join...就可以啦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 产品的技术小课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档