内外连接知识点
首先在讲解内外连接之前我先铺垫一下SQL的编写和执行顺序:
3、sql编写顺序:select * from join on where group by having order by limit
4、sql执行顺序:from join on where group by having select order by limit
表a
id | name |
---|---|
1 | 小明 |
2 | 小红 |
3 | 小白 |
b表
id | name |
---|---|
1 | 18 |
3 | 19 |
4 | 20 |
1.内连接(INNER JOIN):
内连接是通过匹配两个表之间的共同列,返回满足连接条件的行。只有满足连接条件的行才能作为结果返回。
SELECT a.id, a.name,b.age FROM a INNER JOIN b on a.id = b.id;
内连接还有一种方式就是隐式内连接:
SELECT a.id, a.name,b.age FROM a,b WHERE a.id = b.id;
结果如上:只有满足匹配的行才能出现。
2.外连接(OUTER JOIN):
外连接是在内连接的基础上,虽然也是连接,但是外连接还包括了不满足连接条件的行。
外连接还分为三种类型:左外连接,右外连接,全外连接。
1.左外连接:左表所有行都会返回,右表只返回与左表匹配的行。左表没有匹配上的行,关于右表的字段为null。
SELECT a.id, a.name,b.age FROM a LEFT OUTER JOIN b ON a.id = b.id;
2.右外连接:右边中的所有行都会返回,但是左表只能返回与右表匹配的行。右表没有匹配上的,关于左表的字段为null。
SELECT a.id, a.name,b.age FROM a RIGHT OUTER JOIN b ON a.id = b.id;
3.全外连接:返回左表与右表中的所有行,不管是不是匹配的。
SELECT a.id, a.name,b.age FROM a FULL OUTER JOIN b ON a.id = b.id;
但是MySQL数据库暂不支持这种方式全外连接。
我们可以使用另一种方式替代,就是把左外连接和右外连接UNION合并两个结果集。
SELECT a.id, a.name,b.age FROM a LEFT OUTER JOIN b ON a.id = b.id
UNION
SELECT a.id, a.name,b.age FROM a RIGHT OUTER JOIN b ON a.id = b.id;
总结
内连接和外连接都是用于在SQL中进行表连接操作,将满足连接条件的行连接在一起。
内连接只返回满足连接条件的行,外连接还包括了不满足连接条件的行。
区别:
内连接只返回满足连接条件的行,而外连接还包括了不满足连接条件的行。
内连接的结果集只包含连接的列,而外连接的结果集包含连接的列和不满足连接条件的列(为空值或NULL)。