Mysql数据库(五) Mysql命令行客户端:内连接查询、左连接查询、右连接查询、自连接查询、子查询

news2024/12/23 12:06:26

目录

一、 连接查询 对多个表进行查询

1.0 数据准备

1.1 连接查询

1.2 内连接 INNER JOIN

1.3 左连接 LEFT JOIN

1.4 右连接 RIGHT JOIN

1.5 FULL OUTER JOIN

1.6 自连接查询

1.7 子查询-嵌套在查询中


一、 连接查询 对多个表进行查询

1.0 数据准备

在之前的文章当中,我们在 base_1 当中有了一个 stu 表,记录的是学生的name age height等信息

第一步,我们再创建一个班级表 class 

create table class(id int unsigned primary key not null auto_increment,name varchar(20) not null);

目前的班级表:

 

 

第二步,在班级表中插入数据

 insert into class(name) values('class_1'),('class_2'),('class_3');

第三步,给 stu 表插入个字段classID,表示所在的班级

alter table stu add classID int unsigned;

第四步,给学生分班 使用 where

目前 21 个学生,3个班级,那就 7 人一个班级

mysql> update stu set classID=1 where id in(1,2,3,4,5,6,7);


mysql> update stu set classID=2 where id in(8,9,10,11,12,13,14);


mysql> update stu set classID=3 where id in(15,16,17,18,19,20,21);


 分班结果:

 

ok 到此,前期的数据准备就完成了!

1.1 连接查询


 当中 on  的作用是什么?

在 MySQL 中,ON 是连接查询中的一个关键字,用于指定连接条件,它的作用是将两个或多个表连接起来并返回匹配的数据行。

在连接查询中,使用 ON 关键字可以指定两个表之间的连接条件,这个条件用于匹配两个表中的数据行。

例如:

select * from stu inner join class on stu.classID = class.id;

这个查询语句表示将 stu和 class表连接起来,并且将它们之间的连接条件设置为 stu的 classID 字段等于 class的 id 字段。


 

MySQL连接查询是一种用于连接多个表并获取相关数据的查询方法。

它将两个或多个表中的行结合起来,根据两个表之间的共同列或键(如主键和外键)进行匹配,并返回匹配的结果。

连接查询可以通过 INNER JOIN、LEFT JOIN、RIGHT JOIN 或 FULL OUTER JOIN 的方式执行。

1.2 内连接 INNER JOIN

上面就是内连接的示例!

通俗一点就是:交集!

 

1.3 左连接 LEFT JOIN

左 和 右的区分,看在 join的左边还是右边

LEFT JOIN 返回左表中所有的行右表中匹配的行,如果右表中没有匹配的行,则返回 NULL 值;

 

1.4 右连接 RIGHT JOIN

RIGHT JOIN 返回右表中所有的行左表中匹配的行,如果左表中没有匹配的行,则返回 NULL 值;

 

1.5 FULL OUTER JOIN

FULL OUTER JOIN 返回左表和右表中所有的行,无论它们是否匹配。

 

1.6 自连接查询

MySQL 自连接查询是指在同一张表中进行连接查询

自连接可以用来解决一些需要用到两个相同表的情况

例如

我们有一个员工表,其中记录了员工的姓名、工资和上级姓名。

如果要查询每个员工的上级姓名和上级的工资,就需要使用自连接查询。

可以使用以下 SQL 语句进行自连接查询:

SELECT e.name, e.salary, m.name AS manager_name, m.salary AS manager_salary
FROM employee e
LEFT JOIN employee m ON e.manager_id = m.id;

其中,employee 是表名,em 是表的别名,id 是员工表的主键,manager_id 是上级员工的 ID。

这个查询语句将 employee自己连接了一次,使用 LEFT JOIN 连接,将员工表 e 中的 manager_id 与同一张表中上级员工的 id 进行匹配,然后将上级员工的姓名和工资返回

1.7 子查询-嵌套在查询中

MySQL子查询是一个嵌套在另一个查询中的查询

子查询可以用作 SELECT、FROM、WHERE 子句中的任何一部分来生成结果集合。

