这篇博客主要讲join的用法,这也是数据库查询操作中比较基础且重要的知识点。
join分为内连接(inner join)和外连接(outer join)。
外连接分为外连接(outer join)、左连接(left join)、右连接(right join)和全连接(full join)。
我们进行多表查询的时候通常会利用笛卡尔积进行多种表的组合。
通过一下两张表进行举例。
PersonId | FirstName | LastName |
---|---|---|
1 | John | Allan |
AddressId | PersonId | City | State |
---|---|---|---|
1 | 2 | new york city | new york |
目录
一、内连接
内连接查询返回满足条件的所有记录,默认情况下没有指定某种连接,则为内连接。
操作语句:
select FirstName,LastName,City,State from Person inner join Address on Person.PersonId=Address.PersonId;
查询结果为Empty set (0.00 sec)
二、外连接
1.左连接
左连接又称左外连接(left outer join),不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符左侧表的其他行。
操作语句:
select FirstName,LastName,City,State from Person left join Address on Person.PersonId=Address.PersonId;
查询结果为:
FirstName | LastName | City | State |
---|---|---|---|
John | Allan | NULL | NULL |
2.右连接
右连接又称右外连接(right outer join),不仅返回满足条件的所有记录,而且还会返回不满足连接条件的连接操作符右侧表的其他行。
操作语句:
select FirstName,LastName,City,State from Person right join Address on Person.PersonId=Address.PersonId;
查询结果为:
FirstName | LastName | City | State |
---|---|---|---|
NULL | NULL | new york city | new city |
3.外连接
外连接就是求两个集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表和右表中剩余的记录。不过MySql是不支持outer join的,我们可以通过左连接和右连接结果的union操作来实现。
操作语句:
select FirstName,LastName,City,State from Person left join Address on Person.PersonId=Address.PersonId union select FirstName,LastName,City,State from Person right join Address on Person.PersonId=Address.PersonId;
查询结果为:
FirstName | LastName | City | State |
---|---|---|---|
John | Allan | NULL | NULL |
NULL | NULL | new york city | new york |
4.全连接
全连接查询不仅返回满足条件的所有记录,而且还会返回不满足连接条件的其他行。不过mysql默认不支持full join。