MySQL子查询的基本使用方法(四)

2021-10-20 16:57:28 浏览数 (1)

上节课我们给大家介绍了MySQL分组查询与聚合函数的使用方法,具体可回顾MySQL分组查询与聚合函数的使用方法(三)。本节课我们将介绍where条件查询中的IN关键字子查询的使用方法。

在MySQL中,子查询我们也称为嵌套查询。并且子查询语句一般放在条件查询关键词where之后,其基本语法结构如下。

代码语言:javascript复制
SELECT  <列名> FROM 表名
WHERE <条件查询列名>  IN (子查询语句);

假设现在我们新增了一个表phone,其中记录了部分乘客目前在用的手机品牌,如下所示。

【任务1】查找使用华为手机的乘客编号,姓名、性别以及年龄信息。需要结合使用titanic以及phone两个表的信息,通过IN子查询实现。

代码语言:javascript复制
select PassengerId,name,sex,age from titanic
where PassengerId IN
(SELECT PassengerId from phone 
where phonebrand="HUAWEI");

查询结果如下所示

语法解析:

首先通过IN子查询从phone表中找出使用华为手机的乘客编号(SELECT PassengerId from phone where phonebrand='HUAWEI'),

然后在主查询中通过where条件查询限制乘客编号必须为子查询的乘客编号( where PassengerId in ( SELECT PassengerId from phone where phonebrand='HUAWEI'),

最后将符合查询条件的乘客编号,姓名、性别以及年龄信息展示出来(select PassengerId,name,sex,age from titanic)。

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

代码语言:javascript复制
select PassengerId,name,sex,age from titanic
where PassengerId in
(SELECT PassengerId from phone 
where phonebrand="iPhone")
and age>30
and sex='male';

查询结果如下所示

语法解析:

首先通过IN子查询从phone表中找出使用苹果手机的乘客编号(SELECT PassengerId from phone where phonebrand='iPhone'),

并且限制主查询的乘客编号为子查询的乘客编号,同时限制年龄大于30,性别为male( where PassengerId in (SELECT PassengerId from phone where phonebrand='iPhone') and age>30 and sex='male' ),

最后将符合查询条件的乘客编号,姓名、性别以及年龄信息展示出来(select PassengerId,name,sex,age from titanic)。

【任务3】查找船舱等级为3且存活的乘客姓名以及手机品牌,可以通过以下子查询语句进行。

代码语言:javascript复制
select name,phonebrand from phone
where PassengerId IN
(SELECT PassengerId from titanic 
where pclass=3
and survived=1);

以下是查询结果

语法解析:

首先通过IN子查询从titanic表中找出船舱等级为3且幸存的乘客编号(SELECT PassengerId from titanic where pclass=3 and survived=1 ),

并且限制主查询的乘客编号为子查询的乘客编号( where PassengerId in (SELECT PassengerId from titanic where pclass=3 and survived=1),

最后将符合查询条件的乘客姓名,手机品牌列展示出来(SELECT name,phonebrand FROM phone)。

结合以上三个案例,聪明的同学应该看出来了,能将titanic、phone两个表联系起来的关键在于主键PassengerId,如果两个表中没有PassengerId这个主键字段,我们就无法实现以上的子查询。

好了,今天的内容介绍到这里。下节课开始,我们将给大家介绍MySQL中非常常用的多表联合查询以及子查询与多表联合查询的区别,敬请期待!


想学习更多数据分析、数据挖掘干货知识,请关注公众号

0 人点赞