SQL表连接中ON和WHERE子句的区别

2023-11-21

select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
and (e.hire_date > m.hire_date);

select e.last_name, e.hire_date
from employees e join employees m
on (m.last_name = 'Davies')
where (e.hire_date > m.hire_date);

select e.last_name, e.hire_date
from employees e join employees m
on (e.hire_date > m.hire_date)
where (m.last_name = 'Davies');

这三个语句具有相同的结果。除了以下事实之外where不能单独使用,不使用on,有什么特殊的理由要使用where到底在表连接中吗?


主要区别在于您使用不同的连接时。

通常,如果您要使用内部联接,您应该看到相同的结果,但一旦开始使用 LEFT 连接,结果就会改变。

看看下面的例子

SQL 小提琴演示

看看下面的文章(非常解释性的)

编辑@ShannonSeverance

架构和测试数据

CREATE TABLE Table1 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table1 VALUES (1,'a');
INSERT INTO Table1 VALUES (2,'a');

CREATE TABLE Table2 (
  ID INT,
  Val VARCHAR(20)
 );

INSERT INTO Table2 VALUES (1,'a');

和测试

SELECT t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 INNER JOIN
Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1,Table2 t2 
WHERE t1.ID = t2.ID
 AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  AND t1.Val = t2.Val;

SELECT  t1.ID,
t1.Val,
t2.ID ID2,
t2.Val Val2
FROM Table1 t1 LEFT JOIN
Table2 t2 ON t1.ID = t2.ID  
WHERE t1.Val = t2.Val;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL表连接中ON和WHERE子句的区别 的相关文章

随机推荐

  • JComponent 未显示图片背景?

    我的组件没有显示 我该如何解决 Code import java awt import java awt event ActionEvent import java awt event ActionListener import java
  • ActionBar 上没有应用程序图标

    这里有很多关于向 ActionBar 添加图标的查询 但没有一个解决我的问题 如果您知道此问题的重复项 请随时发表评论或关闭此问题 我将我的项目迁移到 IntelliJ 并且在我以前的 IDE Eclipse 中没有遇到这个问题 问题 应用
  • Hyperledger:运行“./byfn -m up”时获取“/bin/bash: ./scripts/script.sh: No such file or directory”

    我是超级账本的新手 只是按照以下教程来学习它http hyperledger fabric readthedocs io 我正在尝试使用结构样本中的 first network 构建第一个网络 这 byfn m generate没问题 但打
  • Angular 4.3:使用新的 HttpClient 获取数组缓冲区

    我想更改为新的 HttpClient 到目前为止 我处理文件下载如下 getXlsx Observable
  • 如何以文化感知方式格式化 TimeSpan 的 HH:mm:ss 分隔符?

    我正在开发一款可以在世界许多国家 地区看到的应用程序 没有多少国家 地区会使用 以外的其他内容作为分隔符来显示小时 分钟和秒 但有一些国家 地区 我想确保其所在地区的时间格式正确 DateTime 在这方面很擅长 但 TimeSpan 则不
  • 无需拖放即可快速创建用户界面的最佳语言? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我是一名盲人大学生 正在参加专注于用户界面设计的编程入门课程 该类正在使用Processing 这是完全无法访问的 我正在寻找一种语言 它允许我无需拖放即可创建 GUI 并希望足够智能来完
  • GWT 将 ClickHandler 添加到 DOM 元素

    可以说我有一个带有 ClickHandler 的自定义小部件 这是例子 public class TestWidget extends Composite private static TestWidgetUiBinder uiBinder
  • jinja2.exceptions.TemplateNotFound:bootstrap/base.html

    我在继承引导程序 base html在安装 Bootstrap Flask 扩展后的 Flask 应用程序中 但出现以下错误 jinja2 exceptions TemplateNotFound bootstrap base html 您需
  • MP4 正在下载而不是播放

    MP4 文件有时会被下载 有时会在浏览器中播放 这两个链接有什么区别 1 如果您在 Chrome 中打开此 URL 将下载视频 http video video mall com video mall 400241188377 video
  • Angular 2 获取div的宽度

    我看过很多帖子 但没有一个完全符合我的要求 我有一个超出页面宽度的表格 由于各种原因我需要获取它的宽度 I used ViewChild tableToMeasure elementView ElementRef 然后将 tableToMe
  • 如何化简分数?

    如何在 C 中化简分数 例如 给定1 11 6 我需要它简化为2 5 6 如果你想要的只是将你的分数变成一个带分数 其小数部分是像前面假设的答案一样的真分数 你只需要添加numerator denominator到数字的整个部分并将分子设置
  • 如何使用 python nltk 加速 stanford NER 的 NE 识别

    首先 我将文件内容标记为句子 然后对每个句子调用斯坦福 NER 但这个过程确实很慢 我知道如果我在整个文件内容上调用它会更快 但是我在每个句子上调用它 因为我想在 NE 识别之前和之后索引每个句子 st NERTagger stanford
  • 我可以更改 UISearchBar 清除按钮的颜色/图像吗?

    我想将清除按钮颜色更改为白色 我尝试了很多方法但没有运气 我还参考了以下内容link 但这对我不起作用 请找到我尝试过的以下代码 我正在开发最新的 ios 11 感谢任何帮助 class SearchBar UISearchBar over
  • 如何解析气流模板中的json字符串

    是否可以在气流模板中解析 JSON 字符串 我有一个 HttpSensor 它通过 REST API 监视作业 但作业 ID 位于上游任务的响应中 该任务具有xcom push marked True 我想做类似下面的事情 但是 这段代码给
  • 有时 console.log 在 log-ios 中显示,有时则不显示

    我跑了react native start在一个终端中 然后react native ios run在另一个 我的初始console log很少表现出来 但有时会表现出来 很多时候 我随机地看到 超出日志消息配额 此进程中的一些消息已被丢弃
  • 如何从监控摄像头录制的视频中读取时间?

    我有一个问题 我必须从监控摄像头录制的视频中读取录制时间 时间显示在视频的左上角区域 下面是显示时间的区域屏幕截图的链接 此外 数字颜色 白色 黑色 在视频播放期间不断变化 http i55 tinypic com 2j5gca8 png
  • 更新 .dbml 文件

    在数据库中进行一些更改后如何更新 dbml 文件 进行更改后没有内置方法可以将 dbml 文件 数据上下文与数据库同步 除了通过删除所有或部分实体并重新拖动它们来重新生成整个 dbml 文件之外 或者按照其他回复的建议使用 sqlmetal
  • Python - 找到最近的时间戳

    我有一个 Python 日期时间时间戳和一个大字典 索引 其中键是时间戳 值是我感兴趣的其他一些信息 我需要尽可能高效地找到索引中最接近时间戳的日期时间 键 目前我正在做类似的事情 for timestamp in timestamps c
  • .net MAUI 背景 vs 背景颜色 - 有什么区别?

    使用 Visual Studio Community Edition 2022 构建 Net MAUI 项目 我尝试搜索官方文档 但没有找到答案 有人可以解释以下内容吗 问题 有什么区别Background and BackgroundCo
  • SQL表连接中ON和WHERE子句的区别

    select e last name e hire date from employees e join employees m on m last name Davies and e hire date gt m hire date se