sql专题 之 where和join on
文章目录
- 前言
- where
- 介绍
- 使用
- 过滤结果集
- 关联两个表
- 连接
- 外连接
- 内连接
- 自然连接
- 使用inner join和直接使用where关联两个表的区别
- 总结
前言
从数据库查询数据时,一张表不足以查询到我们想要的数据,更多的时候我们需要联表查询。
联表查询我们一般会使用连接,如inner join 、left join、right join 和 outer join等,但是个别时候也会使用where,接下来我们了解一下join on和where的区别
- 我们创建两个表,student和class(忽略数据的多少啊,仅做举例使用)


where
介绍
WHERE 是 SQL 中的一个关键字,用于在查询(如 SELECT、UPDATE 或 DELETE)中指定条件,以过滤出符合特定标准的数据。
- WHERE 子句可以显著提高查询的效率,因为它限制了数据库处理的数据量。
使用
过滤结果集
-
条件运算符 和 逻辑运算法的使用
这里不多说了,不清楚的可以移步这里 →sql专题 之 常用命令
-
where和having的区别
WHERE 子句只能指定行的条件,而不能指定组的条件
HAVING 子句可以使用聚合函数,它用来指定组的条件
关联两个表
-
查询所有的学生的信息包括其班主任名称
select * FROM student,class WHERE student.class_id = class.id
相信这是大多数同学们第一次联表查询老师教的方法。
通过关联student表中的class_id 和 class表中的id,我们获取了所有的信息。
要知道from后的“student,class”功能可以说跟inner join一模一样。 -
where也能实现,为什么还有join on呢?
虽然仅通过where关键字也可以进行联表查询,但是在sql中,还是需要各司其职比较好。毕竟where的定位是过滤筛选结果集。
where拿手的是筛选,咱就别贪多嚼不烂了,联表查询还是交给join把~
连接
连接花样就多了,有外连接、内连接 和 自然连接
外连接
不仅包含符合连接条件的行,还会包括左表(左连接)、右表(右连接)或两个表中的所有数据行(全外连接)
-
左连接
左表为主表,左表中所有记录都会出现在结果集中,如果该行的字段在右表中没有匹配上,那么右表对应的字段以null填充
select * FROM student left join class on student.class_id = class.id
left join 以左边的student表为基准,显示了表中没有class_id的数据,并以null填充。
这样的好处是:不漏掉student表中任何一个数据 -
右连接
右表为主表,右表中所有记录都会出现在结果集中,如果该行的字段在左表中没有匹配上,那么左表对应的字段以null填充
select * FROM student right join class on student.class_id = class.id
right join 以右边的class表为基准,id为4的班级没有学生信息录入,那扔以null填充
坚决不漏掉class表中任意一个数据
内连接
只连接匹配的行。
即只有条件的交叉连接,会根据某个条件筛选出符合条件的记录。不符合条件的记录不会出现在结果集中
select * FROM student inner join class on student.class_id = class.id

看,就取这俩表的交集,谁也不特殊照顾~~
自然连接
自然连接是一种特殊的等值连接,它基于两个或多个表之间的共同字段自动进行连接。自然连接会自动选择那些在两个表中具有相同名称和兼容数据类型的字段作为连接条件
-
两个表没有相同的字段
select * from student NATURAL JOIN class如我们上边的表,两个表的字段没有相同的,那么结果就是一个笛卡尔积。运行结果同
“select * from student cross join class” -
两个表有相同的字段
我们对student表增加一个列“teacher”。

