我通過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年以來的標準語法。任何編程都沒有任何藉口庫不支持它。 –