SQL笔记——左连接、右连接、内连接

前言:总是忘记表连接的区别,在面试的时候也容易被问到,因此就好记性不如烂笔头吧

集合运算

有并集、交集、差集
联合查询 *(针对行合并的)*
union 为关键字,就是将两个select的结果求并集(此时重复的只出现一次,要是想把重复的也都展示出来 应该用 union all)
ps:以上这些是用行进行计算的,而下面的内连接和外连接是用列进行计算的

内连接

只会现实关键字所在的共有的行,各自的独特的行没有,

假如实现a表和b表通过关键字sid来链接起来

a中sid是1~5,b中sid是2-8,那么结果中sid只有2-5.

c 复制代码
select * from a #展示的是a表中的全部
inner join b
on a.sid=b.sid;
###如果结果只展示a中的sid、sex、name列,一定要使用"表名+点+列名"格式,
###如果加上别名,用as,同时还使用where函数则为
select a.sid,a.sex,a.name from a as staff
inner join b as market
on a.sid=b.sid
where b.age>20;

由于内连接会忽略一些结果,但是实际中可能想展示a中的所有sid或者b中的所有sid,则需要其他连接方式,如左外连接or右外连接

外连接

1.左外连接

结果以左表a中为准,sid就是1-5啦,可能1中有些内容是空白,因为b中没有sid=1的内容

c 复制代码
select * from a 
left outer join b
on a.sid=b.sid;

2.右外连接

结果以左表b中为准,sid就是2-8啦,可能5-8中有些内容是空白,因为a中没有sid=6到8的内容

c 复制代码
select * from a 
right outer join b
on a.sid=b.sid;

3.完全连接

就是左连接union有链接,把a和b中全部的展示,有点像就并集

c 复制代码
select * from a
right outer join b
on a.sid=b.sid;
union
select * from a
left outer join b
on a.sid=b.sid;

笛卡尔积

也称交叉连接,有点像排列组合的感觉

像a中有1-3,b中有ijk,

则结果就是1i、1j、1k、2i、2j、2k、3i以此类推

1.笛卡尔积连接

c 复制代码
select 列名
from a,b;
或者是
select 列名
from a cross join b;

2.自连接

就是自己连接自己,但是的区分,用as来重命名

c 复制代码
select 列名
from a as a1,a as a2;

一个例子,自连接实现排序

c 复制代码
select a.name,a.age,count(*) as 排名
from a as a1,a as a2
where a1.age<=a2.age
group by a1.sid
order by 排名;
相关推荐
剩下了什么12 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
羊群智妍12 小时前
2026 AI搜索流量密码:免费GEO监测工具,优化效果看得见
笔记·百度·微信·facebook·新浪微博
山峰哥12 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉13 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变13 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记15 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里15 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科15 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
lpruoyu16 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
野犬寒鸦16 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法