文章目录
数据库表的连接方式
先总体概述一下:一般用的是join 和 union
1. 笛卡尔积:join
2. 内连接:inner join on
3. 外连接:全外连接(full join on),左外连接(left join on),右外连接(right join on)
4. 联合查询:Union 和Union all
用于测试的两张表:
1.笛卡尔积 (join)
两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。
select * from t1 join t2
结果:
2.内连接 (inner join on)
两表关联,保留两表中交集的记录。
select * from t1 inner join t2 on t1.id = t2.id;
结果如下:
3.外连接
3.1 全外连接(full join on)
两表关联,两表的内容均保留,没有关联的字段用null表示。
语法
oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。
(1)mysql
select * from t1 full join t2 on t1.id = t2.id
(2)oracle
select * from t1 left join t2 on t1.id = t2.id
union
select * from t1 right join t2 on t1.id = t2.id;
结果:
3.2 左外连接(left join on)
两表关联,左表全部保留,右表关联不上用null表示。
select * from t1 left join t2 on t1.id = t2.id
结果如下:
3.3 右外连接(right join on)
两表关联,右表全部保留,左表关联不上用null表示。
select * from t1 right join t2 on t1.id = t2.id
结果:
4. 联合查询
用于测试的两张表:
4.1 Union
- 当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,mysql 会把所有的记录返回,且效率高于union 。
- union 常用与数据类似的两张或多张表查询,如不同的数据分类表,或者是数据历史表等
查询两张表中的文章 id 号及标题,并去掉重复记录:
SELECT aid,title FROM article UNION SELECT bid,title FROM blog
4.2 Union all
查询两张表中的文章 id 号及标题,并返回所有记录:
SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog