在操作数据库的时候时常会进行多表的关联,也就是常说的联合查询。联合查询的sql是需要一定优化的,这个过程数据库的查询解析器会帮我们完成一部分,这并不意味着,我们可以书写低质量的sql。在联合查询的时候,涉及到多表的笛卡尔积等概念,而这些sql操作无不是对数据进行筛选、排序等操作,最常见的三种方式分别为:
- NestedLoop,嵌套循环
- MergeSort,归并排序(这里的归并,不单纯是对一组数据进行归并,进行的是关联归并)
- Hash,哈希散列
而我们再做关联操作、分组操作、去重操作时,都是会设计到排序的,我会再下篇中简介常见操作的实现原理,本篇中,主要介绍下,left join、right join、full join以及自连接等操作。
一、一些简单的关联操作
1.1 数据源
准备了两张表,一张为Message表,表中的字段分别代表:
_messageId:Message表的PK
_id:User的Id字段
_message:消息实体