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;

相关推荐
IvorySQL7 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
aqi007 小时前
鸿蒙版本的电子书阅读APP开放源码啦
android·华为·ai编程·harmonyos·鸿蒙
墨天梦7 小时前
B19_SunnyWeather到阅读客户端
android·kotlin
刘胡子大叔7 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用8 小时前
Spring对IoC的实现
数据库·spring
美狐美颜sdk8 小时前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
hz5678910 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC10 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday10 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码10 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt