在SQL / MySQL中,连接语句中的“ON”和“WHERE”有什么区别?

2023-12-13

以下语句给出相同的结果(一个是使用on,另一个使用where):

mysql> select * from gifts INNER JOIN sentGifts ON gifts.giftID = sentGifts.giftID;
mysql> select * from gifts INNER JOIN sentGifts WHERE gifts.giftID = sentGifts.giftID;

我只能在左外连接的情况下看到找到“不匹配”的情况:
(找出从未有人送过的礼物)

mysql> select name from gifts LEFT OUTER JOIN sentgifts 
           ON gifts.giftID = sentgifts.giftID 
           WHERE sentgifts.giftID IS NULL;

在这种情况下,首先使用on, 进而where。是否on先进行匹配,然后where是否进行“二次”过滤?或者是否有更通用的使用规则on versus where?谢谢。


The ON子句定义表之间的关系。

The WHERE子句描述您感兴趣的行。

很多时候,您可以交换它们并仍然得到相同的结果,但是左外连接的情况并不总是如此。

  • If the ON子句失败,您仍然会得到一行,其中包含来自 左表但右表的列中有空值。
  • If the WHERE子句失败,您根本不会得到该行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在SQL / MySQL中,连接语句中的“ON”和“WHERE”有什么区别? 的相关文章

  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 级联删除时触发调用

    我在 MySQL 中有表 A 它有一些对其他表 B C D 的级联删除的引用 当从 A 中删除某些内容时 我需要使用触发器 当我直接从 A 删除记录时 此触发器起作用 但它不适用于级联删除 是否存在任何版本的 MySQL 可以让我的触发器与
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • Python 子进程、mysqldump 和管道

    我在尝试构建简单的备份 升级数据库脚本时遇到问题 错误出现在使用子进程的 mysqldump 调用中 cmdL mysqldump user db user password db pass domaindb gzip gt databas
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 与常规 SQL 查询不同,为什么“linq to sql”查询以 FROM 关键字开头?

    为什么 linq to sql 查询以FROM与常规 SQL 查询不同的关键字 LINQ 模仿Logical Query processing在 SQL 中你有 8 SELECT 9 DISTINCT 11 TOP 1 FROM 2 ON
  • Django:使用 Django ORM 实现 JOIN?

    我有一个用 Django 构建的问答类型的网站 具有以下模型 class Question models Model title models CharField max length 70 details models TextField
  • MySQL 将表的校验和存储在另一个表中

    语境 我们有包含大量表的大型数据库 他们中的大多数 99 都使用innodb 我们希望有一个日常流程来监视哪个表已被修改 当他们使用 innodb 的值时Update time from SHOW table STATUS from inf
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • MySQL - 从另一个表插入与常量合并的数据

    我有一个包含一些数据的临时表 products temp 并且我有另一个需要将数据插入其中的表 产品 我需要在新记录上手动设置一些常量 例如vendor id 1等 是否可以在一次请求中插入临时表数据和常量 临时产品 product nam
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • SQL Server 标识列值从 0 而不是 1 开始

    我遇到了一个奇怪的情况 数据库中的某些表的 ID 从 0 开始 即使 TABLE CREATE 的 IDENTITY 1 1 也是如此 对于某些表来说是这样 但对于其他表则不然 它一直有效到今天 我尝试过重置身份列 DBCC CHECKID
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da

