A表
B表
1. --内连接 把匹配的信息全部查出来
select * from A a inner join B b on a.id = b.id;
获取A表和B表中id相对应的数据(仅显示id对应的匹配数据)
2. --左连接 包含左边表所有记录,右边所有的匹配的记录,如果没有则用空补齐(简写的时候+在右边)(三种写法都可以)
select * from A a left join B b on a.id = b.id;
select * from A a left outer join B b on a.id = b.id;
select * from A a,B b where a.id = b.id(+);
(查询A表所有数据,查询B表符合条件数据,,如果没有使用空补齐,如果B表数据多,删除不匹配数据)
(A表数据多,B表数据少)
(A表在左,B表在右)
将A、B表互换位置
(A表数据多,B表数据少)
(B表在左,A表在右)
select * from B b left join A a on a.ID = b.ID;
(查询B表所有数据,查询A表符合条件数据,如果没有使用空补齐,如果A表数据多,删除不匹配数据)
3. --right join 右连接 包括右边表所有记录,匹配左边表的记录,如果没有则以空补齐(简写的时候+在左边)(两种写法)
select * from A a right join B b on a.id = b.id;
select * from A a, B b where a.id(+) = b.id;
(A表数据多,B表数据少)
(A表在左,B表在右)
(查询B表所有数据,查询A表符合条件数据,如果没有使用空补齐,如果A表数据多,删除不匹配数据)
select * from B b right join A a on a.ID = b.ID;
(A表数据多,B表数据少)
(B表在左,A表在右)
(查询A表所有数据,查询B表符合条件数据,,如果没有使用空补齐,如果B表数据多,删除不匹配数据)
从结果看来:
select * from A a left join B b on a.id = b.id;
和
select * from B b right join A a on a.ID = b.ID;
查询结果结构相同,但是A、B表的顺序不同
select * from B b left join A a on a.ID = b.ID;
和
select * from A a right join B b on a.id = b.id;
查询结果结构相同,但是A、B表的顺序不同
4. --full join 全连接 意思是左右表所有的记录全部显示出来
select * from A a full join B b on a.id = b.id;
select * from B b full join A a on a.id = b.id;