我通过SQL连接2个表并添加where子句。连接由where子句中的条件完成。 我想知道是否有所区别where子句期望的连接子句是由括号分组。在SQL中,条件是否在连接的情况下分组?
要求示例:是等效于示例2和示例3的示例1?
实施例1(没有分组):
SELECT * FROM employees, vacation
WHERE employees.first_name = 'Maria' and vacation_start > 2017
AND employees.employee_id = vacation.employee_id
实施例2(除了连接子句一切被分组):
SELECT * FROM employees, vacation
WHERE (employees.first_name = 'Maria' and vacation_start > 2017)
AND employees.employee_id = vacation.employee_id
实施例3(加入子句是第一其中参数):
SELECT * FROM employees, vacation
WHERE employees.employee_id = vacation.employee_id
AND (employees.first_name = 'Maria' and vacation_start > 2017)
我一直认为数据库会优化这种查询。 但他们呢?我主要与MariaDB和SQLite合作。
我确实更喜欢显式连接,因为它使表关系清晰。然而,查询是编程库的一个结果,我无法强制从加入选择变体( – capfan
@capfan,'JOIN'语法不是变体 - 它是自1992年以来的标准语法。任何编程都没有任何借口库不支持它。 –