Database-Theory
兩條 SQL 語句的數學相等
有沒有辦法檢查兩個 SQL 語句的數學相等性?
我有兩個 SQL 語句:
- SQL_STATEMENT_1
- SQL_STATEMENT_2
對數據執行這兩個語句並比較輸出根本沒有幫助。
需要評估語句背後的集合數學,就像方程求解器一樣。
超出我的問題的範圍是:
- 等式以外的比較(大於、小於、LIKE、…)
- 儲存過程或觸發器
- 公用表表達式 (WITH)
在範圍內:
- 子選擇: WHERE other_id IN (SELECT id FROM other WHERE …)
- 加入
兩條 SQL 語句的數學相等性是什麼?對我來說,兩個查詢是等效的,如果當給定任何數據集的相同時,它們返回相同的結果集。
正如您所指出的,SQL 查詢是關係代數的超集,可能非常複雜。我們可以混合子查詢,使用儲存過程和函式(確定性或非確定性),這將使您的查詢看起來更像真實程式碼。如果您正在談論這些類型的查詢,那麼這將非常困難。事實上,這可能與“兩種算法是否等效”問題沒有什麼不同。
在這種情況下,這可能是不可能的。
然而…
…如果您要比較的兩個查詢是嚴格的集合操作,這*可能是可行的。*如果是這樣,您可以將查詢轉換為關係代數,然後按照等價規則進行計算。如果您有一個帶有非平凡布爾條件的選擇/限制,那麼您最終可能需要證明這些條件也是等效的。然後你需要依賴布爾代數,你最終可能會做一個真值表。
正如你所看到的,這將是大量的工作,據我所知,沒有任何東西可以自動計算所有這些。不過,我發現了一些工具,如果你想解決這個任務,你可能會發現它們很有用:
根據定義在有限時間內檢查語義等價是不可能的,請參見萊斯定理:
對於偏函式的任何非平凡屬性,沒有通用且有效的方法來確定算法是否計算具有該屬性的偏函式。