🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[连接](http://www.kancloud.cn/aakng/mysql/211262) [TOC=1,3] 很多操作都是在两个表中操作的,比如之前的子查询和联合,连接也是多表操作,是用来连接多个表。 1、外连接 外连接就是用一个表做基表,另个表为附表,然后根据匹配条件来显示附表内容。通常分为: ① 左(外)连接 用左边表当标准,所以左表全部显示,右表部分显示,右表找不到匹配的用 NULL 补齐。 select * from aa left (outer) join bb on bb.id = aa.id; ps:on 与 where 的区别: on 出现顺序在 where 前面,作用也不同,on 是为连接提供一个准则,而 where 用于筛选结果集。 on 条件还可以用一些比较运算符。 ② 右(外)连接 和左连接一样。 ③ 全(外)连接 全连接相当于是把左连接和右连接结果集联合起来,mysql 并不支持全连接,可以通过这种方式来得到类似的效果。 select * from aa full join bb; 2、内连接 使用 inner join 来表示,内连接是最均衡的连接,他可以用一个 on 条件来指定构造该连接的条件。 内连接使用等号的情况是最多而且最普遍的,mysql 提供了一个简化的操作语法,把 on 子句换成 using(字段名) 即可。比如: select * from aa inner join bb using(id); #就是把 aa 和 bb 中 id 相等的行合并为一行,然后放入结果集中。 ps: 如果内连接不指定任何条件,就会变成交叉连接。 内连接分为三类: ① 等值连接 在 on 子句中使用等号来进行连接,使用情况比较多。 ② 不等连接 在 on 子句中不使用等号来进行连接。 ③ 自然连接 它是一种特殊的等值连接,在结果集中会把重复的属性列去掉,使用 natural join 时,无需指定连接时的一些操作,因为这些都是自然进行的; 使用 using 和自然连接的效果是一样的。 3、交叉连接 交叉连接就是表与表进行笛卡尔乘积,使用 cross join,也可以什么都不用,直接用,分割。 他可以用于多个表,当结果集数据量较大的时候,使用 where 来筛选结果集。 select * from aa cross join bb; select * from aa,bb,cc; ps: 在使用,的时候,不能用 on 条件来限定连接。 4、自连接 自己和自己连接,相当于把一张表当两张表来使用。在本表中找一些信息,不实用连接又很难找到(不考虑子查询情况下)时用自连接; 在 on 子句中使用等号来进行连接。