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日

相关文章

  • 记录服务器rm -rf误删文件的恢复过程

    以下是详细的“记录服务器 rm -rf 误删文件的恢复过程”的攻略: 背景 当我们使用 rm -rf 命令删除文件或目录时,有时会误删一些重要的文件。如果没有备份,那么数据就可能永久丢失。但是,在一些情况下,我们可以通过一些技术手段来找回这些文件。 恢复过程 停止对硬盘的写入 当发现误删文件时,要立即停止对硬盘的写入,避免新数据写入到被误删的文件占用原来的空…

    database 2023年5月21日
    00
  • 详解linux添加硬盘分区挂载教程

    下面是详解Linux添加硬盘分区挂载的教程。 准备工作 在添加硬盘分区前,需要确保以下几点: 硬盘已经正确地安装在计算机中,并且能够被系统识别到。 了解新硬盘的设备标识符。 确保新分区没有被挂载(可以使用lsblk命令检查)。 分区硬盘 使用fdisk命令分区硬盘: sudo fdisk /dev/sdb 进入交互式分区模式后,根据需求,输入相关选项即可完成…

    database 2023年5月22日
    00
  • SQL SERVER使用表分区优化性能

    以下是“SQL SERVER使用表分区优化性能”的完整攻略: 什么是表分区 表分区是将表中数据分散到多个磁盘上以提高数据库的查询和维护性能。通俗地讲,数据会被存储到多个磁盘上,分成多个小区域,这样查询时就可以只查找部分数据,大大加快了查询的速度。 表分区的特点 分区后的表具有独立的数据存储空间,提高了IO并发性 支持表或索引分区 查询时只查找需要的分区,减少…

    database 2023年5月21日
    00
  • linux NFS安装配置及常见问题、/etc/exports配置文件、showmount命令

    Linux NFS安装配置及常见问题攻略 安装NFS服务 在CentOS系统中,使用以下命令安装nfs-utils工具: yum install nfs-utils 启动NFS服务: systemctl start nfs-server 设置开机自启动NFS服务: systemctl enable nfs-server 配置NFS服务 编辑/etc/expo…

    database 2023年5月21日
    00
  • Mysql5.7定时备份的实现

    下面来详细讲解如何实现MySQL5.7的定时备份。本攻略将分为以下几个步骤: 准备工作 编写备份脚本 配置Linux系统定时任务 接下来就来一步一步进行实现。 1. 准备工作 在开始备份之前,需要先确定备份的目录和备份文件名,并确保该目录对MySQL用户可写。 我们可以选择创建一个名为backups的目录来保存备份文件。可以通过以下命令创建该目录: mkdi…

    database 2023年5月22日
    00
  • Oracle递归查询简单示例

    概念与语法 Oracle递归查询即使用“WITH RECURSIVE”语句进行的递归查询。其基本语法如下所示: WITH RECURSIVE subquery_name [(column_name[, column_name]…)] AS ( initial_query UNION [ALL|DISTINCT] recursive_query ) SEL…

    database 2023年5月21日
    00
  • Oracle CBO几种基本的查询转换详解

    Oracle CBO几种基本的查询转换详解 Oracle CBO是Oracle数据库中的优化器,可以对查询语句进行转换,以便提高查询效率。下面我们介绍几种基本的查询转换方法。 全表扫描转换为索引扫描 当我们使用WHERE子句进行查询时,如果没有使用索引,那么Oracle就会进行全表扫描。但是,如果我们对查询条件中的某一列建立了索引,那么我们可以将全表扫描转换…

    database 2023年5月21日
    00
  • oracle数据排序后获取前几行数据的写法(rownum、fetch方式)

    当我们需要从一张表中获取前几行数据时,我们可以使用Oracle提供的两种方式——rownum和fetch方式。 1. ROWNUM方式获取前几行数据 ROWNUM是oracle数据库中的伪列,在查询时系统自动给出其行号。 获取前几行数据时,我们可以通过使用rownum进行筛选,比如: SELECT column1, column2, column3 FROM…

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