MySQL中Left Join和Right Join的理解

2023-05-09,,

虽然之前一直见过两个Join,对于其具体的含义也在参考书上读过,但是一直没有记住。现在换一种方式进行学习,改为实验方式理解

Left Join

测试表:

表结构很简单,test包括两个int字段,test2只包含一个int字段

mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec) mysql> show create table test2\G
*************************** 1. row ***************************
Table: test2
Create Table: CREATE TABLE `test2` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

数据:

mysql> select * from test;
+------+------+
| a | b |
+------+------+
| 1 | 1 |
| 2 | 3 |
| 4 | 5 |
| 6 | 7 |
+------+------+
4 rows in set (0.00 sec) mysql> select * from test2;
+------+
| a |
+------+
| 4 |
| 6 |
| 2 |
| 8 |
+------+

使用Left Join输出:

mysql> select * from test left join test2 on(test.a);
+------+------+------+
| a | b | a |
+------+------+------+
| 1 | 1 | 4 |
| 1 | 1 | 6 |
| 1 | 1 | 2 |
| 1 | 1 | 8 |
| 2 | 3 | 4 |
| 2 | 3 | 6 |
| 2 | 3 | 2 |
| 2 | 3 | 8 |
| 4 | 5 | 4 |
| 4 | 5 | 6 |
| 4 | 5 | 2 |
| 4 | 5 | 8 |
| 6 | 7 | 4 |
| 6 | 7 | 6 |
| 6 | 7 | 2 |
| 6 | 7 | 8 |
+------+------+------+

这就是笛卡尔积的表示

加上test.a等于test2.a条件之后,对于test2中不存在记录使用NULL表示

mysql> select * from test left join test2 on(test.a  = test2.a);
+------+------+------+
| a | b | a |
+------+------+------+
| 1 | 1 | NULL |
| 2 | 3 | 2 |
| 4 | 5 | 4 |
| 6 | 7 | 6 |
+------+------+------+

Right Join

和Left Join相反

Inner Join

对于上面同样的例子使用inner Join输出的记录中不会包含NULL字段:

mysql> select * from test inner join test2 on(test.a  = test2.a);
+------+------+------+
| a | b | a |
+------+------+------+
| 4 | 5 | 4 |
| 6 | 7 | 6 |
| 2 | 3 | 2 |
+------+------+------+
3 rows in set (0.00 sec)

MySQL中Left Join和Right Join的理解的相关教程结束。

《MySQL中Left Join和Right Join的理解.doc》

下载本文的Word格式文档,以方便收藏与打印。