mysql查询语句join、on、where的执行顺序

MySQL 查询语句中包含 join、on 和 where 三个关键词,它们的执行顺序如下:

  1. 笛卡尔积:从每个表中获取所有的行,将它们合并成一个虚拟表(即笛卡尔积)。
  2. on条件筛选:使用 on 关键词对笛卡尔积进行筛选,只输出符合 on 条件的行。
  3. where条件筛选:使用 where 关键词对筛选后的结果进行筛选,只输出符合 where 条件的行。

从上面的过程可以看出,where 关键词在这个过程中的作用是在 on 筛选后的结果中进行的。

下面是两个示例:

示例一:

SELECT *
FROM table1
JOIN table2
ON table1.id = table2.id
WHERE table1.name = 'John'

这个查询语句的执行顺序是:
1. 获取 table1 和 table2 中所有的行,将它们合并成笛卡尔积。
2. 对笛卡尔积进行 on 条件筛选,只输出 table1.id = table2.id 的行。
3. 对 on 筛选后的结果进行 where 条件筛选,只输出 table1.name = 'John' 的行。

示例二:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
WHERE table2.id IS NULL

这个查询语句的执行顺序是:
1. 获取 table1 和 table2 中所有的行,将它们合并成笛卡尔积。
2. 对笛卡尔积进行 on 条件筛选,只输出 table1.id = table2.id 的行,如果 table2 中没有符合条件的行,则输出 table1 中所有的行。
3. 对 on 筛选后的结果进行 where 条件筛选,只输出 table2.id IS NULL 的行,即输出 table1 中没有与 table2 匹配的行。

综上所述,join、on 以及 where 关键词的执行顺序是先进行笛卡尔积,然后进行 on 条件筛选,最后进行 where 条件筛选。若未特别指定,join 的默认类型为 inner join。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql查询语句join、on、where的执行顺序 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • IDEA连接MySQL测试连接失败解决方法

    问题描述 IDEA的强大不需要再多做描述,其中有一个非常好用的功能就是我们可以在IDEA中连接数据库,尤其是使用MyBatis用插件生成逆向工程代码时,并且我们如果连接上了数据库,在IDEA中编写SQL代码时也会有相应的代码补全提示。 可能我们在连接MySQL 5.* 的版本是没有遇到连接失败的问题 但是如果我们的MySQL 是8.*的版本时就有可能会遇到测…

    MySQL 2023年4月12日
    00
  • scrapy爬虫-scrapy-redis分布式

    1、如何将一个scrapy爬虫项目修改成为一个简单的分布式爬虫项目 官方文档:https://scrapy-redis.readthedocs.io/en/stable/ 只用修改scrapy项目的两个文件就可以了 一个是爬虫组件文件# -*- coding: utf-8 -*- scrapy from scrapy_redis.spiders import…

    Redis 2023年4月13日
    00
  • MySql数据引擎简介与选择方法

    MySql数据引擎简介与选择方法 引言 MySQL 是一种开放源代码的关系型数据库管理系统(RDBMS)。它广泛应用于 Web 应用程序的开发中,以及极其流行的WordPress、Joomla 等 CMS 系统也使用了 MySQL 数据库。MySQL 因其开放源代码、高性能、可伸缩性和易于使用和管理而受到广泛欢迎。MySQL 中有不同的存储引擎可供选择,它们…

    database 2023年5月22日
    00
  • MySQL 插入或更新

    数据操纵语言DML(Data Manipulation Language),用户通过它可以实现对数据库的基本操作。记录一些遇到的语法,以便随时查阅。 插入或更新 ON DUPLICATE KEY UPDATE 执行插入或更新 语法 <插入语句> ON DUPLICATE KEY UPDATE <更新语句>; 先执行插入语句,如果发生重…

    MySQL 2023年4月12日
    00
  • Linux下安装mysql 5.7.17.tar.gz的教程详解

    Linux下安装mysql 5.7.17.tar.gz的教程详解 准备工作 下载MySQL 5.7.17版本的压缩包(mysql-5.7.17.tar.gz)。 安装cmake和make工具。 sudo apt-get install cmake make 安装依赖库 sudo apt-get install build-essential libncurs…

    database 2023年5月22日
    00
  • MySQL 数据库定时备份的几种方式(全面)

    下面我来为您详细讲解“MySQL 数据库定时备份的几种方式(全面)”的完整攻略。本文将介绍 MySQL 数据库定时备份的几种不同的方式,以及这些方式的优缺点和使用方法。 一、使用系统定时任务 1.1 cron Cron 是 Linux 系统自带的一个计划任务程序,可以用于执行定时任务。我们可以使用 crontab 命令设置定时任务,例如,以下命令表示在每天凌…

    database 2023年5月22日
    00
  • 数据库日常练习题,每天进步一点点(1)

    让我来详细讲解一下“数据库日常练习题,每天进步一点点(1)”的完整攻略: 标题 首先,我们来看看文章的标题。可以看到,这篇文章的标题是 “数据库日常练习题,每天进步一点点(1)”。这个标题很明确地说明了文章的主题,即数据库练习题,并且指出了这是一个系列文章的第一篇。这样的标题可以很好地吸引读者的注意力,让读者对文章产生浓厚的兴趣。 正文 接下来,我们来看看文…

    database 2023年5月21日
    00
  • 什么是运维?运维工种有哪些?

    什么是运维? 运维(DevOps)是 development 和 operations 的结合词语。它指的是软件工程师、测试工程师、系统管理员等 IT 人员通过协作、自动化工具、流程和服务来加快应用程序的生命周期,提升部署、管理、维护应用程序的质量和效率。 通常来说,运维的任务主要包括以下几个方面: 1.应用程序部署:确保应用程序能够在生产环境中成功运行,包…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部