暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

外联接查询

SQL新手 2022-12-08
221

联接(OUTTER JOIN)包括左联接(LEFT JOIN)和右联接(RIGHT JOIN)。外联接返回满足联接条件的所有行,并返回一个表中的部分或全部行,而另一个表中没有满足联接条件的行,扩展了简单联接的结果。

外联接语法

外联接一般包括主表和从表。外联接查询结果为主表中所有记录。如果从表中有和它匹配的,则显示匹配的值,这部分相当于内联接 查询结果;如果从表中没有和它匹配的,则显示 NULL

外联接的 SQL 语法格式如下:

SELECT select_list FROM table_name1 [ LEFT|RIGHT ] JOIN table_name2 ON join_condition
[ WHERE query_condition ]
[ ORDER BY column_list ]

其中,table_name1 为主表,table_name2 为从表。

左联接

当需要 JOIN 返回的数据除了符合联接条件和过滤条件的数据外,还包括左表里满足左表的过滤条件但不满足联接条件的数据时,就可以使用左外联接(LEFT OUTER JOIN),也可以简写为左联接(LEFT JOIN)。左联接返回的结果里属于右表的数据如果不存在,则该列返回 NULL

示例 1:简单左联接查询

obclient> SELECT tbl1.id, tbl1.name, tbl2.id, tbl2.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
|  1 | A1   |  1 | B2   |
|  2 | B1   | NULL | NULL |
|  4 | D1   | NULL | NULL |
|  6 | F1   |  6 | F2   |
|  8 | H1   | NULL | NULL |
| 10 | J1   | NULL | NULL |
+----+------+----+------+
6 rows in set

示例 2:使用左联接获取联接结果,然后再使用 WHERE 子句对联接结果进行过滤

obclient> SELECT tbl1.id, tbl1.name, tbl2.id, tbl2.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id WHERE tbl2.id IS NOT NULL;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
|  1 | A1   |  1 | B2   |
|  6 | F1   |  6 | F2   |
+----+------+----+------+
2 rows in set

右联接

如果 JOIN 返回的数据除了符合联接条件和过滤条件的数据外,还包括右表里满足右表的过滤条件但不满足联接条件的数据时,就可以使用右外联接(RIGHT OUTER JOIN),或简写为右联接(RIGHT JOIN)。右联接返回的结果里属于左表的数据如果不存在,则该列返回 NULL

示例 1:简单右联接查询

obclient> SELECT tbl1.id, tbl1.name, tbl2.id, tbl2.name FROM tbl1 RIGHT JOIN tbl2 ON tbl1.id=tbl2.id;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
|  1 | A1   |  1 | B2   |
| NULL | NULL |  3 | C2   |
|  6 | F1   |  6 | F2   |
| NULL | NULL |  9 | I2   |
+----+------+----+------+
4 rows in set

示例 2:使用右联接获取联接结果,然后再使用 WHERE 子句对联接结果进行过滤

obclient> SELECT tbl1.id, tbl1.name, tbl2.id, tbl2.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id=tbl2.id WHERE tbl1.id IS NOT NULL;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
|  1 | A1   |  1 | B2   |
|  6 | F1   |  6 | F2   |
+----+------+----+------+
2 rows in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论