这里之前一直没有写,主要原因觉得好多东西比较基础,没想都写,但是后来觉得,学习的话应该是扫盲和汇总的阶段,所以这里也单独写一下
一 左连接,右连接
我们先看结果再分析:
代码语言: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;