相关文章推荐
大力的山羊  ·  错误码与故障诊断 | PingCAP 文档中心·  2 年前    · 
不敢表白的企鹅  ·  springboot 配置多个mq地址-掘金·  2 年前    · 
礼貌的稀饭  ·  pandas 用户定义函数 - Azure ...·  2 年前    · 
爱旅游的冰棍  ·  卡尔曼滤波器是如何运用于多传感器融合的? ...·  3 年前    · 
Code  ›  关于MySQL多表联合查询,你真的会用吗?开发者社区
mysql 外连接 titanic
https://cloud.tencent.com/developer/article/1896480
精明的皮带
2 年前
作者头像
用户7569543
0 篇文章

关于MySQL多表联合查询,你真的会用吗?

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 数据挖掘与AI算法 > 关于MySQL多表联合查询,你真的会用吗?

关于MySQL多表联合查询,你真的会用吗?

作者头像
用户7569543
发布 于 2021-11-02 17:53:05
6K 0
发布 于 2021-11-02 17:53:05
举报

上节课给大家介绍了 MySQL 子查询的基本内容,具体可回顾 MySQL子查询的基本使用方法(四) ,本节课我们准备给大家介绍MySQL的多表联合查询。大家都知道, MySQL多表联合查询包括内连接、外连接、笛卡尔积连接查询三种 。今天我们先重点介绍 常用的外连接与内连接查询,即left join /right join/inner join的基本用法。

常见的两表连接查询的基本语法结构如下:

select 表名.字段名,表名.字段名,表名.字段名,...
from 左表表名 (as)左表别名
left/right/inner join  右表表名 (as) 右表别名 
on 左表.连接字段=右表.连接字段 
where 查询条件;

01

左连接left (outer) join

左连接的定义:左连接全称为左外连接,是外连接的一种。它是以左表为基础,根据ON后给出的连接条件将两表连接起来。结果会将左表所有的记录列出,而右表只列出ON后与左表满足条件的部分。

为了更好地让大家理解,我们还是分别举栗子说明~先回顾一下上节课的titanic表与phone表的基本数据情况。

【titanic乘客基本信息表】

【phone手机品牌表】

【任务1】我们想找出使用华为手机的乘客编号、姓名、性别、年龄和手机品牌。可以使用以下左连接查询实现。

SELECT a.PassengerId,a.name,b.sex,b.age,a.phonebrand
from phone a 
left join titanic b 
on a.PassengerId=b.passengerId
where a.phonebrand="HUAWEI";

查询结果如下:

可以看到,查询结果把左表phone符合华为手机条件的所有查询结果都列出来了,而右表titanic只列出了与左表满足ON连接条件的部分结果(中间两列),其他不符合连接条件的结果均为NULL。

02

右连接right (outer) join

右连接的定义:右连接全称为右外连接,也是外连接的一种。与左连接刚好相反,它是以右表为基础,根据ON后给出的连接条件将两表连接起来。结果会将右表所有的记录列出,而左表只列出ON后与右表满足条件的部分。

【任务2】查找船舱等级为3且存活的乘客编号、姓名、是否存活、船舱等级和手机品牌,可以通过以下右连接查询实现。

SELECT a.passengerId,a.name,b.survived,b.pclass,a.phonebrand
from phone a 
right join titanic b 
on a.PassengerId=b.passengerId
where  b.survived=1
and b.pclass=3;

可以看到,查询结果把右表titanic符合生存且船舱等级为3的条件的乘客都列出来了,而左表phone只列出了与右表满足ON连接条件的部分结果,其他不符合连接条件的结果均为NULL。

03

内连接inner join

内连接是一种一一映射关系,即左右两张表都同时存在的记录才能显示出来,用韦恩图表示是两个集合的交集。

【任务3】查找使用苹果手机并且年龄大于30岁的男性乘客,展示乘客编号,姓名,性别,年龄信息。可以通过以下内连接查询语句实现。

SELECT a.passengerId,a.name,b.sex,b.age
from phone a 
inner  join titanic b 
 
推荐文章
大力的山羊  ·  错误码与故障诊断 | PingCAP 文档中心
2 年前
不敢表白的企鹅  ·  springboot 配置多个mq地址-掘金
2 年前
礼貌的稀饭  ·  pandas 用户定义函数 - Azure Databricks | Microsoft Learn
2 年前
爱旅游的冰棍  ·  卡尔曼滤波器是如何运用于多传感器融合的? - 冯欢 的回答 - 知乎
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号