Mysql数据库 9.SQL语言 查询语句 连接查询、子查询
连接查询
通过查询多张表,用连接查询进行多表联合查询
关键字:inner join 内连接
left join 左连接
right join 右连接
数据准备
创建新的数据库:create database 数据库名;
create database db_test2;
使用数据库:use 数据库名;
use db_test2;
创建班级信息表:
create table 表名(字段名1,字段名2,......);
代码实现
create table classes(class_id int primary key auto_increment,#主键自增class_name varchar(40) not null unique,class_remark varchar(200)
);
创建学生表:
create table 表名(字段名1,字段名2,......);
代码实现
create table students(stu_num char(8) primary key ,stu_name varchar(20) not null,stu_gender char(2) not null,stu_age int not null,cid int,constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id)on update cascade ON DELETE CASCADE
);
添加班级信息
insert into 表名 (字段名)values(添加的数据);
代码实现
insert into classes (class_name,class_remark)values('Java2204','......');insert into classes (class_name,class_remark)values('Java2205','......');insert into classes (class_name,class_remark)values('Java2206','......');insert into classes (class_name,class_remark)values('Python','......');
运行结果

添加学生信息
以下三个信息,属于class_id=1 的班级 (Java2204)
代码实现
insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220101','张三','男',20,1);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220102','李四','女',20,1);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220103','王五','男',20,1);
以下两个学生信息,属于class_id=2 的班级 (Java2205)
代码实现
insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220104','赵婷','女',20,1);insert into students (stu_num,stu_name,stu_gender,stu_age,cid)
values('20220105','孙七','男',20,2);
小红和小明没有设置班级信息
代码实现
insert into students (stu_num,stu_name,stu_gender,stu_age)
values('20220106','小红','女',20);insert into students (stu_num,stu_name,stu_gender,stu_age)
values('20220107','小明','男',20);
运行结果
select * from 表名;查询表
代码实现
select * from students s ;
select * from classes c ;
运行结果

内连接
语法
select ...... from 表名1 inner join 表名2 on 匹配条件 [where 条件];
经过内连接(表连接)之后,将两张表的数据以笛卡尔积的效果进行连接

代码实现
select * from 表名1 inner join 表名2;
select * from students inner join classes;
运行结果
产生笛卡尔积,效果如下,将表1中的每个数据与第二个表中的每个数据都进行匹配
7 * 3 = 28,共有28个数据

消除笛卡尔积,在前缀后加上 on 匹配条件 [where 条件];
select ...... from 表名1 inner join 表名2 on 匹配条件 [where 条件];
内连接条件
两张表使用inner join连接查询之后生产的笛卡尔积数据中很多数据都是无意义的,我们如何消除无意义的数据呢?——添加两张进行连接查询时的匹配条件
使用 on 设置两张表连接查询时的匹配条件

两张表连接查询+条件
代码实现
使用where进行两个表之间的连接
select * from students inner join classes where students.cid=classes.class_id ;
运行结果
代码实现
使用on进行两个表之间的连接
select * from students inner join classes on students.cid=classes.class_id ;
运行结果

on连接查询和where连接查询的区别
where筛选:先生成笛卡尔积后进行判断连接条件是否成立
on筛选:先进行判断连接条件是否成立,如果成立后,再会进行组合,就不会有笛卡尔积的结果
左连接 LEFT JOIN
左连接定义
左连接显示左表中的所有数据,如果在右表中存在与左表记录满足匹配条件的数据,则进行匹配,如果右表中不存在匹配数据,则显示为NULL;
语法
select * from 左表名 left join 右表名 on 匹配条件 [where 条件];
作用
左连接:显示左表中的所有记录
例
需求
请查询出所有学生信息,如果有学生有对应的班级信息,则将对应的班级信息也查询出来
代码实现
select * from students left join classes on students.cid=classes.class_id ;
运行结果
右连接 RIGHT JOIN
右连接定义
右连接显示右表中的所有数据,如果在左表中存在与右表记录满足匹配条件的数据,则进行匹配,如果左表中不存在匹配数据,则显示为NULL;
语法
select * from 表名1 RIGHT JOIN 表名2 ON 表名1与表名2的关联字符;
作用
右连接:显示右表中的所有记录
例
需求
将右表中的所有数据显示出来
代码实现
select * from students right join classes on students.cid=classes.class_id ;
运行结果

