Database-Theory

兩條 SQL 語句的數學相等

  • January 7, 2020

有沒有辦法檢查兩個 SQL 語句的數學相等性?

我有兩個 SQL 語句:

  • SQL_STATEMENT_1
  • SQL_STATEMENT_2

對數據執行這兩個語句並比較輸出根本沒有幫助。

需要評估語句背後的集合數學,就像方程求解器一樣。

超出我的問題的範圍是:

  • 等式以外的比較(大於、小於、LIKE、…)
  • 儲存過程或觸發器
  • 公用表表達式 (WITH)

在範圍內:

  • 子選擇: WHERE other_id IN (SELECT id FROM other WHERE …)
  • 加入

兩條 SQL 語句的數學相等性是什麼?對我來說,兩個查詢是等效的,如果當給定任何數據集的相同時,它們返回相同的結果集。

正如您所指出的,SQL 查詢是關係代數的超集,可能非常複雜。我們可以混合子查詢,使用儲存過程和函式(確定性或非確定性),這將使您的查詢看起來更像真實程式碼。如果您正在談論這些類型的查詢,那麼這將非常困難。事實上,這可能與“兩種算法是否等效”問題沒有什麼不同。

在這種情況下,這可能是不可能的。

然而…

…如果您要比較的兩個查詢是嚴格的集合操作,這*可能是可行的。*如果是這樣,您可以將查詢轉換為關係代數,然後按照等價規則進行計算。如果您有一個帶有非平凡布爾條件的選擇/限制,那麼您最終可能需要證明這些條件也是等效的。然後你需要依賴布爾代數,你最終可能會做一個真值表

正如你所看到的,這將是大量的工作,據我所知,沒有任何東西可以自動計算所有這些。不過,我發現了一些工具,如果你想解決這個任務,你可能會發現它們很有用:

根據定義在有限時間內檢查語義等價是不可能的,請參見萊斯定理

對於偏函式的任何非平凡屬性,沒有通用且有效的方法來確定算法是否計算具有該屬性的偏函式。

引用自:https://dba.stackexchange.com/questions/96865