MySQL——内外连接

内连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
语法:select 字段 from 表1 inner(可以省略) join 表2 on 连接条件 and 其他条件; 其实这个连接条件本质也就是以前from语句中对两个表连接时的where条件的筛选

实例:我们将同样用到部门表 dept和员工表 emp来举例子: 显示SMITH的名字和部门名称</font>

这是查询的标准写法,用以前的先让两表做笛卡尔积先显示所有组成在按条件筛选也行,但这种写法本质还是内连接,既然现在学了就用标准写法

外连接

左外连接

语法:select 字段 from 表1 left join 表2 on 连接条件 and 其他条件;
如果联合查询,左侧的表完全显示我们就说是左外连接。
意思为如果不满足连接条件的话左侧的表1的数据会完全显示,而在表1中不满足条件的数据中的表2的数据会置为NULL
下面我们用具体例子再来理解;
-- 建两张表
create table stu (id int, name varchar(30)); -- 学生表
insert into stu values(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
create table exam (id int, grade int); -- 成绩表
insert into exam values(1, 56),(2,76),(11, 8);


查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

我们明显能看出本来id为4的学生是在成绩表中没有的但用了左外连接成绩表之后stu这个表的数据是全部显示的,不满足条件的id为4的右表的数据全部置为了NULL,这也能证明我说的是正确的

右外连接

那就很好理解了那就是右表的数据全部显示不满足条件的右表数据连接的左表的数据置为空
实例:对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来

我们成热打铁来写到OJ题:分数排名
https://leetcode.cn/problems/rank-scores/description/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china

题目概述:


注意这道题有更好的解法只是用现在所学的知识只是能更好巩固消化,写完这道题也可以用其他更优解法
思路: 我们要做的就是拿到每个分数的对应排名,重复分数是同排名,那我们就可以自己进行内连接,当前分数为左表,比它分数高的为右表进行自连接 ,筛选条件为分数大于我的并且以当前分数进行group by 分组,那这样每组右表比左表的分数高,只要用聚合函数count() 计算有几个比它高的右表的分数然后加一就是当前组这个分数的排名

select s1.score,count( distinct s2.score)+1 rank from Scores s1 left join Scores s2 on s1.score < s2.score group by s1.id,s1.score order by rank;

相关推荐
程序员-珍5 分钟前
报错下载android sdk失败
android·java
nVisual6 分钟前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
weixin_6686 分钟前
Cursor-superpowers插件用法
数据库·人工智能
NWU_白杨12 分钟前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
蓝创工坊Blue Foundry35 分钟前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
一嘴一个橘子1 小时前
MySqL 的 B+树、 叶子节点、非叶子节点
mysql
麦聪聊数据1 小时前
企业数据市场建设(三):API 化服务封装,让数据开箱即用、避免重复开发
数据库
脱胎换骨-军哥1 小时前
C++数据库存储引擎内核开发:B+树索引与MVCC并发控制的完整实现
数据库·c++·b树
麦聪聊数据1 小时前
企业数据市场建设(四):流程闭环与价值运营,让数据市场真正转起来
运维·数据库
正儿八经的少年1 小时前
redis 的大 key 和热 key 详解
数据库·redis·缓存