左连接、右连接与内连接的区别
内连接:只会显示出两表中有关联的数据
左连接:显示出左表中的所有数据,右表中只写有关联的数据
右连接:显示出右表中的所有数据,左表中只写有关联的数据
数据表别名
语法
alter table 表名 rename column 列名 to 新列名;
案例
代码实现
修改列名
alter table students rename column stu_name to name;
alter table classes rename column class_name to name;
运行结果


当两个表的字段名称相同时,如何进行查询字段
代码实现
select students.name,classes.name from students inner join classes on students.cid = classes.class_id ;
运行结果
使用别名查询字段
代码实现
select s.name,c.name from students s inner join classes c on s.cid=c.class_id ;
运行结果

子查询/嵌套查询
定义
子查询——先进行一次查询,第一次查询的结果作为第二次查询的源/条件(第二次查询是基于第一次的查询结果来进行的)
子查询返回单个值——单行单列
案例
查询班级表中字段名为Java2204的数据, 查询所有Java2204班级中选课副码为1的学生信息
代码实现
查询班级表中字段名为Java2204的数据
select class_id from classes c where name ='Java2204';
查询所有Java2204班级中选课副码为1的学生信息
select * from students s where cid=1;
运行结果
查询所有Java班级中的学生信息 单列多行查询
代码实现
select class_id from classes c where name like 'Java%' ;
运行结果

