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

2021-12-22 15:22:05 浏览数 (2)

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

一 左连接,右连接

我们先看结果再分析:

代码语言:javascript复制
两个表:
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 (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
代码语言:javascript复制
A表          
 
  id   name  
 
  1  小王
 
  2  小李
 
  3  小刘
 
  B表
 
  id  A_id  job
 
  1  2    老师
 
  2  4    程序员

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

代码语言:javascript复制
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语句:

代码语言:javascript复制
SELECT * from people1 p1 full JOIN people2 p2 ON p1.id=p2.id

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

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

代码语言:javascript复制
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;
从结果上来看,外连接类似于左连接和右连接的合并

0 人点赞