下面是两个原始数据表:
| aid | title | content | uid |
|---|---|---|---|
| 1 | 文章1 | 文章1正文内容... | 1 |
| 2 | 文章2 | 文章2正文内容... | 1 |
| 3 | 文章3 | 文章3正文内容... | 2 |
| 4 | 文章4 | 文章4正文内容... | 4 |
| uid | username | |
|---|---|---|
| 1 | admin | admin@520mg.com |
| 2 | 小明 | xiao@163.com |
| 3 | Jack | jack@gmail.com |
我们列出所有的用户,以及他们可能拥有的文章。
SELECT ... RIGHT JOIN ... ON 语句如下:
SELECT article.aid,article.title,user.username FROM article RIGHT JOIN user ON article.uid = user.uid
返回查询结果如下:
| aid | title | username |
|---|---|---|
| 1 | 文章1 | admin |
| 2 | 文章2 | admin |
| 3 | 文章3 | 小明 |
| NULL | NULL | Jack |
对比 LEFT JOIN 返回的查询结果,RIGHT JOIN 返回的结果与其刚好“相反”。
在上面的例子中,对于左表中没有对应匹配的数据记录,其所有的列都被置为 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