gpt4 book ai didi

mysql - 在连接的情况下是否对条件进行分组在 SQL 中是否重要?

转载 作者:可可西里 更新时间:2023-11-01 08:03:07 27 4
gpt4 key购买 nike

我确实通过 SQL 连接了 2 个表并添加了 where 子句。连接由 where 子句中的条件完成。我想知道 where 子句期望 join 子句是否按方括号分组是否有区别。

举个例子问:例1等同于例2、例3吗?

示例 1(无分组):

SELECT * FROM employees, vacation 
WHERE employees.first_name = 'Maria' and vacation_start > 2017
AND employees.employee_id = vacation.employee_id

示例 2(除了 join 子句之外的所有内容都被分组):

SELECT * FROM employees, vacation 
WHERE (employees.first_name = 'Maria' and vacation_start > 2017)
AND employees.employee_id = vacation.employee_id

示例 3(join 子句是第一个 where 参数):

SELECT * FROM employees, vacation 
WHERE employees.employee_id = vacation.employee_id
AND (employees.first_name = 'Maria' and vacation_start > 2017)

我一直认为数据库会优化这种查询。但是他们呢?我主要使用 MariaDB 和 SQLite。

最佳答案

是的,它们是等价的。但是你应该使用显式连接而不是旧的 WHERE 语法:

SELECT * 
FROM employees
JOIN vacation
ON employees.employee_id = vacation.employee_id
WHERE employees.first_name = 'Maria' and vacation_start > 2017;

简单的逻辑:

-- AND has associative property
cond1 AND cond2 AND cond3
<=>
(cond1 AND cond2) AND cond3
<=>
cond1 AND (cond2 AND cond3)

关于mysql - 在连接的情况下是否对条件进行分组在 SQL 中是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com