在mysql中,用的最多的就是查询就是join连接查询
join连接查询分为交叉连接 cross join
,内连接inner join
,外连接;
外连接又分为左连接left(out) join
,右连接right(out) join
,全外连接full (outer) join
交叉连接cross join
含义:
将两个表的每一行都进行两两对接之后的所有数据行所构成的结果数据;
通常,此时,结果数据中的行数,就是两个表的原先行数的乘积;
这种连接,又称为“笛卡尔积”;
形式:
//select * from 表1 cross join 表2
SELECT * FROM table1 CROSS JOIN tables2;
表1:
表2:
cross join后的结果:
内连接 inner join
含义:
将两个表的每一行进行两两对接之后的所有数据中,取出满足所给定的条件那些数据所得到的结果;
通常,此时,结果数据中的行数,不一定是多少,而是完全看具体条件的设定;
形式:
// select * from 表1 inner join 表2 on 表1.字段1 = 表2.字段2
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
原表:
inner join
连接查询的作用,就是找出这些表的连接数据结果中有意义的那些行
左外连接 left [outer] join
含义:
将两个表的内连接所得到的结果数据,再加上左边表中,那些不能满足连接条件的数据行所得到的结果。其中,后一部分数据的“右边部分”,填充空值(null);
形式:
//select * from 表1 left 【outer】 join 表2 on 表1.字段1 = 表2.字段2
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;
右外连接 right [outer] join
含义:
将两个表的内连接所得到的结果数据,再加上右边表中,那些不能满足连接条件的数据行所得到的结果。其中,后一部分数据的“左边部分”,填充空值(null);
形式:
//select * from 表1 right 【outer】 join 表2 on 表1.字段1 = 表2.字段2
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;
全外连接 full [outer] join
含义:
将两个表的内连接所得到的结果数据,
再加上左边表中,那些不能满足连接条件的数据行所得到的结果。其中“右边部分”,填充空值(null);
再加上右边表中,那些不能满足连接条件的数据行所得到的结果。其中“左边部分”,填充空值(null);
目前,mysql本身还没有实现该连接的语法形式!!!
实际上,在实际应用中基本上是多个表的连接,
形式为:
select * from 表1
inner join 表2 on 表1.字段1 = 表2.字段2
inner join 表3 on 表3.字段3 = 表1或表2的某字段
inner join 表4 on 表4字段4 = 表1或表2或表3的某字段
where 条件
可见,这样就可以将更多表连接起来,称为一个整体。
总体上,其实可以理解为:每次两个表连接完之后,都可以当做“新的表数据结果”,继续跟后续的一个表进行连接,再得到新的表数据结果,在继续跟后续连接。