sql表连接的几种方式

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> sql表连接的几种方式

点击上方”python宝典”,关注获取python全套视频,

技术文章第一时间送达!

一.SQL 左外连接,右外连接,全连接,内连接

表结构


a表 id name b表 id job parent_id 
    1  张三      1 23   1 
    2  李四      2 34   2 
    3  王武      3 34   4

a.id同parent_id 存在关系

内连接

inner join与join的结果是一样的
select a.,b. from a inner join b on a.id=b.parent_id
结果是


13 1 23 1 
2 李四 2 34 2

左连接

select a.,b. from a left join b on a.id=b.parent_id
结果是


13 1 23 1 
2 李四 2 34 2 
3 王武 null

右连接

select a.,b. from a right join b on a.id=b.parent_id
结果是


13 1 23 1 
2 李四 2 34 2 
null 3 34 4

完全连接

select a.,b. from a full join b on a.id=b.parent_id
结果是


13 1 23 1 
2 李四 2 34 2 
null 3 34 4 
3 王武 null

注意:join 默认结果等于inner join

二、自然连接

natural join:自然连接(不允许带on/using)
natrual join:全自然连接,对左右2个表相同名字的列进行等值匹配,不可用on,using操作指定,自动删除多余重名列,自动合并不同的列
natrual left join:左自然连接,保留2个表的列(删除多余重名列),以左表为准,不存在匹配的右表列,值置为NULL
natrual right join:和左自然连接相反


select * from tb_test1 natural join tb_student; 
+-+——–+——–+——-+————+ 
| id | name | gender | score | birthday | 
+-+——–+——–+——-+————+ 
| 1 | 李毅 || 95.30 | 1988-03-20 | 
+-+——–+——–+——-+————+

select * from tb_test1 natural left join tb_student; 
+-+———–+——–+——-+————+ 
| id | name | gender | score | birthday | 
+-+———–+——–+——-+————+ 
| 1 | 李毅 || 95.30 | 1988-03-20 | 
| 2 | 二丫 || 95.30 | NULL | 
| 3 | 张三 || 95.30 | NULL | 
| 4 | 李四 || 95.30 | NULL | 
| 7 | 胡鲁瓦 || 95.30 | NULL | 
| 9 | 后羿 || 95.30 | NULL | 
+-+———–+——–+——-+————+

select * from tb_test1 natural right join tb_student; 
+-+——–+——–+————+——-+ 
| id | name | gender | birthday | score | 
+-+——–+——–+————+——-+ 
| 1 | 李毅 || 1988-03-20 | 95.30 | 
| 2 | kevin || 1987-08-23 | NULL | 
| 3 | marry || 1989-11-25 | NULL | 
| 4 | lucy || 1989-11-25 | NULL | 
| 5 | lily || 1992-01-25 | NULL | 
+-+——–+——–+————+——-+

笛卡尔乘积
已上连接都是基于cross join(笛卡尔乘积),即两表行数的乘积
概念:没有where条件的交叉连接将产生连接表所涉及的笛卡尔积。即TableA的行数TableB的行数的结果集。(TableA 3行TableB 3行=9行)
sql语句:
select * from TableA cross join TableB


原文:
https://blog.csdn.net/sinat_34814635/article/details/78688008 
sql表连接的几种方式

识别图中二维码,欢迎关注python宝典

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> sql表连接的几种方式


 上一篇
为什么要分表和分区? 为什么要分表和分区?
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时
2021-04-05
下一篇 
Python3.7新特性——Data Class Python3.7新特性——Data Class
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 简评:Python 3.7 于今年夏天发布,Python 3.7 中将会有许多新东西,最激动人心的新功能之一是 dataclass 装饰器。 什么是 Da
2021-04-05