首先SQL只是關係資料庫的一個查詢前端,並不是關係資料庫必要的一部分,只是按照國際慣例,大家都實現了這個介面而已。你也可以搞datalog,Tutorial D或者其他小眾的DSL。其他另如RethinkDB、CouchDB或者MongoDB,當然也是用JS在做Query Language,畢竟在這種schemaless的場景下,SQL就不太適合了。
另外,大部分關係資料庫實現都會對SQL進行一次編譯轉成特定的語法樹之後進行查詢計劃(Query plan),這個過程會利用索引等資訊進行最佳化。而相對於每一個去連線/呼叫資料庫的應用來看,這些所有的操作就被SQL完美的隱藏了起來,無論針對哪一種程式語言/平臺,都會有一套統一的實現。這樣也就省去了每個主流的程式語言都需要再去設計一套介面的成本。
第三點就是,SQL面向的不只是程式設計師,還有各種系統分析師、資料分析師甚至是某些高管們,所以只是一個“查詢語言(Query Language)”,而不是一個通用程式語言(General Purpose Programming Language)。所以其更多的是拿來描述資料和關係,特別是當需要組合/連線多個關係的時候,通用程式語言的表示方式可能會不如SQL看上去直接。不然為啥微軟還費盡心機地在C#裡面造一套Linq幹嘛。
首先SQL只是關係資料庫的一個查詢前端,並不是關係資料庫必要的一部分,只是按照國際慣例,大家都實現了這個介面而已。你也可以搞datalog,Tutorial D或者其他小眾的DSL。其他另如RethinkDB、CouchDB或者MongoDB,當然也是用JS在做Query Language,畢竟在這種schemaless的場景下,SQL就不太適合了。
另外,大部分關係資料庫實現都會對SQL進行一次編譯轉成特定的語法樹之後進行查詢計劃(Query plan),這個過程會利用索引等資訊進行最佳化。而相對於每一個去連線/呼叫資料庫的應用來看,這些所有的操作就被SQL完美的隱藏了起來,無論針對哪一種程式語言/平臺,都會有一套統一的實現。這樣也就省去了每個主流的程式語言都需要再去設計一套介面的成本。
第三點就是,SQL面向的不只是程式設計師,還有各種系統分析師、資料分析師甚至是某些高管們,所以只是一個“查詢語言(Query Language)”,而不是一個通用程式語言(General Purpose Programming Language)。所以其更多的是拿來描述資料和關係,特別是當需要組合/連線多個關係的時候,通用程式語言的表示方式可能會不如SQL看上去直接。不然為啥微軟還費盡心機地在C#裡面造一套Linq幹嘛。