2012-11-29 4 views
5

Après avoir découvert HandlerSocket et confondu avec de nombreux ORM, une chose qui me dérange est:Quel est le but du langage SQL?

Pourquoi SQL existe? Du tout? Pourquoi les pilotes de base de données ne peuvent-ils pas fournir un moyen direct, par ex., De fournir des informations sur les pilotes de base de données? InnoDB, et encapsuler diverses opérations à l'intérieur de la bibliothèque ORM lui-même?

Pourquoi ORM -> SQL -> DB analyser SQL -> Opérations du moteur Db? Pourquoi les opérations du moteur ORM -> Db ne peuvent-elles pas être effectuées?

+1

Commencez par lire http://en.wikipedia.org/wiki/SQL –

+5

Arrête le downvoting. Laisse-le apprendre. Ce n'est pas terrible question, beaucoup de débutants peuvent être intéressés. – Kamil

+1

Cette question est une invitation à une discussion ouverte, plutôt qu'une «question pratique et répondable basée sur les problèmes réels que vous rencontrez». C'est une sorte de question [pas approprié pour Stack Overflow] (http://stackoverflow.com/faq#dontask). -1. –

Répondre

1

Eh bien, SQL était le premier, avant que n'importe quel type d'ORM existait. Une brève histoire

  • Tout d'abord vous avez stocké vos données dans des fichiers séquentiels
  • plus tard vous avez utilisé des fichiers directs (clients.dat)
  • Plus tard, les premiers blocs de données non relationnelles sont apparues (Check this)

Et alors quelqu'un a une idée de bases de données relationnelles avec un langage de requête. Heureusement, nous avons une norme appelée SQL (même s'il y a de petites différences entre les différents dialects de SQL dans sql server, oracle, etc.)

Et longtemps après (SQL est assez vieux) quelqu'un a inventé ORM qui utilise sql pour communiquer avec dbs.

Il y a aussi des efforts pour que ORM-> DB pas comme-sql dbs, dbs orienté objet (SGBDOO) et le document

1

Objet de SQL Structured Query Language est de fournir un moyen Structured par lequel on peut Query information base de données en utilisant un standard Language. SQL fournit une norme global de travailler avec des bases de données avec peu ou pas de différences sur différentes plates-formes. Par exemple Si vous êtes familier avec SQL, vous pouvez travailler avec les principaux DB comme SQL ServermySql & Oracleil existe quelques différences mineures dans la syntaxe mais elles ne sont pas très importantes au moins en ce qui concerne les opérations de base.

-1

Il existe parce que beaucoup de gens l'utilisent. Il y a beaucoup de très bons outils compatibles avec SQL. ODBC, JDBC.

Je pense que SQL est très archaïque, mais il n'y a rien de mieux, qui fonctionnera avec presque n'importe quel moteur de base de données et vous permet de manipuler des données avec des fonctionnalités de SQL.

Il existe des outils modernes pour travailler avec des données, plus confortable à utiliser avec les besoins actuels - ORM, Linq, OLAP mais ils ont des objectifs différents, ils ne sont pas compatibles.

Et encore une chose - vous avez confondu avec de nombreux ORM. C'est le problème. Il y a beaucoup d'ORM, incompatibles, les gens doivent apprendre les uns les autres. SQL est un langage (quelques petites différences dans les différents moteurs de base de données

+0

En fait, les différences dans les dialectes SQL sont presque aussi importantes que dans les langages de requête ORM. –

0

Lors de l'utilisation d'un ORM, il suffit de remplacer SQL par quelque chose d'autre, par exemple HQL de Hibernate.

Et SQL fait beaucoup de travail en arrière-plan pour vous, que vous auriez besoin de mettre en œuvre manuellement. SQL a été conçu de manière à indiquer le résultat de votre requête. Vous laissez ensuite la base de données comprendre comment le faire.

Pensez à quelque chose comme:.

Donne-moi tous les employés qui ont été embauchés en 2011 et ont un salaire qui est 20% plus élevé que le salaire moyen du service qu'ils travaillent dans

Faire cela en SQL n'est pas si compliqué.

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; 

maintenant penser à comment vous faire si vous ne disposez pas d'un langage de requête (ni SQL, ni un langage de requête ORM)

Questions connexes