mysql - MySQL中where条件中运算符的解析顺序是什么(例如: SELF join)

标签 mysql sql operators self-join

我正在研究一些 SQL 教程,发现了一个让我挠头的例子。我不想复制所有 SELF加入例子,在那里给出,所以我会发布相关页面的链接here .
在那个例子中 SELF加入是在包含薪水的“客户”表上进行的。 WHERE -条件是a.SALARY < b.SALARY .我假设“小于”运算符是左关联的。意思是,我预计引擎会占用 table a 的每一行并将其与 table 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 输出(参见:"the authors statement about using MySQL for testing example-code")如下:

+----+----------+---------+
| 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 |
+----+----------+---------+

表示引擎从 table b 中获取行首先将它们与 table a 进行比较.
我现在不知道这是否是作者的错,因为他忘记提及任何 ORDER BYGROUP BY争论。 (在那种情况下,该教程简直糟透了。)

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

不幸的是,我不能自己测试这个输出,因为我目前没有任何允许我安装 MySQL 的计算机。所以非常感谢您的帮助:)
我希望这个问题听起来不太愚蠢,但我无法在互联网上找到专门解释此行为的有用资源。当我学习时,我有两个关于 RDBMS 的模块,并且在所有示例中,运算符总是按照我在上面的第一个输出示例中所做的方式解析。这就是为什么我目前对此感到困惑^^

在此先感谢您为我浪费您的时间 :D 最好的问候。

最佳答案

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

如果没有一个比另一个更好,那只是一个因数据库而异的实现决策,我认为当你在这里写的时候,MySQL 是右关联的。

关于mysql - MySQL中where条件中运算符的解析顺序是什么(例如: SELF join),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767788/

相关文章:

mysql - Textbox Array连接MySQL数据库

mysql - WordPress Pod : How to only get (sub)categories with articles in it

php - 未定义的属性:Illuminate\Database\MySqlConnection::$name

java - java中^运算符如何工作?补充

c++ - 运算符重载的基本规则和惯用法是什么?

php - 无法在 Mac 上运行 MySQL

mysql - 连接同一张表来获取信息

sql - 改变 hive 中的现有 map

sql - SQL Server 中的可延迟约束

python - PyTorch 中 "*"运算符在张量大小之前做什么?