一个基本的子查询语法如下:

SELECT column1, column2, column3, ...
FROM table1
WHERE column_nameSELECT column_name FROM table_name WHERE condition  ) ;
 

子查询会首先执行

在上面的语句中,子查询 (SELECT column_name FROM table_name WHERE condition)首先执行,然后它的结果可以用于 WHERE 子句中的过滤条件

另一个常见的子查询使用方法是嵌套在 JOIN 子句中,用于连接表与执行过滤操作。下面是一个示例:

SELECT *
FROM table1
JOIN (SELECT id, column2 FROM table2 WHERE condition) AS t2
ON table1.id = t2.id;

在上面的语句中,子查询 (SELECT id, column2 FROM table2 WHERE condition) 被赋予别名 t2 并与 table1 表连接,结果集将包含两个表中的所有列。

需要注意的是,如果子查询返回大量的结果,可能会导致性能下降

因此,尽量保持子查询返回的结果集较小,以提高查询性能。


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

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

相关文章

20-Linux 上搭建 Java Web 环境

目录 1.搭建 JDK 运行环境 ①查看所有的 Java 安装包: ②安装(安装 Java 1.8 相关的软件包): PS:卸载使用 ③验证是否安装成功: 2.安装并运行 Tomcat ①去官网下载Tomcat压缩包至本地,再…

4.Nginx缓存设置和CDN

文章目录 Nginx缓存设置设置缓存取消不需要内容的缓存查看nginx缓存数据 CDN概念工作原理 Nginx缓存设置 设置缓存 ##在yum配置文件中添加nginx在线源vim /etc/yum.repos.d/nginx.repo[nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/7/$base…

28-大文件上传(了解)

一、是什么? 🚗🚗🚗不管怎样简单的需求,在量级达到一定层次时,都会变得异常复杂。 文件上传简单,文件变大就复杂 上传时,以下几个注意点会影响用户体验 服务器处理数据的能力请求超…

AI PPT 一句话搞定PPT讲演搞

相信大家在职场中,一定会接触过写PPT,经常会把你搞得焦头烂额。在大部分的公司里,写PPT汇报又是不可能逃避的事情。但随着AI时代的到来,有很多AI帮你写PPT的工具也逐渐崭露头角,可以自动帮助你制作出华丽的PPT&#xf…

HOT47-从前序与中序遍历序列构造二叉树

leetcode原题链接:从前序与中序遍历序列构造二叉树 题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder …

攻防演练中红队常用的攻击方法之横向移动(上)

横向移动,是攻击者侵入企业系统时,获取相关权限及重要数据的常见攻击手法。了解横向移动的原理有助于个人和企业更好地维护网络安全。 中安网星特此推出了横向移动科普系列,本系列共有三篇文章。 近年来,随着网络攻击、勒索事件…

B. Number Factorization - 数论

分析&#xff1a; 可以将n分解成质因数&#xff0c;要求是加和尽可能大&#xff0c;那么可以让所有的指数都是1&#xff0c;a*b>ab一定成立&#xff0c;所以要尽可能地将质因数乘在一起组成更大的数&#xff0c;加在一起得到最后的解。 代码&#xff1a; #include <bit…

Matlab中解常微分方程(组)的命令

常微分方程组求解命令与示例 线性常微分方程&#xff08;组&#xff09; ode45 4 order 龙格库塔法example odefun (t, y) [-2*y(1) y(2); y(1) - 2*y(2)]; tspan [0 10]; y0 [1; 0]; [t, y] ode45(odefun, tspan, y0); ode23 使用二三阶Bogacki-Shampine方法求解非刚性…

Devops系列二(使用helm chart,将java应用发布部署至k8s的示例)

一、接着上一篇的话 docker镜像已经有了&#xff0c;本文我们将接着演示如何使用helm部署应用到k8s。 分为两大部分&#xff1a; 制作helm chart&#xff0c;推送到私有仓库nexushelm拉取chart&#xff0c;部署到k8s 二、制作helm chart 要求你先安装helm&#xff0c;随便一…

Rust 第四天—Rust进阶1

