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

news2025/1/21 7:17:19

作者前言

 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com

____________________________________________________________________

目录

        SQL查询语句

                限定输出 limit

                连接查询 join

                        内连接

                        左连接

                        右连接

                        外连接

___________________________________________________________

插播小知识

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

SQL查询语句

限定输出 limit

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

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

select * from dept_emp_latest_date limit 10;

select * from dept_emp_latest_date limit 0,10;

 可以看出这两个的效果是一样的  ( 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;

 同理升序也是一样的

连接查询 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 相当于一个表,只是我们没有给他们命名而已,

on相当于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`;     

 右连接

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`;

 这次我的右连接写法是有误的,应该把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`;

 

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

可能有一些小可爱也会有一些小错误,会把一些条件写在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;

可以看出差别很大,所以我们使用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`;

 总结:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xxx.indexOf is not a function报错

注意:xxx 如果是数字、布尔、对象,然而indexOf用于查找字符串或数组中的元素,所以会报错。

Qt5.15.2安装

解释一下 Qt 的版本号 比如 5.15.2 是完整的 Qt 版本号,第一个数字 5 是大版本号(major),第二个数字 15 是小版本号(minor),第三个数字 2 是补丁号(patch)。 只要前面两个…

Python异步编程框架Tornado使用方法

Tornado简介 Python异步编程框架Tornado是一个轻量级的Web框架和异步网络库,它能够处理大量并发连接和请求,非常适合高并发的网络应用和实时应用。 Tornado基本概念: 协程:Tornado采用协程并发模型,可以让单线程同时…

Vue第三篇:最简单的vue购物车示例

本文参考&#xff1a;Vue Cli&#xff08;脚手架&#xff09;实现购物车小案例 - - php中文网博客 效果图&#xff1a; 编写流程&#xff1a; 1、首先通过vue/cli创建工程 vue create totalprice 2、改写App.vue代码如下&#xff1a; <template><div><div v…

017 - STM32学习笔记 - SPI读写FLASH(二)

016 - STM32学习笔记 - SPI访问Flash&#xff08;二&#xff09; 上节内容学习了通过SPI读取FLASH的JEDEC_ID&#xff0c;在flash资料的指令表中&#xff0c;还看到有很多指令可以使用&#xff0c;这节继续学习使用其他指令&#xff0c;程序模板采用上节的模板。 为了方便起…

uni-app中a标签下载文件跳转后左上角默认返回键无法继续返回

1.首先使用的是onBackPress //跟onShow同级别 onBackPress(option){ uni.switchTab({ url:/pages/....... return true }) }发现其在uni默认头部中使用是可以的 但是h5使用了"navigationStyle":"custom"后手机默认的返回并不可以&#xff0c; 2.经过查询…

autok3s k3d rancher研究

参考 功能介绍 | Rancher文档AutoK3s 是用于简化 K3s 集群管理的轻量级工具&#xff0c;您可以使用 AutoK3s 在任何地方运行 K3s 服务。http://docs.rancher.cn/docs/k3s/autok3s/_index 什么是 AutoK3s k3s是经过完全认证的 Kubernetes 产品&#xff0c;在某些情况下可以替…

Centos 7 使用国内镜像源更新内核

内核选择参考 此博文 &#xff1a;https://blog.csdn.net/alwaysbefine/article/details/108931626 elrepo官网介绍的内核升级方式为&#xff1a; 一、按文档执行引入 elrepo库&#xff1b; # 1、引入公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 2、安…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施&#xff0c;承载着大量的敏感数据和关键业务运作。然而&#xff0c;水浸事件可能成为数据中心的巨大威胁&#xff0c;可能导致设备故障、数据丢失以及业务中断&#xff0c;给组织带来严重的损失和风险。 因此&#xff0c;为了保护…

机器学习(十六):决策树

全文共18000余字&#xff0c;预计阅读时间约36~60分钟 | 满满干货&#xff0c;建议收藏&#xff01; 一、介绍 树模型是目前机器学习领域最为重要的模型之一&#xff0c;同时它也是集成学习中最常用的基础分类器。 与线性回归、逻辑回归等算法不同&#xff0c;树模型并不只是…

力扣707设计链表

你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的上一个节点…

Spring Security OAuth2.0(5):Spring Security工作原理

文章目录 工作原理结构总览 认证流程授权流程AuthenticationProviderUserDetailsServicePasswordEncoder如何使用BCryptPasswordEncoder 授权流程授权流程授权决策 工作原理 结构总览 \qquad Spring Security 所解决的问题就是安全访问控制&#xff0c;而安全访问控制功能其实…

3.12 Bootstrap 超大屏幕(Jumbotron)

文章目录 Bootstrap 超大屏幕&#xff08;Jumbotron&#xff09; Bootstrap 超大屏幕&#xff08;Jumbotron&#xff09; 下面将讲解 Bootstrap 支持的另一个特性&#xff0c;超大屏幕&#xff08;Jumbotron&#xff09;。顾名思义该组件可以增加标题的大小&#xff0c;并为登陆…

MySQL-多表设计-一对一多对多

一对一 案例&#xff1a;用户 与身份证信息 的关系关系&#xff1a;一对一关系&#xff0c;多用于单表拆分&#xff0c;将一张表的基础字段放在一张表中&#xff0c;其它字段放在另一张表中&#xff0c;以提高操作效率实现&#xff1a;在任意一方加入外键&#xff0c;关联另一…

Linux小程序:倒计时和进度条

Linux小程序 在Linux中我们实现两个小程序来体会\r和\n的区别&#xff0c;以及缓冲区是什么&#xff1f; 文章目录 Linux小程序前言回车和换行的区别缓冲区 小程序的实现倒计时程序进度条程序 总结 前言 回车和换行的区别 对于 \r 和 \n 的理解&#xff1a; \n 表示换行且回…

创建git仓库连接上传全过程记录

1.初始化仓库 使用git init命令在一个新文件夹里初始化仓库 2.在github创建仓库 3.连接git仓库 采用命令是 git remote add origin 仓库地址4.添加文件进行测试 5.选择要上传的文件 一般选择git add .命令 6.提交文件到本地仓库 git commit -m "备注信息"7.…

RISCV - 1 RV32/64G指令集清单

RISCV - 1 RV32/64G指令集清单 1 RV32/64G指令类型2 RV32I 基本指令集3 RV64I基础指令集&#xff08;除了RV32I)4 RV32/RV64 Zifencei标准扩展5 RV32/RV64 Zicsr标准扩展6 RV32M标准扩展7 RV64M标准扩展&#xff08;除了RV32M)8 RV32A标准扩展9 RV64A标准扩展&#xff08;除了R…

php实现站群软件权限管理功能示例

1.管理员页面RBAC.php <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>权限管理</title> <script src"bootstrap/js/jquery-1.11.2.min.js"></script> </head>…

jenkins war包 centos启动安装指导

文章目录 步骤1&#xff1a;进入官网&#xff0c;下载到Jenkins的war包1.1 放置在指定位置1.2 放置安装包和创建文件放置路径1.3 检查环境1.4 配置启动命令和结束命令 步骤2&#xff1a; 启动后进入到Jenkins页面2.1 安装插件&#xff0c;例如流水线2.2 依然出现安装插件失败的…

ReWorks系统加载启动

1、通过网络或本地加载启动 配置tftp网络 网卡属性配置为100Mbps全双工 配置串口 目标板上电进入uboot 设置PC机IP、目标机IP、目标机MAC地址 加载文件并启动 固化系统镜像至SD卡 需支持挂载文件系统&#xff0c;并启动ftp服务 选择SD卡、文件系统、ftp服务 挂接SD卡 也可以…