联接:通过连接运算符实现同时查询多张表。
1.内联接:
join on
只显示有关联的数据(只返回符合条件的table1和table2的列)
2.外连接
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
3.自联接
连接的表都是同一个表,同样可以由内连接,外连接各种组合方式,按实际应用去组合。
理解自联接的例子:
create table t_agent(
pk_agent_id int primary key auto_increment,
f_agent_name varchar(100) not null,
f_relation varchar(255),
fk_parent_agent int
)engine=innodb default charset=utf8;
alter table t_agent
add constraint fk_agent_self_ref foreign key(fk_parent_agent)
references t_agent(pk_agent_id);
insert into t_agent VALUES (null,'西南地区总代理','四川省',null);
insert into t_agent VALUES (null,'四川省二级代理','四川省成都市',1);
insert into t_agent VALUES (null,'云南省二级代理','云南省昆明市',1);
insert into t_agent VALUES (null,'贵州省二级代理','贵州省贵阳市',1);
insert into t_agent VALUES (null,'四川省成都市三级代理','四川省成都市锦江区',2);
insert into t_agent VALUES (null,'四川省成都市三级代理','四川省成都市成华区',2);
insert into t_agent VALUES (null,'四川省成都市三级代理','四川省成都市高新区',2);
-- 所有的代理商及其父级代理的名称
select a.f_agent_name 代理商名称, b.f_agent_name 父级代理商名称
from t_agent a left join t_agent b
on a.fk_parent_agent = b.pk_agent_id;
-- 获取所有代理商及其直属的子代理商数量
select b.pk_agent_id,b.f_agent_name 代理商, count(a.f_agent_name) 子代理商
FROM t_agent a right join t_agent b
on a.fk_parent_agent = b.pk_agent_id
group by b.f_agent_name
order by b.pk_agent_id;