J'ai entendu dire que SQL est généralement le même d'un programme à l'autre, mais qu'il existe quelques différences. Je me demande s'il existe des différences en SQL entre Access (2007 si cela importe) et MS SQL Server? Je me pose la question car j'utilise régulièrement Access et que je veux apprendre le SQL à partir d'un livre, et je me demande si un livre utilisant MS SQL Server répondra à mes besoins? Je suis en train de considérer "Access 2007 Pure SQL" et "Beginning SQL Joes 2 Pros", le second utilisant MS SQL Server. Merci pour toute aide!
Réponses
Trop de publicités?Il y a plusieurs différences, même pour des choses simples comme l'opérateur de concaténation de chaînes. Access utilise &
, SQL Server utilise +
. Le SQL ressemble à l'anglais. Il y a l'anglais britannique, l'anglais canadien, l'anglais américain, l'anglais australien, etc... Plusieurs dialectes, principalement mais pas totalement compatibles entre eux.
Cela ne signifie pas pour autant que les choses sont totalement incompatibles - apprendre le SQL sur n'importe quel SGBD est utile, car les concepts de base des bases de données relationnelles restent les mêmes, quel que soit le SGBD sur lequel vous vous trouvez. C'est juste la façon dont vous interagissez avec eux qui est différente.
MS Access utilise JET SQL tandis que SQL Server utilise Transact SQL. Pour la plupart, ils sont très similaires. SQL en général est un langage de programmation conçu pour gérer les données dans les systèmes de gestion de base de données relationnelle. Ainsi, toutes les variantes présentent un sous-ensemble commun. Mais il existe également des différences. Pour plus d'informations, consultez cet article sur Convertir Microsoft Access (JET SQL) en SQL Server (T-SQL) Feuille de triche. Il existe de nombreuses autres ressources sur le web, mais cela devrait vous donner une idée rapide de certaines différences.
Je dirais que l'Access SQL et le T-SQL (SQL Server) ont plus de différences que de similitudes. Toute ressemblance est due à 1) tous deux étant basés sur la norme SQL-89 (mais tant le T-SQL que les normes ont beaucoup évolué, pas l'Access), 2) l'équipe SQL Server a tenté mais a échoué à rendre Access2000 (Jet 4.0) conforme à la norme SQL-92 de niveau d'entrée (la norme "strict minimum" de facto).
Prenons par exemple l'instruction UPDATE. Dans sa forme la plus simple, c'est-à-dire en impliquant des valeurs littérales ou de paramètres d'entrée (scalaires), les deux sont globalement les mêmes. Cependant, lors de la mise à jour d'une table en utilisant les valeurs d'une autre table, la syntaxe T-SQL la plus récente (2008) prend en charge la syntaxe SQL-92 des sous-requêtes scalaires, la syntaxe MERGE
des normes SQL-99 et SQL:2003 avec des extensions propriétaires utiles, ainsi que sa syntaxe plus ancienne UPDATE..FROM
(qui devrait être évitée de nos jours car elle permet des résultats potentiellement ambigus), toutes ces versions pouvant éventuellement utiliser les expressions de table communes SQL:2003 (utiles pour simplifier la syntaxe SQL-92 des sous-requêtes scalaires).
Pour Access, vous êtes obligé d'utiliser sa syntaxe propriétaire UPDATE..FROM
, qui n'est pas la même que la syntaxe T-SQL propriétaire UPDATE..FROM
mais qui a le même problème de permettre des résultats potentiellement ambigus (mais cette fois-ci ne peut être évité !), à moins que la requête implique des valeurs agrégées, auquel cas vous ne pouvez pas utiliser SQL du tout (!!) et devez recourir à du code procédural côté client (non-SQL) (car Access ne prend pas en charge le code SQL procédural, une autre énorme différence par rapport au T-SQL).