连接
连接大致分为内连接、外连接、交叉连接、自连接等等。
外连接就是一个表当做基表,然后根据匹配条件来显示其他表的内容的连接。它又可以分为左连接、右连接、全连接。
#左连接 将表1作为基表进行匹配
select 列名列表 from 表1 left join 表2 其他条件;
select * from aa left join bb on aa.id = bb.id;
select * from aa left join bb on aa.id = bb.id where aa.id = bb.id;//on为左连接提供一个规则,where则用于筛选结果
#右连接就是将left换成right即可
select * from aa right join bb on aa.id = bb.id;
#全连接就是将左连接left换成full即可,但是MySQLB并不支持全连接,如果使用则变成交叉连接一样的结果
#全连接就是将左右连接的结果做一个并集的运算
(select * from aa left join bb on aa.id = bb.id) union (select * from aa right join bb on aa.id = bb.id);
select * from aa full join bb;
#交叉连接 就是表与表之间进行笛卡尔乘积,主要就是可以再结果中包含所有的情况。
#可以使用cross join或者中间加,号即可,但是使用逗号的时候,后面使用on会报错。
select * from aa cross join bb;
select * from aa ,bb where aa.id = bb.id;
#内连接 不指定条件的内连接就是交叉连接,一般会使用on来指定相应的条件。也分为三种均等连接、不等连接、自然连接。
select * from aa inner join bb on aa.id = bb.id;
#using 关键字等价于等号,但是他会将aa的id和bb的id并成一列。
select * from aa inner join bb using(id);
#自然连接 natural join
就是一种特殊的等值连接,即在结果集中把重复的属性列去掉,和使用using关键字的效果是一样的。
select * from aa natural join cc;
#自连接 自己和自己连接,相当于把一个表当成两个表使用
select a.id,a.name,a.dept,b.name from staff a left join staff b on a.dept = b.dept where a.name != b.name order by a.ids