显示三条查询语句 union连接关键字
代码实现
#显示三条查询语句 union连接关键字
select * from students s where cid=1
union
select * from students s where cid=2
union
select * from students s where cid=3;
运行结果
子查询,in关键字 单列多行查询
如果查询结果是单列多行,要有关键字in
in代表的是包含,not in代表不包含
代码实现
select * from students s where cid in(select class_id from classes c where name like 'Java%');
运行结果
查询cid=1的班级中性别为男的学生信息
语法
select * from (select * from 表名 where 限制) 别名 where 别名.列名 = 限制;
将第一步查询语句当作一个虚拟表(限制信息)查询第二个表
代码实现
select * from (select * from students where cid = 1) t where t.stu_gender='男';
运行结果
相关文章:
Mysql数据库 9.SQL语言 查询语句 连接查询、子查询
连接查询 通过查询多张表,用连接查询进行多表联合查询 关键字:inner join 内连接 left join 左连接 right join 右连接 数据准备 创建新的数据库:create database 数据库名; create database db_test2; 使用数据库:use 数据…...
二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法
完全二叉树:就是每层横着划过去是连起来的,中间不会断开 比如下面的左图就是完全二叉树 再比如下面的右图就是非完全二叉树 那我们可以采用层序遍历的方法,借助一个辅助队列 当辅助队列不空的时候,出队头元素,入队头…...
Android自定义控件
目录 Android自定义控件一、对现有控件进行扩展二、创建复合控件1 定义属性2 组合控件3 引用UI模板 三、重写View来实现全新控件1 弧线展示图1.1 具体步骤: 2 音频条形图2.1 具体步骤 四、补充:自定义ViewGroup Android自定义控件 ref: Android自定义控件…...
Java 中的 Cloneable 接口和深拷贝
引言: 在 Java 中,深拷贝是一种常见的需求,它可以创建一个对象的完全独立副本。Cloneable 接口提供了一种标记机制,用于指示一个类实例可以被复制。本文将详细介绍 Java 中的 Cloneable 接口和深拷贝的相关知识࿰…...
项目实战:通过axios加载水果库存系统的首页数据
1、创建静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"style/index.css"><script src"script/axios.mi…...
RK3568平台 内存的基本概念
一.Linux的Page Cache page cache,又称pcache,其中文名称为页高速缓冲存储器,简称页高缓。page cache的大小为一页,通常为4K。在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访…...
mysql联合索引和最左匹配问题。
1引言: 如果频繁地使⽤相同的⼏个字段查询,就可以考虑建⽴这⼏个字段的联合索引来提⾼查询效率。⽐如对 于联合索引 test_col1_col2_col3,实际建⽴了 (col1)、(col1, col2)、(col, col2, col3) 三个索引。联合 索引的主要优势是减少结果集数量…...
全球发布|首个AI视角下的生态系统架构解读—《生态系统架构--人工智能时代从业者的新思维》重磅亮相!
点击可免费注册下载 👇 人工智能时代的企业架构师必读系列 《生态系统架构--人工智能时代从业者的新思维》 Philip Tetlow、Neal Fishman、Paul Homan、Rahul著 The Open Group Press 2023年11月出版 这本书可以很好地帮助全球架构师使用人工智能来构建、开发和…...
解决torch.hub.load加载网络模型异常
1 torch.hub.load 加载网络模型错误 通过网络使用torch.hub.load加载模型代码如下: self.model torch.hub.load("facebookresearch/dinov2", dinov2_vits14, sourcegithub).to(self.device) 运行网上的项目,经常会卡住或者超时,…...
如何获取HuggingFace的Access Token;如何获取HuggingFace的API Key
Access Token通过编程方式向 HuggingFace 验证您的身份,允许应用程序执行由授予的权限范围(读取、写入或管理)指定的特定操作。您可以通过以下步骤获取: 1.首先,你需要注册一个 Hugging Face 账号。如果你已经有了账号…...
How to resolve jre-openjdk and jre-openjdk-headless conflicts?
2023-11-05 Archlinux 执行 pacman -Syu 显示 failed to prepare transaction;jre-openjdk and jre-openjdk-headless conflicts 解决 archlinux sudo pacman -Sy jdk-openjdk...
setTimeout和setImmediate以及process.nextTick的区别?
目录 前言 setTimeout 特性和用法 setImmediate 特性和用法 process.nextTick 特性和用法 区别和示例 总结 在Node.js中,setTimeout、setImmediate和process.nextTick是用于调度异步操作的三种不同机制。它们之间的区别在于事件循环中的执行顺序和优先级。…...
read 方法为什么返回 int 类型
在Java的输入流(InputStream)中,read方法返回int类型的值的原因是为了提供更多的信息和灵活性。虽然这可能看起来有些不直观,但有一些合理的考虑和用途,主要包括以下几点: EOF标志:read方法返回…...
在二维矩阵/数组中查找元素 Leetcode74, Leetcode240
这一类题型中二维数组的元素取值有序变化,因此可以用二分查找法。我们一起来看一下。 一、Leetcode 74 Leetcode 74. 搜索二维矩阵 这道题要在一个二维矩阵中查找元素。该二维矩阵有如下特点: 每行元素 从左到右 按非递减顺序排列。每行的第一个元素 …...
MS35657步进电机驱动器可兼容DRV8824
MS35657 是一款双通道 DMOS 全桥驱动器,可以驱动一个步进电机或者两个直流电机。可兼容DRV8824(功能基本一致,管脚不兼容)。每个全桥的驱动电流在 24V 电源下可以工作到 1.4A。MS35657 集成了固定关断时间的 PWM 电流校正器&#…...
SQL语句性能优化
1、查询 SQL 尽量不要使用 select *,而是 select 具体字段 反例子: select * from sys_user; 正例子: select id,name from sys_user; 理由如下: 只取需要的字段,节省资源、减少网络开销。select * 进行查询时,很可能就不会使用到覆盖索引了,就会造成回表查询。…...
线性代数之 伪逆矩阵
目录 一、伪逆矩阵 ◼ A的伪逆矩阵与SVD ◼ 用Python代码计算A的伪逆矩阵 ◼ 笔算A的伪逆矩阵 一、伪逆矩阵 ◼ A的伪逆矩阵与SVD 逆矩阵并不总是存在,即使是方阵。然而,对于非正方形矩阵,存在一个伪逆矩阵,也叫摩尔-彭罗斯…...
【3D图像分割】基于Pytorch的VNet 3D 图像分割5(改写数据流篇)
在这篇文章:【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2(基础数据流篇) 的最后,我们提到了: 在采用vent模型进行3d数据的分割训练任务中,输入大小是16*96*96,这个的裁剪是放到Dataset类…...
【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2016-4437漏洞名称Apache_Shiro_1.2.4_反序列化漏洞漏洞评级…...
Mac连接linux的办法(自带终端和iterm2)
1. 使用Mac自带终端Terminal 1.1 点击右上角的聚焦搜索,再输入终端 1.2 查找linux系统的ip地址 在虚拟机里输入如下命令,找到蓝色区域的就是ip地址 ip addr 如果没有显示ip地址,可以重新安装一下虚拟机,之后确保以太网的连接是打…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...



