<10>mysql:多表连接
原理
将多个表通过笛卡尔积形成一个虚表,再根据查询条件筛选符合条件的数据
笛卡尔积
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员
例:
X = {a, b}
Y = {1, 2, 3}
X × Y = {(a,1), (a,2), (a, 3), (b,1), (b,2), (b,3)}
...
表连接
语法
select ... from <左表> <连接类型> <右表> on <连接条件> ...
连接类型
| 连接类型 | 语法 | 笛卡尔积 | 说明 |
|---|---|---|---|
| 内连接 | inner join | ![]() |
获取两个表中字段相互匹配关系的记录,即两表记录都不为null才会返回 |
| 左外连接 | left join | ![]() |
获取左表所有记录,右表为空的字段补null |
| 右外连接 | right join | ![]() |
获取右表所有记录,左表为空的字段补null |
| 全链接 | MySQL不支持全连接 | - | - |
连接结果
符合连接条件的,合并两个表的各个列的临时表,列名相同时以表名区分
多表联查
select ...
from
<左表>
<连接类型> <右表1> on <连接条件>
<连接类型> <右表2> on <连接条件>
...
实例
演示表

查询演示
内连接
select * from Person inner join Address on Person.person_id=Address.person_id;

左外连接
select * from Person left join Address on Person.person_id=Address.person_id;

右外连接
select * from Person right join Address on Person.person_id=Address.person_id;





浙公网安备 33010602011771号