当前位置: 首页 > news >正文

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 接口和深拷贝的相关知识&#xff0…...

项目实战:通过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&#xff0c;又称pcache&#xff0c;其中文名称为页高速缓冲存储器&#xff0c;简称页高缓。page cache的大小为一页&#xff0c;通常为4K。在linux读写文件时&#xff0c;它用于缓存文件的逻辑内容&#xff0c;从而加快对磁盘上映像和数据的访…...

mysql联合索引和最左匹配问题。

1引言&#xff1a; 如果频繁地使⽤相同的⼏个字段查询&#xff0c;就可以考虑建⽴这⼏个字段的联合索引来提⾼查询效率。⽐如对 于联合索引 test_col1_col2_col3&#xff0c;实际建⽴了 (col1)、(col1, col2)、(col, col2, col3) 三个索引。联合 索引的主要优势是减少结果集数量…...

全球发布|首个AI视角下的生态系统架构解读—《生态系统架构--人工智能时代从业者的新思维》重磅亮相!

点击可免费注册下载 &#x1f447; 人工智能时代的企业架构师必读系列 《生态系统架构--人工智能时代从业者的新思维》 Philip Tetlow、Neal Fishman、Paul Homan、Rahul著 The Open Group Press 2023年11月出版 这本书可以很好地帮助全球架构师使用人工智能来构建、开发和…...

解决torch.hub.load加载网络模型异常

1 torch.hub.load 加载网络模型错误 通过网络使用torch.hub.load加载模型代码如下&#xff1a; self.model torch.hub.load("facebookresearch/dinov2", dinov2_vits14, sourcegithub).to(self.device) 运行网上的项目&#xff0c;经常会卡住或者超时&#xff0c…...

如何获取HuggingFace的Access Token;如何获取HuggingFace的API Key

Access Token通过编程方式向 HuggingFace 验证您的身份&#xff0c;允许应用程序执行由授予的权限范围&#xff08;读取、写入或管理&#xff09;指定的特定操作。您可以通过以下步骤获取&#xff1a; 1.首先&#xff0c;你需要注册一个 Hugging Face 账号。如果你已经有了账号…...

How to resolve jre-openjdk and jre-openjdk-headless conflicts?

2023-11-05 Archlinux 执行 pacman -Syu 显示 failed to prepare transaction&#xff1b;jre-openjdk and jre-openjdk-headless conflicts 解决 archlinux sudo pacman -Sy jdk-openjdk...

setTimeout和setImmediate以及process.nextTick的区别?

目录 前言 setTimeout 特性和用法 setImmediate 特性和用法 process.nextTick 特性和用法 区别和示例 总结 在Node.js中&#xff0c;setTimeout、setImmediate和process.nextTick是用于调度异步操作的三种不同机制。它们之间的区别在于事件循环中的执行顺序和优先级。…...

read 方法为什么返回 int 类型

在Java的输入流&#xff08;InputStream&#xff09;中&#xff0c;read方法返回int类型的值的原因是为了提供更多的信息和灵活性。虽然这可能看起来有些不直观&#xff0c;但有一些合理的考虑和用途&#xff0c;主要包括以下几点&#xff1a; EOF标志&#xff1a;read方法返回…...

在二维矩阵/数组中查找元素 Leetcode74, Leetcode240

这一类题型中二维数组的元素取值有序变化&#xff0c;因此可以用二分查找法。我们一起来看一下。 一、Leetcode 74 Leetcode 74. 搜索二维矩阵 这道题要在一个二维矩阵中查找元素。该二维矩阵有如下特点&#xff1a; 每行元素 从左到右 按非递减顺序排列。每行的第一个元素 …...

MS35657步进电机驱动器可兼容DRV8824

MS35657 是一款双通道 DMOS 全桥驱动器&#xff0c;可以驱动一个步进电机或者两个直流电机。可兼容DRV8824&#xff08;功能基本一致&#xff0c;管脚不兼容&#xff09;。每个全桥的驱动电流在 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 逆矩阵并不总是存在&#xff0c;即使是方阵。然而&#xff0c;对于非正方形矩阵&#xff0c;存在一个伪逆矩阵&#xff0c;也叫摩尔-彭罗斯…...

【3D图像分割】基于Pytorch的VNet 3D 图像分割5(改写数据流篇)

在这篇文章&#xff1a;【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2&#xff08;基础数据流篇&#xff09; 的最后&#xff0c;我们提到了&#xff1a; 在采用vent模型进行3d数据的分割训练任务中&#xff0c;输入大小是16*96*96&#xff0c;这个的裁剪是放到Dataset类…...

