2012-11-29 91 views
5

發現HandlerSocket後發現有很多ORM,讓我困擾的一件事是:SQL語言的用途是什麼?

爲什麼SQL存在?在所有?

爲什麼數據庫驅動程序無法直接提供例如InnoDB,並將各種操作包裝在ORM庫本身中?

爲什麼ORM - > SQL - > DB SQL語法分析 - >數據庫引擎操作?

爲什麼不能ORM - >數據庫引擎操作?

+1

開始通過閱讀http://en.wikipedia.org/wiki/SQL –

+5

停止downvoting。讓他學習。這不是一個可怕的問題,許多新手可能會感興趣。 – Kamil

+1

這個問題是邀請參加開放式討論,而不是基於您面臨的實際問題的「實際的,可回答的問題」。這是一個問題[不適合堆棧溢出](http://stackoverflow.com/faq#dontask)。 -1。 –

回答

1

那麼,SQL是第一個,在任何類型的ORM存在之前。簡史

  • 首先你存儲你的數據在連續文件
  • 以後你直接使用文件(clients.dat)
  • 後來第一個非關係型數據塊出現(檢查this

而且那麼有人有關於查詢語言的關係數據庫的想法。幸運的是,我們有一個稱爲SQL的標準(即使SQL服務器,oracle等不同SQL方言之間有一些細微的差異)。

很久以後(SQL相當古老)有人發明了使用sql進行通信的ORM與dbs。

也有一些努力,有ORM-> DB一樣,沒有-SQL DBS,面向對象DBS(OODBMS)和文件

1

SQL Structured Query Language的目的是提供一個Structured途徑,使人們可以在Query信息數據庫使用標準Language

SQL提供了一個global標準用在不同的平臺很少或沒有差異數據庫工作。對於例如如果您熟悉SQL,則可以使用主要數據庫,如SQL ServermySql & Oracle語法存在一些細微差異,但至少就基本操作而言,它們並不十分突出

-1

它的存在是因爲很多人使用它。有許多與SQL兼容的非常好的工具。 ODBC,JDBC。

我認爲SQL是非常古老的,但並沒有什麼更好的,這將與幾乎所有的數據庫引擎工作,並允許您使用SQL的功能操作數據。

有一些現代化的工具與資料,更舒適的今天需要使用工作 - ORM,LINQ中,OLAP但他們有不同勢的目的,他們不是compatibile。

還有一件事 - 你與許多ORM的混亂。那就是問題所在。有許多ORM,不兼容,人們必須相互學習。 SQL是一種語言(在不同勢的數據庫引擎一些小的個體差異。

+0

實際上,SQL方言中的差異幾乎與ORM查詢語言中的差異一樣大。 –

0

當使用ORM您只需更換SQL與其他例如Hibernate的HQL東西。

SQL爲你做了很多後臺工作,你需要手動實現。 SQL的設計使您可以說明查詢的結果應該是什麼。然後讓數據庫找出如何做到這一點。

想想是這樣的:。

找我,誰被錄用,在2011年,有一個薪水比他們在工作部門的平均工資高出20%,所有員工

在SQL中這樣做並不複雜。

select name, 
     salary, 
     deptno, 
     hire_date 
from (
    select name, 
      salary, 
      deptno, 
      avg(salary) over (partition by deptno) as avg_detp_salary, 
      hire_date 
    from employee 
    where extract(year from hire_date) = 2011  
) as t 
where salary >= avg_dept_salary * 1.20; 

現在想想,你會怎麼做,如果你沒有一個查詢語言(SQL既不也不是一個ORM查詢語言)