上一篇介绍了Rust的所有权特性,今天就把剩下一些之前没介绍但项目中常用的内容总结一下. 结构体泛型trait 1 结构体 和c语言一样,Rust使用struct关键字来定义一个结构体,结构体可以将不同的类型数据进行整合,加快内存访问速度. 1.1 结构体定义 struct Test{username:Strin…

【第四天学习】决策分支,判断语录

决策分支 If语句 If语句是对基础的一种选择结构语句&#xff0c;它主要有三种形式&#xff0c;分别是if语句&#xff0c;if else语句和if else If else多分支语句。 int nCheck 0; if(nNum4) { nCheck4; } else { nCheck8; }If语句其实就是一个判断语句&#xff0c;它会判断…

详细解释lvs的工作原理

vsl用于集群中的直接路由它的原理如下 如果在公司并发太高了怎么解决 1.加配置cpu 内存 带宽 ssd高效硬盘 2.加服务器 为用户提供服务 横向扩展 集群是什么 由的多台主机构成,相当于一台大型计算机,只提供一个访问入口(域名与ip地址) 集群用在那个场景 高并发场景 vrrp是…

linux下删除ARP缓存表【网络工程】(保姆级图文)

目录 linux下删除ARP缓存表总结 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 欢迎关注 『网络工程专业』 系列&#xff0c;持续更新中 温馨提示&#xff1a;对虚拟机做任何设置&#xff0c;建议都要先快照备份&#xff01; linux下删除ARP缓存表 这里老师的命令ip…

docker的安装和使用

1.新建一个项目 比如vue init vuelatest完事之后运行打包到build目录下 2.在项目根目录下通过执行命令 touch Dockerfile 3.拉取nginx镜像 首先打开你的Docker&#xff0c;默认会启动。控制台拉取 Nginx 镜像&#xff1a;运行 docker pull nginx4.在根目录创建Nginx配置文件…

【多线程】锁策略

1. 说在前面 这里的锁策略内容&#xff0c;属于典型的面试八股文&#xff01;如果未来工作&#xff0c;需要实现一把锁&#xff0c;那么得好好研究下锁策略&#xff0c;但基本上不会让我们自己设计一把锁的。 而这里的锁策略内容不局限于 Java&#xff0c;任何 "锁" …

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

简介 有些 post 的请求参数是 json 格式的&#xff0c;这个前面发送post 请求里面提到过&#xff0c;需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理&#xff0c;所以绝大多数返回数据也是 json 格式的&#xff0c;我们在做判断时候&#xff0c;往往只…

golang 实现四层负载均衡

大家好&#xff0c;我是蓝胖子&#xff0c;做开发的同学应该经常听到过负载均衡的概念&#xff0c;今天我们就来实现一个乞丐版的四层负载均衡&#xff0c;并用它对mysql进行负载均衡测试&#xff0c;通过本篇你可以了解到零拷贝的应用&#xff0c;四层负载均衡的本质以及实践。…

代码模版-element plus如何进行前端校验输入框

文章目录 步骤一&#xff1a;引入 element plus 框架步骤二&#xff1a;使用 element plus 的 form步骤三&#xff1a;form 明确指定 rules步骤四&#xff1a;事件触发校验 使用 vue3 element plus 步骤一&#xff1a;引入 element plus 框架 先 npm 安装 在 src/main.js 中…

linux[armbian]环境安装nginx

文章目录 linux[armbian]环境安装常用命令遇到的问题和解决方法问题一&#xff1a;conf/koi-win复制错误解决方法问题二&#xff1a;缺少相关的日志目录解决方法 linux[armbian]环境安装 下载Nginx&#xff1a; 访问[Nginx官方网站]&#xff08;https://nginx.org/)&#xff0c…

排序算法(1):冒泡排序

在计算机科学领域&#xff0c;排序算法是一个重要的主题。冒泡排序法是最基础且简单的排序算法之一&#xff0c;它的原理简单易懂&#xff0c;是学习排序算法的理想起点。本文将详细介绍冒泡排序法的原理、实现方法以及优化技巧&#xff0c;帮助读者全面了解和掌握这一经典算法…