MySQL的LEFT JOIN和RIGHT JOIN都是外连接(Outer Join)的一种形式,意味着即使没有匹配的行,也会返回从另一张表(左连接的情况是左表,右连接的情况是右表)中的所有行。
LEFT JOIN
左连接(LEFT JOIN)返回左表中的所有行,以及右表中的匹配行。如果右表中没有与左表中的行匹配的行,则返回NULL值。
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
示例:
假设有两张表,一个是用户表(users),一个是评论表(comments),分别如下:
users表:
id | name |
---|---|
1 | John |
2 | Peter |
3 | Mary |
comments表:
id | comment | user_id |
---|---|---|
1 | Good | 1 |
2 | Great | 1 |
3 | Nice | 3 |
查询用户表与评论表的LEFT JOIN结果:
SELECT users.name, comments.comment
FROM users
LEFT JOIN comments
ON users.id = comments.user_id;
输出结果:
name | comment |
---|---|
John | Good |
John | Great |
Mary | Nice |
Peter | NULL |
输出结果中,左连接结果显示了users表的全部三行与comments表的匹配行,以及users表中Peter行没有comment匹配的NULL值。
RIGHT JOIN
右连接(RIGHT JOIN)返回右表中的所有行,以及左表中的匹配行。如果左表中没有与右表中的行匹配的行,则返回NULL值。
语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
示例:
与之前的例子类似,现在将查询语句中的LEFT JOIN换成RIGHT JOIN,来查询匹配用户表和评论表的右连接结果:
SELECT users.name, comments.comment
FROM users
RIGHT JOIN comments
ON users.id = comments.user_id;
输出结果:
name | comment |
---|---|
John | Good |
John | Great |
Mary | Nice |
NULL | Love |
输出结果中,右连接结果显示了comments表的全部三行与users表的匹配行,以及comments表中Love行没有对应匹配的NULL值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MySQL LEFT/RIGHT JOIN:外连接 - Python技术站