随机推荐

  • 如何在 TypeScript 中设置类型参数的下限?

    在 TypeScript 我的版本 2 1 1 中 可以为类型参数设置上限 如下所示 class Animal class Cat extends Animal class Kitten extends Cat function foo a
  • 存储 bcrypt 哈希值

    根据 PHP 的文档 bcrypt salt 是由 2a 两位数的成本参数 以及字母表中的 22 位数字 0 9A Za z 因此 如果我使用 crypt 函数对我的密码进行哈希处理 则结果输出包括前 7 个字符 2a 10 如果 10 是
  • WindowsFormsHost 上的工具栏覆盖

    我有一个嵌入在 WPF 窗口内的 WindowsFormsHost 控件中的 SWF 对象 我想在 swf 影片上添加一个工具栏 我下面的代码片段的问题是 当新的子控件添加到主机控件时 或者加载电影 我还没有弄清楚是哪一个 工具栏实际上是不
  • Grails:Spring Security CAS 在 2.2.3 中工作,但在 2.3.0 中不起作用

    我有一个使用 Groovy 2 0 的 Grails 2 2 3 项目 我使用 Spring Security 将其设置为使用 CAS 进行身份验证 使用 LDAP 进行用户角色 当我运行应用程序时 一切都按预期进行 任何人都允许访问 ap
  • 当选择另一个复选框时,如何启用/禁用复选框?

    我了解了如何在选中一个复选框时选中 取消选中或隐藏 显示 但我正在寻找的是当用户单击 快餐 时 当我有 5 个复选框 快餐 餐饮 外带 送货 和 酒吧 时 当用户选中时 其余复选框将被禁用餐饮 休息被禁用 但当用户选中 携带 时 仅快餐和餐
  • imagettftext() - 找不到字体位置

    我正在使用 imagettftext 函数创建自定义验证码脚本 我已在运行 PHP 版本 5 3 8 的 PC 上成功运行并测试了代码 但是当我上传到运行 PHP 版本 5 2 17 的共享托管帐户时 出现以下错误 Warning imag
  • window.fullScreen=true 不起作用

    我想以全屏模式打开我的 html 页面 我尝试在 body 的 onload 事件处理程序中执行此 javascript window fullScreen true 但不幸的是这似乎不起作用 有没有其他方法可以达到同样的效果 我不认为你可
  • Identity列增量值差距巨大

    我创建了一个带有标识列的表 当我在该表中插入值时 标识列显示值之间存在巨大的增量差距 身份值从 6 跳到 10001 这是按部门 id 排序的输出 输出截图在这里 这是我创建的表 Create Table STG2 Department D
  • 更改 Eclipse 中的默认 XML 编辑器

    Eclipse 挂起时使用 XML 默认编辑器太慢并且会出现很多问题 我读到 如果我们更改编辑器 它就可以正常工作 那么如何删除现有编辑器 您可以自定义它们 窗口 gt 首选项 gt 常规 gt 编辑器 gt 文件关联 在那里 您必须选择一
  • jqGrid 中使用工具栏搜索默认在列中间搜索

    阅读 jqGrid wiki 后 并以以下示例为例 jqGrid 中不区分大小写的搜索 包括隐藏字段 我找不到我想做的事情 是否有任何搜索选项可以在列中的任何位置启用搜索 自动通配符 如果该列包含 Apple Iphone 我将能够通过搜索
  • 如何将消息重定向到死信队列Azure服务总线

    我正在使用隔离的天蓝色函数从队列接收消息 我需要验证收到的消息 如果无效 则将其发送到死信队列 我发现唯一的方法是抛出异常 重试 10 次后 消息将被移至死信队列 当然这不是一个好的解决方案 也许有人面临同样的任务 谢谢 Function
  • 如何让这个嵌套通用参数系统正常工作?

    所以我正在努力让一个相当复杂的系统运行起来 这是我正在尝试的基础知识 Rules abstract class Rule stuff class ExampleRule extends Rule stuff 处理程序 abstract cl
  • 在 Swift 4 中,如果按下“Backspace”按钮且文本字段为空,如何移动到上一个 UITextField?

    我正在尝试解决这个问题 当我使用下面的代码时 我可以从一个文本字段移动到下一个文本字段 然后单击 退格 按钮 但仅当文本字段中有文本时才有效 我的问题 当文本字段为空时 如何单击 退格 按钮并移至上一个文本字段 第二个问题 如何去掉屏幕上闪
  • 通过 Android 访问 Google 帐户 ID/用户名

    如何在代码中访问用户的 Google 帐户 ID 用户名 我正在构建一个应用程序 它将调用 Web 服务来存储数据 并且我想识别提交数据的人的身份 我遇到了同样的问题 这两个链接为我解决了 第一个是这个 如何在 Android 手机上找回已
  • 字符串数组列表成一个逗号分隔的字符串

    尝试将字符串的 Arraylist 转换为一个大逗号分隔的字符串 但是当我使用 String joined TextUtils join participants 调试器显示参与者的大小为 4 但是连接值为 因此为空 private Arr
  • Symfony 1.4 邮件程序中的电子邮件正文?

    我正在使用 Symfony 1 4 邮件程序 在其中构建电子邮件所需的各个部分 然后使用以下命令将其发送出去 this gt getMailer gt composeAndSend sender recipient subject body
  • 在反应本机地图上需要未知模块“未定义”

    我想实现react native mapshere 但是当我导入上面的 MapView 时App js与代码import MapView from react native maps 我收到此错误 需要未知模块 未定义 如果您确定该模块存在
  • 子进程调用无效参数或选项未找到

    我试图在 Linux 上使用 subprocess call 调用 ffmpeg 命令 但我无法获得正确的参数 之前 我使用了 os system 并且它有效 但不推荐这种方法 使用带破折号的参数 例如 i 会出现此错误 Unrecogni
  • 如何使用 JHipster 注册表修复无效的 JWT [Docker]?

    我想用 JHipster 构建一个微服务软件 我正在 Docker 中运行 jhipster registry v3 2 4 我还有一个微服务应用程序 使用生成器 5 0 1 创建 但我没有生成网关应用程序 我在 docker compos
  • 在SQL / MySQL中,连接语句中的“ON”和“WHERE”有什么区别?

    以下语句给出相同的结果 一个是使用on 另一个使用where mysql gt select from gifts INNER JOIN sentGifts ON gifts giftID sentGifts giftID mysql gt