【MySQL】内外连接

> 作者:დ旧言~

> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:了解MySQL的内外连接。

> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!

> 专栏选自:带你玩转MySQL

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

​​

一、前言

想必大家在学校也学习过MySQL,可能学的懵懵懂懂,这个板块我们从入门开始,从最新的安装MySQL到学习MySQL语句,一步一步开始,一切都是新的,新的板块新的开始,大家一起努力,一起进步!!!

主体

学习【MySQL】内外连接咱们按照下面的图解:

2.1内连接

概念:

内连接实际上就是利用 where 子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

语法:

cpp 复制代码
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

举个栗子:****( 一张员工表和一张部门表**)**

显示SMITH的名字和部门名称:

方法一:使用前面的查询方式

这里按照复合查询的做法就是,取员工表和部门表的笛卡尔积,在where子句中指明筛选条件为员工的部门号等于部门的部门号,筛选出每个员工匹配的的部门信息,并指明员工姓名为SMITH,筛选出SMITH的信息和其所在的部门的信息。

cpp 复制代码
select ename,dname from emp,dept where emp.deptno=dept.deptno and ename='SMITH';

方法二:使用标准内连接查询

  • 将员工表和部门号放在from子句中并通过inner join关键字隔开。
  • 在on子句后指明内连接的条件为员工的部门号等于部门的部门号,保证筛选出来的数据是有意义的。
  • 在and之后指明筛选条件为员工的姓名为SMITH

2.2外连接

概念:

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接,右侧的表完全显示就是右外连接。

2.2.1左外连接

概念:

左外连接:返回左表中的所有行以及右表中与左表匹配的行。如果没有匹配的行,右表的列将显示为 NULL。

语法:

cpp 复制代码
select 字段名  from 表名1 left join 表名2 on 连接条件;

举个栗子:(先创建两张表,学生表和成绩表)

cpp 复制代码
-- 建两张表
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);

mysql> select * from stu;
+------+------+
| id   | name |
+------+------+
|    1 | jack |
|    2 | tom  |
|    3 | kity |
|    4 | nono |
+------+------+
4 rows in set (0.00 sec)

mysql> select * from exam;
+------+-------+
| id   | grade |
+------+-------+
|    1 |    56 |
|    2 |    76 |
|   11 |     8 |
+------+-------+
3 rows in set (0.00 sec)

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

这时我们可以在连接学生表和成绩表时将学生表放在左侧,那么就可以使用左外连接,这时如果左侧表中的某条记录根据连接条件没有找到匹配的右侧表中的记录,就会直接显示左侧表中的记录信息,而其对应的右侧表中的列信息将会用NULL值进行填充。

cpp 复制代码
select * from stu left join exam on stu.id=exam.id;

2.2.2右外连接

概念:

右外连接:与左外连接相反,返回右表中的所有行以及左表中与右表匹配的行。如果没有匹配的行,左表的列将显示为 NULL。

语法:

cpp 复制代码
select 字段 from 表名1 right join 表名2 on 连接条件;

举个栗子:

①查询所有的成绩,就算这个成绩没有学生与它对应,也要将学生成绩信息显示出来:

cpp 复制代码
select * from stu right join exam on stu.id=exam.id;

②列出部门名称和这些部门的员工信息,同时列出没有员工的部门:

dept表左外连接emp表:

cpp 复制代码
select dname,emp.* from dept left join emp on dept.deptno=emp.deptno;

emp表右外连接dept表:

cpp 复制代码
select dname,emp.* from emp right join dept on dept.deptno=emp.deptno;

三、结束语

今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

​​ 、

相关推荐
XiaoH23323 分钟前
培训机构Day15
sql·mysql
ThisIsClark44 分钟前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
Python之栈2 小时前
【无标题】
数据库·python·mysql
亦世凡华、2 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
拭心11 小时前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android
White_Mountain12 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
老王笔记12 小时前
GTID下复制问题和解决
mysql
带电的小王14 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
Lojarro14 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
梦想平凡14 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle