刚开始在我面试的时候经常有面试官问我这个问题,我几乎是下意识的说出一个是左表为主表一个是右边为主表,我心想这还不简单,但是我面试面的多了以后,感觉面试官为什么这么想问这个问题,她到底想听什么?
下面我们来看一下定义:
关联查询之外连接
-
查询的是一张表的全部和另外一张表的交集
-
格式: select * from A left/right join B on A.x=B.x(关联关系) where A.age>30;
我们结合例子来看一下:如A表id 1,2,3 B表id 1,2,4 问AB关于id相等的左右关联能查询出来几条数据?
答案都是三条数据
先看左关联的话 是 A表为主表 先把A表的123写出来,然后在找B的关联数据,A.id=B.id,查询结果为 A的12与B的12,加上A的3和Null,没有的补Null
然后看B为主表的右关联查询结果为 A的12null和B的124
那么问题来了,如果A id为1,2,3。B的id为2,3
那么左右关联的结果为什么?
表1
select *from test1;
+------+-------+-------+
| id | name | class |
+------+-------+-------+
| 1 | zhang | xx |
| 2 | xc | dd |
| 3 | dsf | ww |
+------+-------+-------+
表2
select *from test2;
+------+------+-------+
| id | name | class |
+------+------+-------+
| 2 | sd | ggg |
| 3 | 45 | fe |
+------+------+-------+
左关联
select * from test1 left join test2 on test1.id=test2.id;
+------+-------+-------+------+------+-------+
| id | name | class | id | name | class |
+------+-------+-------+------+------+-------+
| 2 | xc | dd | 2 | sd | ggg |
| 3 | dsf | ww | 3 | 45 | fe |
| 1 | zhang | xx | NULL | NULL | NULL |
+------+-------+-------+------+------+-------+
右关联
select * from test1 right join test2 on test1.id=test2.id;
+------+------+-------+------+------+-------+
| id | name | class | id | name | class |
+------+------+-------+------+------+-------+
| 2 | xc | dd | 2 | sd | ggg |
| 3 | dsf | ww | 3 | 45 | fe |
+------+------+-------+------+------+-------+
所以大家在回答这个面试题的时候除了定义可以加上这个例子