【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 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 点击右上角的聚焦搜索&#xff0c;再输入终端 1.2 查找linux系统的ip地址 在虚拟机里输入如下命令&#xff0c;找到蓝色区域的就是ip地址 ip addr 如果没有显示ip地址&#xff0c;可以重新安装一下虚拟机&#xff0c;之后确保以太网的连接是打…...

告别C盘爆满!手把手教你配置Miniforge,让所有虚拟环境乖乖待在D盘

彻底解放C盘空间&#xff1a;Miniforge虚拟环境全迁移至D盘实战指南 每次打开资源管理器看到C盘飘红的存储条&#xff0c;心跳都会漏半拍——这大概是Windows开发者最熟悉的焦虑场景。特别是当你发现conda创建的虚拟环境正悄无声息吞噬着宝贵的系统盘空间时&#xff0c;那种无…...

学术写作“变形记”:书匠策AI如何让课程论文从“青铜”变“王者”——解锁AI时代论文写作新姿势

论文写作&#xff0c;曾是无数学生的“噩梦”&#xff1a;选题撞车、文献堆积如山、逻辑混乱如麻、格式调整让人抓狂……如今&#xff0c;随着人工智能技术的爆发&#xff0c;学术写作的“游戏规则”正在被彻底改写。书匠策AI&#xff08;官网&#xff1a;www.shujiangce.com&a…...

从代码到部署:手把手复现CenterPoint(PyTorch版)在KITTI数据集上的完整流程

从零实现CenterPoint&#xff1a;KITTI数据集3D目标检测全流程实战指南 为什么选择CenterPoint进行3D目标检测&#xff1f; 在自动驾驶和机器人感知领域&#xff0c;3D目标检测一直是核心技术难题。传统基于锚框&#xff08;Anchor-based&#xff09;的方法在处理旋转物体时表现…...

UDOP-large算力优化:FP16推理+FlashAttention加速UDOP-large响应速度

UDOP-large算力优化&#xff1a;FP16推理FlashAttention加速UDOP-large响应速度 1. 为什么你的UDOP-large模型跑得不够快&#xff1f; 如果你用过UDOP-large这个文档理解模型&#xff0c;可能会发现一个问题&#xff1a;处理文档图片的时候&#xff0c;有时候响应速度不够理想…...

RPA+AI市场进入精细化竞争阶段,企业选型逻辑正在改变

IDC最新数据显示&#xff0c;中国RPAAI解决方案市场规模已达31.5亿元&#xff0c;竞争格局呈现“头部集中、市场分散”特征&#xff1a;金智维以10.1%份额位居第一&#xff0c;艺赛旗&#xff08;9.1%&#xff09;、来也科技&#xff08;8.4%&#xff09;紧随其后&#xff0c;前…...

AgentCPM-Report研报系统实操:Pixel Epic贤者响应延迟优化教程

AgentCPM-Report研报系统实操&#xff1a;Pixel Epic贤者响应延迟优化教程 1. 认识Pixel Epic智识终端 Pixel Epic是一款基于AgentCPM-Report大模型构建的创新研究报告辅助系统。与传统AI工具不同&#xff0c;它将枯燥的科研过程转化为一场像素风格的RPG冒险。在这个系统中&a…...

如何高效使用小米手表表盘制作工具:Mi-Create完整操作指南

如何高效使用小米手表表盘制作工具&#xff1a;Mi-Create完整操作指南 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 想为你的小米手表或手环设计个性化表盘吗…...

SeargeSDXL:让SDXL图像生成像搭积木一样简单的ComfyUI终极方案

SeargeSDXL&#xff1a;让SDXL图像生成像搭积木一样简单的ComfyUI终极方案 【免费下载链接】SeargeSDXL Custom nodes and workflows for SDXL in ComfyUI 项目地址: https://gitcode.com/gh_mirrors/se/SeargeSDXL 还在为ComfyUI中复杂的SDXL工作流程而头疼吗&#xff…...

4个革新性步骤:NHSE动物森友会存档编辑器完全指南

4个革新性步骤&#xff1a;NHSE动物森友会存档编辑器完全指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE&#xff08;动物森友会存档编辑器&#xff09;作为一款开源免费工具&#xff0c…...

从键盘敲击到屏幕显示:一个字符在Linux内核里的完整旅程(附C代码模拟)

从键盘敲击到屏幕显示&#xff1a;一个字符在Linux内核里的完整旅程 当你在终端敲下字母"A"时&#xff0c;这个简单的动作背后隐藏着一场跨越硬件、内核和用户空间的精密协作。让我们跟随这个字符的脚步&#xff0c;揭开Linux系统如何处理键盘输入的神秘面纱。 1. …...