「这是我参与11月更文挑战的第 20 天,活动详情查看:2021最后一次更文挑战」
在 mysql 的查询操作中,我们一般都是在一张表上做数据查询,但有的时候,又需要我们联合上多张表来做数据获取
举个例子,我们需要获取 a 表中的数据,但是需要限定 a 表中的外键字段 b_id 对应的关联记录中的状态为指定值。这个需求可以拆分为 2 个操作
- 先查询 b 中的记录数据,根据
status=1
过滤,拿到符合要求的 id - 在 a 表中查询数据,使用
where
过滤,限定他的外键 b_id 必须在上一个操作的结果集中
像上述的操作可以合并为 1 条 sql,即我们可以吧第一步 sql 的结果,作为一个临时表,然后供第二步的 sql 使用
1 | sql复制代码select *from a |
像上面的这种操作,准确的描述,应该叫表的嵌套查询。他将上一步查询得到的结果集,作为一个条件,供下一个表使用,但这种操作,限定返回的结果只有 a 的字段,不涉及到 b 的字段
现在,我们在返回 a 表的字段的时候,同时需要部分 b 表的数据,就需要联合表a,表b
然后根据给定的条件,过滤得到结果集
1 | sql复制代码SELECT |
像这种操作,其实就是 mysql 的内连接查询(inner join)
sql 的模式为:
在 select
和 from
之间,添加我们需要连接查询的表,在后面使用 where
条件来限定我们需求的结果,必备的条件就是多个表之间的连接判断,如上述的判断就是 a.b_id = b.id
以上一篇文章 # Mysql 温故知新系列「group by | having」 中提到的分组案例,我们拿到了重复的条码,但需要分析一下这些重复条码的记录都分布在哪些产线上
先统计重复的条码,获取到条码后,去匹配有哪些记录使用了这些条码,再对过滤得到的结果按照产线进行分组统计,整个逻辑非常清楚
现在我表演个仙术:
1 | sql复制代码SELECT |
sql 看着有点长,其实就是上述分析思路的多次嵌套查询,联表查询
本文主要讲的日常 sql 中的稍微复杂一点点的联表查询,下一章安排 mysql 的 join 关键字,讲讲他的左连接,右连接,内连接,外连接等具体的细节
原创文章,未经允许,禁止转载
– by 安逸的咸鱼
本文转载自: 掘金