数据库运维
记录DBA学习成长历程

MySQL内连接,左连接,右连接

文章目录
1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 
     1)左外链接:LEFT JOIN
 左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则
在相关联的结果集行中右表的所有选择列表列均为空值。
     2)右外链接:RIGHT JOIN 
 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
举例说明:创建两个表
3306 [world]>select * from a;
 +-----+-------+
 | Aid | Aname |
 +-----+-------+
 |   1 | A1    |
 |   2 | A2    |
 |   3 | A3    |
 |   4 | A4    |
 |   5 | A5    |
 |   6 | A6    |
 |   7 | A7    |
 |   8 | A8    |
 |   9 | A9    |
 +-----+-------+
 9 rows in set (0.00 sec)
3306 [world]>select * from b;
 +------+---------+
 | Bbid | Bnameid |
 +------+---------+
 |  100 |       2 |
 |  101 |       6 |
 |  102 |       3 |
 |  103 |       7 |
 |  104 |       6 |
 |  105 |       8 |
 |  106 |       2 |
 |  107 |       2 |
 |  108 |      11 |
 +------+---------+
 9 rows in set (0.00 sec)

内连接:

 利用内连接可获取两表的公共部分的记录 ,即图中的共有数据集
3306 [world]>Select * from a JOIN b ON a.Aid=b.Bnameid;
 +-----+-------+------+---------+
 | Aid | Aname | Bbid | Bnameid |
 +-----+-------+------+---------+
 |   2 | A2    |  100 |       2 |
 |   6 | A6    |  101 |       6 |
 |   3 | A3    |  102 |       3 |
 |   7 | A7    |  103 |       7 |
 |   6 | A6    |  104 |       6 |
 |   8 | A8    |  105 |       8 |
 |   2 | A2    |  106 |       2 |
 |   2 | A2    |  107 |       2 |
 +-----+-------+------+---------+
 8 rows in set (0.00 sec)

左连接:

获得两表的共有数据集和a表所有数据
3306 [world]>select * from a Left JOIN b ON a.Aid=b.Bnameid;
 +-----+-------+------+---------+
 | Aid | Aname | Bbid | Bnameid |
 +-----+-------+------+---------+
 |   2 | A2    |  100 |       2 |
 |   6 | A6    |  101 |       6 |
 |   3 | A3    |  102 |       3 |
 |   7 | A7    |  103 |       7 |
 |   6 | A6    |  104 |       6 |
 |   8 | A8    |  105 |       8 |
 |   2 | A2    |  106 |       2 |
 |   2 | A2    |  107 |       2 |
 |   1 | A1    | NULL |    NULL |
 |   4 | A4    | NULL |    NULL |
 |   5 | A5    | NULL |    NULL |
 |   9 | A9    | NULL |    NULL |
 +-----+-------+------+---------+
 12 rows in set (0.00 sec)

右连接

获得两表的共有数据集和b表所有数据
3306 [world]>select * from a right JOIN b ON a.Aid=b.Bnameid;
 +------+-------+------+---------+
 | Aid  | Aname | Bbid | Bnameid |
 +------+-------+------+---------+
 |    2 | A2    |  100 |       2 |
 |    6 | A6    |  101 |       6 |
 |    3 | A3    |  102 |       3 |
 |    7 | A7    |  103 |       7 |
 |    6 | A6    |  104 |       6 |
 |    8 | A8    |  105 |       8 |
 |    2 | A2    |  106 |       2 |
 |    2 | A2    |  107 |       2 |
 | NULL | NULL  |  108 |      11 |
 +------+-------+------+---------+
 9 rows in set (0.00 sec)
赞(3)
MySQL学习笔记 » MySQL内连接,左连接,右连接