1. 交叉连接 (cross join)
假设有t1和t2两张表,交叉连接最简单的即是
select * from t1,t2;
它会把t1表中的每一行记录和t2表中的所有记录相关联。
我们把这种没有任何限制的条件的查询方式称之为交叉连接,可以看到,任意一个表的数据增加一行,其交叉连接的查询记录都会增加很多。
2. 内连接
内连接表示两张表中同时符合某种条件的数据
select * from t1,t2 where t1.id = t2.id;
这种写法其实是一种隐式的内连接写法,可转化为
select * from t1 inner join t2 on t1.id = t2.id;
(等值连接)
select * from t1 inner join t2 on t1.id > t2.id
(不等连接)
这种连接用on指明条件
3. 外连接
外连接分为两种,左外连接与右外连接,我们只要搞明白其中的任意一个的意思即可。
select * from t1 left join t2 on t1.id = t2.id;
这里以t1为主表,t2为从表,所以搜索出来的数据会有t1的所有数据即使t2没有数据,也会列出来,这时相关字段的值为null
显示的时候,哪个表在前,该表的列就在前
还有一种情况:就是当t1中只有一行数据,但t2中有多行数据时,这时候也会显示多行数据。
4. 多行查询
联合查询比较容易理解,把联合查询理解成把多个查询语句的查询结果集中在一起显示。
select * from t1 union select * from t2;
这里要求select的列数要相等,同时字段名与t1的相同
5. 全连接
全连接可以理解为没有主表之分(相对于外连接),两个表的数据都要查询出来
mysql中没有全连接,可以先左连接,然后右连接,再将两者的查询记录union起来。