MySQL数据库第九课--------join连接四件套------不错的哦哦哦

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库第九课--------join连接四件套------不错的哦哦哦

插播小知识

!.我们在写group by分组时候,select后面写的字段只能是排序的字段

SQL查询语句

限定输出 limit

在前面的几篇博客中小可爱应该发现了有些代码我是加了limit 10等一些代码,这样可以防止太多数据输出出来,


理论上,重复SQL查询语句,查询的结果(包括数据的顺序)都是一样的,所以才可以使用 limit 限制数据条数,实现分页功能。一般limit更多用于数据的初步查询或者最值的查询。

select * from dept_emp_latest_date limit 10;

979a6ab6e54748bbba05115af27e6c83.png

select * from dept_emp_latest_date limit 0,10;

0d4747572d8042c5879065e07b4f9182.png

可以看出这两个的效果是一样的  ( limit  开始的位置,  读取几条数据),limit 10 就是limit 0,10的简写, 如果我们想从第几条数据开始读取也可以写出了

还有一个效果,在排序后取第一个就可以找到最大值或者最小值

-- 取最大年龄的数据
select * from table_name order by age desc limit 1;
-- 取最小年龄的数据
select * from table_name order by age limit 1;

650e095faced4952bde3957c546b4e2c.png

同理升序也是一样的

连接查询 join

当需要通过关联,在不同的表中获取不同的字段时,就需要连接查询。

在前面我们也讲了union的连接,union的连接是要字段数相同,并且拼接出来的表的字段数是不改变的,相当于是增加了多条数据,而join的拼接的表恰恰相反,就是会增加字段,给每一条数据再加数据

简单的说就是union就是纵向拼接,join就是横向拼接

select * from table1 (inner|left|right) join table2 on table1.column =
table2.column

我来简单的讲解一下,我们可以理解一下,select 字段名 from 表名   而  table1 join table2 no  table1.column =table2.column 相当于一个表,只是我们没有给他们命名而已,

相当于where,是在join里面的条件

内连接简单的说就是连接两个表相同的部分,不相同的部分就不要了,下面还有一张抽象一点的图

这个简单明了

代码如下:

select 
* 
from 
(select * from dept_emp  limit 10) as a
join 
(select * from employees limit 10) as b
on  a.`emp_no`= b.`emp_no`;

结果:

还有一个点就是当a表的同一个值有多个,b表的这个值也有多个就会像多对多的形式

一般我们使用join连接的时候一般会这样写

select 
a.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 10) as a
join 
(select * from employees limit 10) as b
on  a.`emp_no`= b.`emp_no`;

这样可以简单明了的知道哪个字段来自哪个表,后面排除可以很快

小知识:

1.有相同字段要用表名作区分

2.在内连接可以取任意一张表的关联字段

进行三张表连接

select 
a.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`,
c.`dept_no`,
c.`dept_name`
from 
(select * from dept_emp  limit 10) as a
join 
(select * from employees limit 10) as b
on  a.`emp_no`= b.`emp_no`
join
departments as c 
on  a.`dept_no`= c.`dept_no`;     

4dd7ae49363348da80a68fef8d5ac8f1.png

右连接

right join:以右表为主表,在保证右表数据的前提下,关联左表数据,没有数据的位置用null补充。即 使左表中没有匹配,也从右表返回所有的数据

select 
a.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 10) as a
right join 
(select * from employees limit 20) as b
on  a.`emp_no`= b.`emp_no`;

7cdd7053969647fc8613ce10537ccd23.png

这次我的右连接写法是有误的,应该把a.`emp_no`,换成b.`emp_no`,


但为了让大家更好的和下面作对比

左连接

left join:以左表为主表,在保证左表数据的前提下,关联右表数据,没有数据的位置用null补充。即使 右表中没有匹配,也从左表返回所有的数据

select 
a.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 20) as a
left join 
(select * from employees limit 10) as b
on  a.`emp_no`= b.`emp_no`;

d3fdfa28cf994d08905d91e7dfccb35a.png

从上面左右连接的截图看到如果我们以哪个表为主体就写哪个的字段,不要乱写,会造成数据的无法区分,

可能有一些小可爱也会有一些小错误,会把一些条件写在where里面就会造成意想不到的结果

select 
b.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 10) as a
right join 
(select * from employees limit 20) as b
on  a.`emp_no`= b.`emp_no` 
where   a.`emp_no` > 10005;

6762ea8f944e4acfaf9a495516f9363d.png

可以看出差别很大,所以我们使用join 连接的时候写条件一般都是要写在on那里

外连接

outer join:将两张表关联,没有数据的位置用null补充。只要其中一个表中存在匹配,则返回数据


外连接在一些数据库并不兼容,但是我们可以利用别的方法来获取和外连接一样的效果

外连接就是相同部分加两表不同部分

select 
a.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 20) as a
left join 
(select * from employees limit 10) as b
on  a.`emp_no`= b.`emp_no`
union 
select 
b.`emp_no`,
a.`dept_no`,
a.`from_date`,
a.`to_date`,
b.`birth_date`,
b.`first_name`,
b.`last_name`,
b.`gender`,
b.`hire_date`
from 
(select * from dept_emp  limit 10) as a
right join 
(select * from employees limit 20) as b
on  a.`emp_no`= b.`emp_no`;

b6df9af057f5466a870e4928b4c9387e.png

总结:

这里主要介绍了MySQL数据库的join的连接,有不懂的可以来私聊

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
126 68
|
16天前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
40 3
|
1月前
|
关系型数据库 MySQL 数据库连接
DBeaver如何连接一个数据库
【10月更文挑战第27天】DBeaver 是一款功能强大的通用数据库管理工具,支持多种主流数据库。本文介绍了使用 DBeaver 连接数据库的基本步骤,包括下载安装、创建新连接、选择数据库类型、配置连接参数、测试连接以及最终连接到数据库。详细的操作指南帮助用户轻松管理和操作数据库。
192 9
|
24天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
22 1
|
24天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
39 1
|
30天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
27天前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
53 0
|
15天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1

热门文章

最新文章

下一篇
无影云桌面