Общий ответ - НЕТ, потому что вы всегда можете вызвать какую-то хранимую процедуру, которая скрывает машину Тьюринга.Тот факт, что вы можете делать арифметику в SQL-выражении, я думаю, заставляет вас и Тьюринговую скалу тоже.
Конечно, теоретики всегда говорят нам, что все невозможно, поэтому мы все должны перевернуться и умереть.
Нет.
Так что вы можете сделать?Что ж, «простая» возможность - нормализовать запросы SQL, так же как вы упрощаете алгебраические уравнения.Если бы вы могли как-то для оператора SQL «нормализовать» (преобразовать) его в абсолютно кратчайший эквивалентный SQL, который сделал то же самое, то вы могли бы нормализовать оба оператора SQL и сравнить операторы результата;если они равны по модулю идентификатору переименования, то они имеют одинаковую «семантику».Для каждого оператора в SQL есть некоторая семантика и некоторый набор эквивалентных операций, как в алгебре.Итак, если вы можете определить набор алгебраических эквивалентностей для каждого оператора SQL, вы можете заменить каждое алгебраическое вычисление кратчайшим алгебраическим эквивалентом, который делает то же самое.
Чтобы сделать это, вы должны иметь возможность анализировать SQL и применять перезаписываемые SQL к анализируемому SQL, что означает, что вам нужен механизм преобразования программ .(Вы можете увидеть аналог этого в Алгебра парсинга и перезаписи )
Это работает не во всех случаях.Во-первых, может быть несколько «самых коротких» операторов SQL одинаковой длины, которые эквивалентны ( 2 + X - это то же самое, что X + 2 , но это не очевидно для инструмента),Теперь у вас есть проблема доказательства теорем (в нашем примере X + 2 используйте коммутативный закон, чтобы доказать, что они равны), вернемся к теории.Во-вторых, вы можете не знать , как генерировать кратчайшую возможную последовательность, используя ваши переписывания;даже математические уравнения иногда должны разбухать, прежде чем они снова станут маленькими.Технически вы должны искать все возможные алгебраические эквивалентности, чтобы найти самое короткое, а это невероятно большое.
Так что на практике это тоже сложно сделать.Итак, №.