Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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
什么';s MySQL中where条件下运算符的解析顺序(例如:自连接)_Mysql_Sql_Operators_Self Join - Fatal编程技术网

什么';s MySQL中where条件下运算符的解析顺序(例如:自连接)

什么';s MySQL中where条件下运算符的解析顺序(例如:自连接),mysql,sql,operators,self-join,Mysql,Sql,Operators,Self Join,我查阅了一些SQL教程,发现了一个让我抓狂的例子。我不想复制这里给出的所有SELFjoin示例,因此我会将链接发布到相关页面。 在该示例中,SELFjoin在包含薪水的“customer”表上进行。其中-条件是a.SALARY

我查阅了一些SQL教程,发现了一个让我抓狂的例子。我不想复制这里给出的所有
SELF
join示例,因此我会将链接发布到相关页面。
在该示例中,
SELF
join在包含薪水的“customer”表上进行。
其中
-条件是
a.SALARY
。我假设“小于”-操作符是左关联的。也就是说,我希望引擎将获取
表a
的每一行,并将其与
表b
中与
WHERE
条件匹配的相应行连接起来。
因此,我将得到以下结果:

+----+----------+---------+
| ID | NAME     | SALARY  |
+----+----------+---------+
|  1 | Chaitali | 2000.00 |
|  1 | Hardik   | 2000.00 |
|  1 | Komal    | 2000.00 |
|  1 | Muffy    | 2000.00 |
|  2 | Ramesh   | 1500.00 |
|  2 | kaushik  | 1500.00 |
|  2 | Chaitali | 1500.00 |
|  2 | Hardik   | 1500.00 |
|  2 | Komal    | 1500.00 |
|  2 | Muffy    | 1500.00 |
|  3 | Chaitali | 2000.00 |
|  3 | Hardik   | 2000.00 |
|  3 | Komal    | 2000.00 |
|  3 | Muffy    | 2000.00 |
|  4 | Hardik   | 6500.00 |
|  4 | Muffy    | 6500.00 |
|  5 | Muffy    | 8500.00 |
|  6 | Chaitali | 4500.00 |
|  6 | Hardik   | 4500.00 |
|  6 | Muffy    | 4500.00 |
+----+----------+---------+
我的问题是,作者说MySQL输出(请参阅:)将如下所示:

+----+----------+---------+
| ID | NAME     | SALARY  |
+----+----------+---------+
|  2 | Ramesh   | 1500.00 |
|  2 | kaushik  | 1500.00 |
|  1 | Chaitali | 2000.00 |
|  2 | Chaitali | 1500.00 |
|  3 | Chaitali | 2000.00 |
|  6 | Chaitali | 4500.00 |
|  1 | Hardik   | 2000.00 |
|  2 | Hardik   | 1500.00 |
|  3 | Hardik   | 2000.00 |
|  4 | Hardik   | 6500.00 |
|  6 | Hardik   | 4500.00 |
|  1 | Komal    | 2000.00 |
|  2 | Komal    | 1500.00 |
|  3 | Komal    | 2000.00 |
|  1 | Muffy    | 2000.00 |
|  2 | Muffy    | 1500.00 |
|  3 | Muffy    | 2000.00 |
|  4 | Muffy    | 6500.00 |
|  5 | Muffy    | 8500.00 |
|  6 | Muffy    | 4500.00 |
+----+----------+---------+
这表示引擎首先从
表b
中获取行,并将它们与
表a
进行比较
我现在不知道这是否是作者的错,因为他忘了提到任何
orderby
groupby
参数。(在这种情况下,该教程只是s*cks。)

但如果他所说的输出在MySQL服务器上是正确的,我想从比我更了解SQL的人那里知道,
a) 为什么此运算符从右向左解析,并且
b) 有什么理由这样做。这是性能问题吗?还是我从b开始就对“小于”-运算符的理解是错误的:它从不先取左操作数?
c) 我想知道这是MySQL的结果还是与SQL有关的问题

不幸的是,我不能自己测试这个输出,因为我目前没有任何可以安装MySQL的计算机。因此,非常感谢您的帮助:)
我希望这个问题听起来不要太愚蠢,但我在互联网上找不到专门解释这种行为的有用来源。当我学习时,我有两个关于RDBMS的模块,在所有的例子中,操作符总是像我在上面的第一个输出例子中那样被解析。这就是为什么我现在对此感到困惑^^

提前谢谢你为我浪费时间:D
致以最诚挚的问候。

通常,您有一个聪明的流程,可以确定特定查询应朝哪个方向处理,以使其最高效。然后它就取决于这个过程,以及每一个查询,如果先比较一个或另一个的话


如果两者都不比另一个好,那么这只是一个因数据库而异的实现决策,我认为正如您在这里所写的,MySQL是正确的关联。

期望结果按插入的顺序出现是一个常见的误解。即使使用聚集索引,结果集也可能不符合预期。强制执行订单的唯一方法是使用
orderby
子句。查询可以并行执行,结果集可以合并,也可能是由于在尝试尽快返回结果集时执行了查询优化计划。这就是可能出现此类问题的原因。

SQL表可能重复,并且(通常)结果集表示无序集。唯一的例外情况是,在最外层的选择中使用了排序依据。对于无序集,结果的顺序并不重要。