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;

相关推荐
harmony&39 分钟前
ETCD 存储系统实战:从单节点部署到 Kubernetes 高可用集群
数据库·kubernetes·etcd
2601_962066491 小时前
【玩转全栈】----Django模板的继承
数据库·django·sqlite
一只小bit2 小时前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
zlwool8 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
_祝你今天愉快11 小时前
从驱动来分析服务的添加过程
android
软件聚导航11 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
2601_9609067212 小时前
1X发布自己的世界模型1XWM
mysql·mongodb·rabbitmq·memcached
学习星球12 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper12 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库