关于左关联查询与右关联查询的区别(详解)(面试题)

刚开始在我面试的时候经常有面试官问我这个问题,我几乎是下意识的说出一个是左表为主表一个是右边为主表,我心想这还不简单,但是我面试面的多了以后,感觉面试官为什么这么想问这个问题,她到底想听什么?

下面我们来看一下定义:

关联查询之外连接

  • 查询的是一张表的全部和另外一张表的交集

  • 格式: 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    |
+------+------+-------+------+------+-------+

所以大家在回答这个面试题的时候除了定义可以加上这个例子 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值