SQL语言的目的是什么?

时间:2012-11-29 10:12:19

标签: mysql sql nosql innodb

在发现HandlerSocket并且与许多ORM混淆之后,让我烦恼的一件事是:

为什么SQL存在?一点都没有?

为什么数据库驱动程序无法提供直接方式,例如InnoDB,并在ORM库本身内包装各种操作?

为什么选择ORM - > SQL - >数据库解析SQL - > Db引擎运营?

为什么不能ORM - > Db引擎运营?

4 个答案:

答案 0 :(得分:1)

在任何类型的ORM存在之前,SQL都是第一个。简史

  • 首先,您将数据存储在顺序文件中
  • 后来你使用了直接文件(clients.dat)
  • 后来出现了第一批非关系数据库(检查this

然后有人了解使用查询语言的关系数据库。幸运的是,我们有一个称为SQL的标准(即使在SQL Server,oracle等SQL的不同方言之间存在一些细微差别)。

很久以后(SQL很老)有人发明了使用sql与dbs通信的ORM。

还有一些努力让ORM-> DB像no-sql dbs,面向对象的dbs(OODBMS)和文档

答案 1 :(得分:1)

SQL Structured Query Language的目的是提供一种Structured方式,通过该方式可以使用标准Query在数据库中Language信息。

SQL提供global标准,用于处理不同平台上几乎没有差异的数据库。对于例如如果您熟悉SQL,则可以使用SQL Server mySql等主要数据库。 Oracle 语法中存在一些细微差别,但至少就基本操作而言,它们并不是非常突出

答案 2 :(得分: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查询语言)你将如何做到这一点

答案 3 :(得分:-1)

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

我认为SQL非常陈旧,但没有什么比这更好的了,它几乎适用于任何数据库引擎,并允许您使用SQL的功能来操作数据。

有一些现代工具可以处理数据,更适合当今需要使用 - ORM,Linq,OLAP但它们有不同的用途,它们不兼容。

还有一件事 - 你和许多ORM搞混了。那就是问题所在。有许多ORM,不兼容,人们必须互相学习。 SQL是一种语言(在不同的数据库引擎中存在一些小的差异。