欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

程序员文章站 2024-02-25 20:21:57
left join 语法用法与实例 mysql left join 语法 sql(mysql) left join 会取得左表(table1)全部记录,即使右表(tab...

left join 语法用法与实例
mysql left join 语法
sql(mysql) left join 会取得左表(table1)全部记录,即使右表(table2)并无对应匹配记录。left join 基本语法如下:

... from table1 left join table2 on condition ...

mysql left join 用法实例
下面是两个原始数据表:
article 文章表:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

user 用户表:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

我们列出所有的文章及对应的所属用户,即使没有用户的文章也列出。
select ... left join ... on 语句如下:

select article.aid,article.title,user.username from article left join user on article.uid = user.uid

返回查询结果如下:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

可以看出来,与 inner join 明显的区别是,左表记录被全部取出,即使右表无对应匹配记录。
提示
这里所谓记录被“全部”取出,是相对于 inner join 的限制来说的。其实可以在上面的 sql 语句后面加个 where 条件或者 limit 等关键字以同一般 sql 语句一样对结果集做一个范围限制。
is null
在上面的例子中,对于右表中没有对应匹配的数据记录,其所有的列都被置为 null,因此要查询这部分记录(如在上面例子中体现为查找 aid=4 这类无对应用户的文章记录),可以附加 is null 条件:

select article.aid,article.title,user.username from article left join user 
on article.uid = user.uid where user.uid is null

right join 语法用法与实例
mysql right join 语法
sql(mysql) right join 会取得右表(table2)全部记录,即使左表(table2)并无对应匹配记录。right join 基本语法如下:

... from table1 right join table2 on condition ...

mysql right join 用法实例
下面是两个原始数据表:
article 文章表:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

user 用户表:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

我们列出所有的用户,以及他们可能拥有的文章。
select ... right join ... on 语句如下:

select article.aid,article.title,user.username from article right join user on article.uid = user.uid

返回查询结果如下:

MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

对比 left join 返回的查询结果,right join 返回的结果与其刚好“相反”。
is null
在上面的例子中,对于左表中没有对应匹配的数据记录,其所有的列都被置为 null,因此要查询这部分记录(如在上面例子中体现为查找 username=jack 这类无对应文章的所有用户),可以附加 is null 条件:

select article.aid,article.title,user.username from article left join user 
on article.uid = user.uid where article.aid is null