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

yizhihongxing

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日

相关文章

  • 一道sql面试题附答案

    一道SQL面试题附答案,是一个很好的SQL测试题,在SQL面试中被经常使用。本篇文章将为您提供一份完整的攻略,帮助您更好地理解和解决这个问题。 面试题 以下是一道经典的SQL面试题: 给定一个包含两个列的用户表,第一列为用户ID,第二列为注册日期。编写 SQL 查询,找到在 2020 年注册的所有用户。 表名:users user_id registrati…

    database 2023年5月21日
    00
  • NodeJS连接MongoDB数据库时报错的快速解决方法

    针对连接MongoDB时常见的报错,我们可以采取以下步骤来快速解决问题: 1. 检查是否正确安装MongoDB Node.js Driver包 Node.js连接MongoDB需要使用MongoDB Node.js Driver包,如果此包未正确安装,那么程序将无法连接数据库并给出报错信息。我们可以通过以下步骤检查该包是否已经安装: 在命令行中进入项目目录 …

    database 2023年5月18日
    00
  • Impala和dBASE的区别

    Impala和dBASE的区别 Impala Impala是一个开放源代码SQL引擎,可以直接在Hadoop上对存储在HDFS(Hadoop分布式文件系统)中的数据进行查询和分析。Impala是Cloudera开发的一个SQL查询引擎,可以在Hadoop和HBase上进行SQL查询,支持快速、迭代式的SQL查询。 Impala的优势在于: 可以快速查询海量数…

    database 2023年3月27日
    00
  • redis 在 php 中的应用(Connection [ 连接] 篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: Connection(连接) AUTH ECHO PING SELECT CLOSE Connection(连接) 1、AUTH Redis Auth 命令用于检测给定的密码和配置文件中的密码是否相符。 语法: red…

    Redis 2023年4月11日
    00
  • Mysql数据库的主从复制与读写分离精讲教程

    Mysql数据库的主从复制和读写分离可以提高数据库的性能和可用性。主从复制可以让从数据库复制主数据库的数据,读写分离可以让主数据库负责写操作,从数据库负责读操作,从而提高数据库的整体性能。下面分别介绍主从复制和读写分离的实现方法: Mysql数据库主从复制 1. 主从复制原理 Mysql数据库的主从复制是指将主数据库上的数据自动同步到从数据库上的一种复制方式…

    database 2023年5月18日
    00
  • Redis分布式锁之红锁的实现

    下面是“Redis分布式锁之红锁的实现”的完整攻略。 1. 概述 Redis分布式锁是保障多个进程或者多台机器中某一时刻只有一台机器可以获得访问权限的一种机制。红锁是Redis分布式锁的一种实现方式,它是在Redis官方使用文档中提出的一种方案。 红锁的实现方式是利用多个Redis节点,通过相互协作来展现出分布式锁的能力。具体而言,当一个进程需要获取分布式锁…

    database 2023年5月22日
    00
  • mysql 一表字段逗号分隔对应另一表字段查询

    表一:login id cids state 1 1,2 1 表二:learn id name 1 zhangsan 2 lisi 3 wangwu   select g.id, GROUP_CONCAT(s.name) as sname from login g left join tlearn s on FIND_IN_SET(s.id, g.cids)…

    MySQL 2023年4月12日
    00
  • CAT分布式实时监控系统使用详解

    CAT分布式实时监控系统使用详解 CAT是一款开源的分布式实时监控系统,可以帮助我们实时监控系统的运行情况,快速发现问题。本文将详细讲解CAT的使用方法,并包含两个实际的示例说明。 CAT的核心组件 CAT主要由三个核心组件构成: 消息队列:用于存储系统发出的监控数据。 数据处理服务器:从消息队列读取数据并进行处理(聚合、存储)。 Web服务器:提供查询监控…

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