首先我们来创建两个数据表:
结构:
我们用内连接来查看一下:
select * from test1 join test2 on test1.aid=test2.aid;
由于内连接是等值连接,所以结果是显示左右表中匹配的数据
再用左连接查看:
可以看到,左连接先取出test1的所有数据,再加上与test2和test1匹配的数据,如果左连接的话,一旦aid不相同,那么就会整行数据都显示NULL
至于右连接,实际上和左连接类似,只是参照表不同
另外,left outer和left 的结果是一样的,假如输入
select * from test1 left outer join test2 on test1.aid=test2.aid;
结果也是和left的一样。除了返回符合连接条件的结果之外,还需要显示左表中不符合连接条件的数据列,相对应使用NULL对应
交叉连接
select * from test1 cross join test2;
和下面等效:
select a.*,b.* from test1 a,test2 b a.aid=b.aid;
结果就是两个表相乘
这样一看,好像交叉连接的意义不大,但是交叉连接可以用在行显示转换成列显示
全连接
full join或full outer join
全连接就是在匹配值的基础上将左右表的未匹配数据都加上
select * from test1 full join test2 on test1.aid=test2.aid;
但是你会发现这样输入之后会报错,原因在于MySQL中并不支持full join,那么怎么办呢?
等效的写法是:
select * from test1 left join test2 on test1.aid=test2.aid
union
select * from test1 right join test2 on test1.aid=test2.aid;
自然连接
nacture join
要求两个表中进行比较的必须是相同的属性列,不需要添加连接条件,并且在结果中消除重复的属性列