SQL (Structured Query Language - langage de requête structuré) est un langage standardisé permettant de gérer les bases de données relationnelles et effectuer diverses opérations sur les données qu'elles contiennent. Créé dans les années 1970, SQL est régulièrement utilisé non seulement par les administrateurs de bases de données, mais également par les développeurs qui écrivent des scripts d'intégration de données et par les analystes de données cherchant à mettre en place et à exécuter des requêtes analytiques. La norme est régulièrement mise à jour pour ajouter de nouvelles fonctionnalités et pour apporter des modifications au langage existant.
Le nom complet du standard SQL est ISO/IEC 9075 « Database Language SQL ». La mise à jour la plus récente est apparue en 2016. La version de SQL parue en 2016 a la référence ISO/IEC 9075:2016, ou plus simplement SQL:2016. Le standard SQL:2023 vient d'être finalisé et le texte final a été soumis par le groupe de travail au Secrétariat central de l'ISO. Selon les notes de version disponibles actuellement sur SQL:2023, la norme apporte un certain nombre de changements qui couvrent trois domaines principaux. En ce qui concerne le langage SQL existant, il y a des changements mineurs et d'autres majeurs, tous sous la forme de fonctionnalités optionnelles.
Modifications apportées au langage SQL existant
SQL:2023 clarifie le traitement des valeurs "null" dans les contraintes uniques (F292), en le rendant plus explicite et en réduisant l'ambiguïté précédente. Elle permet une plus grande flexibilité dans l'ordre des tables groupées (F868), ce qui n'était techniquement pas autorisé auparavant. Il introduit notamment des fonctions telles que GREATEST et LEAST (T054), LPAD et RPAD (T055), et des fonctions de découpage à plusieurs caractères (T056). Ces fonctions promettent d'améliorer l'efficacité et la convivialité du langage SQL. Les fonctions GREATEST et LEAST étaient déjà présentes dans de nombreuses implémentations. Voici quelques exemples :
- Remarque :
Dans d'autres langages de programmation, les fonctions GREATEST et LEAST auraient simplement pu s'appeler max et min. Mais en SQL, ces noms sont déjà utilisés pour les fonctions d'agrégation. Comme il n'y a pas de différence syntaxique entre les fonctions normales et les fonctions agrégées, vous devez choisir deux noms différents.
Code SQL : | Sélectionner tout |
1 2 | SELECT greatest(1, 2); --> 2 SELECT least(1, 2); --> 1 |
- Le nombre d'arguments pris en charge est illimité :
Code SQL : | Sélectionner tout |
1 2 | SELECT greatest(1, 2, 3); --> 3 SELECT least(1, 2, 3); --> 1 |
- Possibilité d'effectuer des calculs plus complexes :
Code SQL : | Sélectionner tout |
1 2 | SELECT greatest(base_price * 0.10, fixed_fee) FROM data ... SELECT least(standard, discount) FROM data ... |
Nouvelles fonctionnalités liées au format JSON
Le deuxième domaine de changement concerne les fonctionnalités liées à JSON. SQL:2023 inclut officiellement un type de données JSON (T801), ce qui améliore sa compatibilité avec les langages de programmation modernes. La norme autorise désormais les entiers hexadécimaux dans le langage de chemin SQL/JSON (T840), une amélioration qui aligne les capacités JSON de SQL sur le JavaScript moderne. En outre, elle introduit l'utilisation d'une syntaxe d'accesseur simplifiée, qui permet un accès facile à des parties de valeurs JSON (T860-T864), et des méthodes d'éléments SQL/JSON (T865-T878) axées sur les conversions de types de données.
Vous pouvez appliquer ces fonctions ou ces méthodes aux valeurs SQL/JSON à l'intérieur du langage SQL/JSON. SQL:2016 en contenait déjà un certain nombre, comme abs(), floor(), size(). Les méthodes introduites par SQL:2023 sont :
- T865 : bigint() ;
- T866 : boolean() ;
- T867 : date() ;
- T868 : decimal() ;
- T869 : decimal() avec précision et échelle ;
- T870 : integer() ;
- T871 : number() ;
- T872 : string() ;
- T873 : time() ;
- T874 : time_tz() ;
- T875 : time precision ;
- T876 : timestamp() ;
- T877 : timestamp_tz() ;
- T878 : timestamp precision.
Requêtes sur les graphes de propriétés
SQL:2023 introduit des requêtes de graphe de propriété (SQL/PGQ) en tant que partie entièrement nouvelle de la norme SQL. SQL/PGQ est un sous-ensemble de la norme GQL émergente. Ainsi, SQL/PGQ réduit encore la différence de fonctionnalité entre les SGBD relationnels et les SGBD de graphes natifs. En gros, cette nouvelle fonctionnalité facilite l'interrogation des données dans les tables comme si elles se trouvaient dans une base de données graphique, offrant ainsi une alternative, peut-être plus intuitive, à l'écriture de requêtes de jointure complexes. Cette fonctionnalité pourrait très accueillie dans la communauté de la science des données.
Code SQL : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | CREATE TABLE person (...); CREATE TABLE company (...); CREATE TABLE ownerof (...); CREATE TABLE transaction (...); CREATE TABLE account (...); CREATE PROPERTY GRAPH financial_transactions VERTEX TABLES (person, company, account) EDGE TABLES (ownerof, transaction); SELECT owner_name, SUM(amount) AS total_transacted FROM financial_transactions GRAPH_TABLE ( MATCH (p:person WHERE p.name = 'Alice') -[:ownerof]-> (:account) -[t:transaction]- (:account) <-[:ownerof]- (owner:person|company) COLUMNS (owner.name AS owner_name, t.amount AS amount) ) AS ft GROUP BY owner_name; |
Dans cet exemple, toutes les tables doivent avoir des clés étrangères entre elles afin que la définition du graphe des propriétés puisse déterminer comment elles sont connectées. Il existe également une syntaxe permettant de spécifier les connexions dans la définition du graphe des propriétés s'il n'y a pas de clés étrangères. Par ailleurs, les nouveautés introduites par la norme SQL:2023 reflètent le désir permanent de gérer davantage de données de manière de plus en plus polyvalente, en maintenant SQL, les données relationnelles et les données organisées par schéma au centre de la gestion des données.
SQL:2023 prouve que si le langage SQL relationnel de base reste solide, il est toujours possible de l'améliorer et de le moderniser. Cette nouvelle norme arrive après la deuxième plus longue période d'interruption dans l'histoire de SQL (après 1992-1999), la pandémie de la Covid-19 étant un facteur important qui a contribué à ce retard. Malgré cela, l'équipe travaille déjà sur les futures itérations de la norme SQL, avec à l'horizon de nouvelles améliorations pour PGQ, JSON et le langage de base.
Source : Annonce de SQL:2023
Et vous ?
Que pensez-vous des nouveautés introduites par SQL:2023 ?
Voir aussi
Les travaux sur la norme C++ 23 sont terminés et cette nouvelle version porte le nom de code "Pandemic Edition", C++ 23 cherche à améliorer la vitesse de compilation et l'hygiène du code
Nubank annonce que les versions Pro et Cloud de Datomic, sa base de données distribuée, sont désormais disponibles gratuitement sous licence Apache 2.0, mais les sources des binaires restent fermées
sqlite-gui, un éditeur de base de données SQLite pour les systèmes Windows, l'outil est gratuit et basé sur C++/mingw64/WinAPI
Le Big Data serait mort, d'après Jordan Tigani, ingénieur fondateur de Google BigQuery, alors que pour IDC, le marché du Big Data enregistrera une forte croissance dans les années à venir