ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 关联查询 > * 交叉连接( cross join ) > * 自然连接( natural join ) > * 内连接( inner join )可简写为:join > * 外连接( left join / right join );left outer join 简写为:left join > * 联合查询( union / union all) > * 全连接( full join );mysql 不支持全连接 > mysql对任何关联都执行嵌套循环关联操作,考虑性能影响 **交叉连接** ``` select * from a,b(,c) 或者 select * from a cross join b (cross join c) ``` * 没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义,很少使用 **自然连接** ``` select * from a natural join b ``` * **自然连接是一种特殊的等值连接**,他要求两个关系表中进行连接的必须是相同的属性列(名字相同),无须添加连接条件,**并且在结果中消除重复的属性列。** **内连接** ``` select * from a,b wher a.id = b.id 或者 select * from a inner join b on a.id = b.id ``` * 多表中同时符合某种条件的数据记录的集合 * 等值连接:on a.id = b.id * 不等值连接:on a.id > b.id * 自连接: `select * from a t1 inner join a t2 on t1.id = t2.pid` **外连接** ``` select * from a left join b on a.id = b.id ``` * 左外连接:left join, 以左表为主,先查询出左表,按照 on 后的关联条件匹配右表,没有匹配到用 `null` 填充 * 右外连接:right join, 以右表为主,先查询出右表,按照 on 后的关联条件匹配左表,没有匹配到用 `null` 填充 **联合查询** ``` select * from a union select * from b ``` * 把多个结果集集中在一起,`union 前`的结果为基准,需注意联合查询的列数要相等,相同的记录行会合并 * 使用 `union all` 不会合并重复的记录行 **全连接** ``` select * from a left join b on a.id = b.id union select * from a right join b on a.id = b.id ``` * mysql 不支持全连接,通过 `left join` 和 `union` 和 `right join` 联合使用 实现 **嵌套查询** 用一条sql语句的结果作为另外一条sql语句的条件 `select * from a where id in (select id from b)`