頂級數據庫供應商的 SQL (DML-) 方言之間有何不同?
是否曾使用過至少兩種頂級數據庫產品(例如 Oracle、SQL Server、Informix、Sybase、DB2、Teradata)在 SQL 方面進行過擴展工作的人是否知道數據庫供應商的 SQL 方言彼此之間有多麼不同。由於我來自 Oracle 背景,因此我特別感興趣
- 分析函式
- 示範條款
- 分層查詢(
start with .. connect by
想到)- 任何其他超出正常的功能 (
select x, y from a, b where...
)問題可能歸結為這些特徵是否以及在何種程度上受 ansi 標準的監管。
實際上,我想知道是否有“經驗法則”表明我是否(以及如何)可以採用在一個數據庫上執行的 SQL DML 語句並讓它在另一個數據庫上執行。
ANSI是一個創建自願標準的私人非營利組織。因此,它實際上並沒有監管任何東西。遵循公認的標准通常對公司有利,這就是為什麼許多數據庫公司遵循 SQL 的 ANSI 標準。當然,隨著每家公司尋求使他們的產品與眾不同,他們將開發超出標準的附加功能。
來自w3schools:
儘管 SQL 是 ANSI(美國國家標準協會)標準,但 SQL 語言有許多不同的版本。
但是,為了符合 ANSI 標準,它們都以類似的方式至少支持主要命令(例如 SELECT、UPDATE、DELETE、INSERT、WHERE)。
注意:除了 SQL 標準之外,大多數 SQL 數據庫程序還有自己的專有擴展!
在您列出的更專業的領域中,SQL 方言之間的差異太大,無法將問題簡化為“經驗法則”。在這些情況下,您可能應該為每個數據庫轉換整個語句。通過這樣做,可以利用每個數據庫可以提供的特殊功能為每個平台優化每個語句。將 SQL 寫入最低公分母 (ANSI) 可能會簡化遷移,但會以性能為代價。
SQL Dialects Reference對 SQL 變體進行了一些有用的比較。有關更多資訊,我建議您搜尋您正在切換的特定方言,如下所示:
differences between mysql and oracle sql