Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql where条件下的执行顺序_Mysql_Sql - Fatal编程技术网

Mysql where条件下的执行顺序

Mysql where条件下的执行顺序,mysql,sql,Mysql,Sql,在where子句中首先执行哪个条件 即: 首先检查性别,如果满足,然后检查(职位='manager'或婚姻状况='m') 或者它执行(职务='manager'或婚姻状况='m'),然后检查性别 通常,SQL中不会建立表达式的求值顺序 数据库引擎可以自由地按任何顺序进行计算,因为它们可以自由地优化查询。例如: 如果表中有一个关于job\u title的索引,引擎可以首先使用job\u title作为“访问”,然后使用婚姻状况和性别作为“过滤” 或者,如果表中有关于性别的索引,则引擎可以首先使用

where
子句中首先执行哪个条件

即:

  • 首先检查性别,如果满足,然后检查
    (职位='manager'或婚姻状况='m')
  • 或者它执行
    (职务='manager'或婚姻状况='m')
    ,然后检查性别

通常,SQL中不会建立表达式的求值顺序

数据库引擎可以自由地按任何顺序进行计算,因为它们可以自由地优化查询。例如:

  • 如果表中有一个关于
    job\u title
    的索引,引擎可以首先使用
    job\u title
    作为“访问”,然后使用
    婚姻状况
    性别
    作为“过滤”

  • 或者,如果表中有关于
    性别的索引,则引擎可以首先使用
    性别
    作为“访问”,然后使用
    婚姻状况
    职务
    作为“筛选”

您是否清楚地看到访问和筛选之间的区别?所有引擎都需要一个“访问谓词”来检索数据,然后它们使用“过滤谓词”来选择要返回的行


有时我们想知道表达式求值的顺序,特别是对于短路布尔条件。这在SQL(一种声明性语言)中不起作用,就像在命令式语言(Java、PHP、C#等)中一样。

一般来说,表达式的求值顺序在SQL中不确定

数据库引擎可以自由地按任何顺序进行计算,因为它们可以自由地优化查询。例如:

  • 如果表中有一个关于
    job\u title
    的索引,引擎可以首先使用
    job\u title
    作为“访问”,然后使用
    婚姻状况
    性别
    作为“过滤”

  • 或者,如果表中有关于
    性别的索引,则引擎可以首先使用
    性别
    作为“访问”,然后使用
    婚姻状况
    职务
    作为“筛选”

您是否清楚地看到访问和筛选之间的区别?所有引擎都需要一个“访问谓词”来检索数据,然后它们使用“过滤谓词”来选择要返回的行


有时我们想知道表达式求值的顺序,特别是对于短路布尔条件。这在SQL(一种声明性语言)中不起作用,就像在命令式语言(Java、PHP、C#等)中一样。

可能的重复你能提供一些样本数据并期望结果吗?可能的重复你能提供一些样本数据并期望结果吗?可能的重复真实答案是。。。这取决于MySQL查询优化器决定做什么。。。这取决于MySQL查询优化器决定做什么。
Select * from tableA
Where gender=‘m’ and (job title = ‘manager’ or marital_status=‘m’)