select * from student NATURAL JOIN class
这里特意试了一个小陷阱,会发现,在查询结果中,teacher列只出现了一列。说明仅仅是按照字段一模一样来匹配的。
在实际应用中,自然连接的使用相对较少,因为它可能不够灵活,并且可能导致意外的结果。通常,更推荐使用显式的JOIN操作符和ON子句来指定连接条件,这样可以更精确地控制连接行为。
使用inner join和直接使用where关联两个表的区别
- 实现原理
- INNER JOIN
使用INNER JOIN时,连接条件放在ON子句中,这是一种显式连接。
这种方式通过哈希表进行连接比较,效率较高。 - WHERE子句
使用WHERE子句进行连接时,连接条件放在WHERE子句中,这是一种隐式连接。
这种方式先生成笛卡尔积,然后再进行过滤,效率较低。
- INNER JOIN
- 性能差异
- INNER JOIN
使用哈希表进行连接比较,其时间复杂度为O(LogN),效率较高。
- WHERE子句
由于先生成笛卡尔积再进行过滤,其时间复杂度为O(N^2),因此效率较低。
- INNER JOIN
- 使用场景
- INNER JOIN
适用于需要高效连接查询的场景
特别是在连接条件较为复杂或需要结合多个连接条件时 - WHERE子句
适用于连接条件较为简单,且不需要显式连接操作的场景
虽然效率较低,但在某些简单查询中仍然可以使用
- INNER JOIN
总结
选择使用join on还是where取决于查询的具体需求和表的连接类型。
在内部连接中,join on和where的作用相似,可以互换使用。但在非内部连接中,尤其是使用left join on等连接类型时,on用于定义表之间的连接条件,而where则用于进一步筛选结果集中的记录。
总的来说,联表以后还是用连接查询吧😏😏😏
相关文章:
sql专题 之 where和join on
文章目录 前言where介绍使用过滤结果集关联两个表 连接外连接内连接自然连接 使用inner join和直接使用where关联两个表的区别总结 前言 从数据库查询数据时,一张表不足以查询到我们想要的数据,更多的时候我们需要联表查询。 联表查询我们一般会使用连接…...
day12:版本控制器
版本控制 使用到的命令: ls -al查看当前目录下的文件及文件夹mkdir新建目录rm -rf递归强制删除文件夹 一、安装配置 1、下载地址 Git 2、初始配置 #用户名 git config --global user.name "自定义用户名" #邮箱(公司的联系方式--追责&…...
第四十一章 Vue之初识VueX
目录 一、引言 1.1. vuex的概念 1.2. vuex使用场景 1.3. 优势 二、创建演示项目 2.1. 构建项目步骤 2.2. 项目最终生成结构 2.3. 创建项目文件 2.3.1. App.vue 2.3.2. Son1.vue 2.3.3. Son2.vue 三、创建一个空仓库 3.1. 安装vuex 3.2. 新建仓库 3.3. 挂载仓库…...
GIT的基本使用与进阶
GIT的简单入门 一.什么是git? Git 是一个开源的分布式版本控制系统,用于跟踪文件更改、管理代码版本以及协作开发。它主要由 Linus Torvalds 于 2005 年创建,最初是为 Linux 内核开发而设计的。如今,Git 已经成为现代软件开发中…...
【Linux系统】—— 基本指令(二)
【Linux系统】—— 基本指令(二) 1 「alias」命令1.1 「ll」命令1.2 「alias」命令 2 「rmdir」指令与「rm」指令2.1 「rmdir」2.2 「rm」2.2.1 「rm」 删除普通文件2.2.2 「rm」 删除目录2.2.3 『 * 』 通配符 3 「man」 指令4 「cp」 指令4.1 拷贝普通…...
MFC工控项目实例三十实现一个简单的流程
启动按钮夹紧 密闭,时间0到平衡 进气,时间1到进气关,时间2到平衡关 检测,时间3到平衡 排气,时间4到夹紧开、密闭开、排气关。 相关代码 void CSEAL_PRESSUREDlg::OnTimer_2(UINT nIDEvent_2) {// if (nIDEvent_21 &am…...
【Android、IOS、Flutter、鸿蒙、ReactNative 】文本点击事件
Android Studio 版本 Android Java TextView 实现 点击事件 参考 import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast;public c…...
json转excel,读取json文件写入到excel中【rust语言】
一、rust代码 将json文件写入到 excel中。(保持json :key原始顺序) use indexmap::IndexMap; use serde::Deserialize; use serde_json::{Value, from_str}; use std::error::Error; use std::io::{self, Write}; use std::path::{Path}; u…...
Java面试要点06 - static关键字、静态属性与静态方法
本文目录 一、引言二、静态属性(Static Fields)三、静态方法(Static Methods)四、静态代码块(Static Blocks)五、静态内部类(Static Nested Classes)六、静态导入(Static…...
动态规划-背包问题——416.分割等和子集
1.题目解析 题目来源 416.分割等和子集——力扣 测试用例 2.算法原理 1.状态表示 这里背包问题基本上和母题的思路大相径庭,母题请见 [模板]01.背包 ,这里的状态表示与装满背包的情况类似,第二个下标就是当选择的物品体积直接等于j时是否可…...
Pr:视频过渡快速参考(合集 · 2025版)
Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果,包含不同风格和用途,可在两个剪辑之间创造平滑、自然的转场,用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示: 点击下…...
网络安全---安全见闻2
网络安全—安全见闻 拓宽视野不仅能够丰富我们的知识体系,也是自我提升和深造学习的重要途径!!! 设备漏洞问题 操作系统漏洞 渗透测试视角:硬件设备上的操作系统可能存在各种漏洞,攻击者可以利用这些漏洞…...
解决因为TortoiseSVN未安装cmmand line client tools组件,导致idea无法使用svn更新、提交代码
一.错误信息 1.更新代码时:SVN: 更新错误 找不到要更新的版本管理目录。 2.提交代码:检测不到任何更新(实际上有代码修改)。 3.Cannot run program "svn"。 二.原因分析 在电脑上新安装的的客户端TortoiseSVN、ide…...
Ubuntu 20.04安装CUDA 11.0、cuDNN 8.0.5
不知道咋弄的ubuntu20.04电脑的cuda驱动丢了,无奈需装PyTorch环境,只有CUDA11.0以上版本才支持Ubuntu20.04,所以安装了CUDA11.0、cuDNN8.0.5 为防止频繁在浏览器检索对应的贴子,今天记录一下。 一. 驱动安装 为防止驱动安装后没…...
鸿蒙 APP 发布上架
证书创建与打包: https://developer.huawei.com/consumer/cn/doc/app/agc-help-releaseharmony-0000001933963166 不同环境多渠道打包: //todo 备案相关 一、除了发布应用商店以外,还有3个渠道,都适合小规模内测。 【1】开放式测试:发给指定白名单用户 【2】发布企业内…...
【C++笔记】C++三大特性之继承
【C笔记】C三大特性之继承 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】C三大特性之继承前言一.继承的概念及定义1.1 继承的概念1.2继承的定义1.3继承基类成员访问方式的变化1.4继承类模板 二.基类和派生类间的转…...
如何在CentOS 7上搭建SMB服务
如何在CentOS 7上搭建SMB服务 因项目测试需求,需要自行搭建SMB服务,**SMB(Server Message Block)**协议是一种常用的文件共享方式,它可以让不同操作系统之间共享文件、打印机等资源。本文将带你一步步搭建一个简单的S…...
linux详解,基本网络枚举
基本网络枚举 一、基本网络工具 ifconfig ifconfig是一个用于配置和显示网络接口信息的命令行工具。它可以显示网络接口的P地址、子网掩码、MC地址等信息,还可以用于启动、停止或配置网络接口。 ip ip也是用于查看和管理网络接口的命令。 它提供了比ifconfig更…...
5G智能对讲终端|北斗有源终端|北斗手持机|单兵|单北斗
在当今这个快速发展的数字化时代,5G技术的广泛应用正以前所未有的速度推动着各行各业的变革。作为这一技术浪潮中的重要一环,5G智能终端QM630D凭借其卓越的性能和多样化的功能,在林业、渔业、安保、电力、交通等多个领域展现出了巨大的应用潜…...
第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)
这个多通道采用非扫描模式--单次转换模式 1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式(单次和连续) 4.ADC的扫描模式的转换模式(单次和连续) 5.采集校准 代码实验: 代码部分: #inclu…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
