左连接,右连接,内连接,外连接

这里之前一直没有写,主要原因觉得好多东西比较基础,没想都写,但是后来觉得,学习的话应该是扫盲和汇总的阶段,所以这里也单独写一下

一 左连接,右连接

我们先看结果再分析:

两个表:
A(id,name)
数据:(1,张三)(2,李四)(3,王五)
B(id,name)
数据:(1,学生)(2,老师)(4,校长)

左连接结果:
select A.*,B.* from A left join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
3 王五  NULL NULL

右链接结果:
select A.*,B.* from A right join B on A.id=B.id;
1 张三 1 学生
2 李四 2 老师
NULL NULL 4 校长

左连接和右连接区别为:语法公式不同、基础表不同、结果集不同。
  • 1.语法公式不同
    左连接 left join
    右连接 right join

  • 2.主表不同
    左连接 以左表为主表
    右连接 以右表为主表
    主表数据完全保留, 副表字段匹配到则数据保留,填充到结果集, 未匹配到数据置空.

  • 3.结果集不同

看完了你可能优点疑惑

A left join B和B right join A不一样吗?
其实显示的数据行大致相同,但是数据位置不同而已.

二 内连接,和外连接

inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
A表          
 
  id   name  
 
  1  小王
 
  2  小李
 
  3  小刘
 
  B表
 
  id  A_id  job
 
  1  2    老师
 
  2  4    程序员

内连接:(只有2张表条件匹配的行才能显示)


select a.name,b.job from A a  inner join B b on a.id=b.A_id
 
本条sql,满足a.id=b.Aid的只有一条数据,所以只能得到一条记录
 
  小李  老师
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。

1.MySQL使用全外连接查询数据出现的问题
使用sql语句:

SELECT * from people1 p1 full JOIN people2 p2 ON p1.id=p2.id

查询数据信息,会提示错误
原因是MySQL数据库不支持全外连接查询。

2.解决方案
可以使用unionl将左连接和右连接得到的结果合并起来,就可以得到想到的结果

SELECT * from people1 p1 LEFT JOIN people2 p2 ON p1.id=p2.id UNION 
SELECT * from people1 p1 RIGHT JOIN people2 p2 ON p1.id=p2.id;

从结果上来看,外连接类似于左连接和右连接的合并

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容