Le langage SQL (Structured Query Language) - Définition et Fonctionnement

Comprendre l'origine de l'existance des bases de données relationnelles et de SQL va vous permettre de mieux comprendre le fonctionnement d'interogation avec le langage SQL.

La pré-histoire du SQL : l'aventure

En 1968, le mathématicien hollandais David L. Childs travaille à l'université de Michigan.
Il maîtrise la théorie des ensembles du mathématicien allemand Georg Cantor et s'intéresse à l'informatique, notamment aux problèmes de performance des structures de stockage.

Childs affirme que l'on peut exprimer toute question avec seulement 3 fonctions de base : la "sélection", la "relation", le "regroupement".

Il démontre aussi qu'il est beaucoup plus simple et rapide d'utiliser les fonctions ensemblistes pour répondre à des questions comme :
"Trouver, dans une population donnée, le nombre d'Espagnols dont la langue maternelle n'est pas l'espagnol" !

Réduire l'universalité du questionnement à 3 fonctions est fascinant.
Le penser est utopique.
Le démontrer est presque impensable.

Cette invention est à l'origine de l'aventure du SQL.

Pendant que Childs publie ses travaux, Codd essaye d'inventer un système de stockage des données plus performant que le séquentiel indexé et les bases hiérarchiques. Il travaille sur une théorie d'arrangement de données basée sur des "relations".

En 1970, ses travaux aboutissent et il a une idée géniale : il pense que, grâce à son stockage de données organisé en "relationnel", la théorie de Childs peut donner lieu à l'implémentation d'un langage "universel", qu'il nomme "Universal Data Sublanguage".

L'invention du SQL

En 1974, deux informaticiens d'IBM Donald Chamberlin et Raymond Boyce publient la première version du SQL appelée Structured English QUEry Language (SEQUEL) (« langage d'interrogation structuré en anglais »).
Il a été conçue pour manipuler et éditer des données stockées dans la base de données relationnelle à l'aide du système de gestion de base de données (SGBD) IBM System R.

Les premiers mots du futur langage SQL apparaissent.
Chamberlin et Boyce s'inspirent des travaux de Childs en traduisant ses 3 fonctions ensemblistes :
"sélection" par SELECT/WHERE, "relation" par FROM et "regroupement" par GROUP BY.

Le nom SEQUEL, qui était déposé commercialement pour un système d'acquisition de données, a été abandonné et contracté en SQL en 1975.

En 1979, Relational Software, Inc. (actuellement Oracle Corporation) présenta la première version commercialement disponible de SQL, rapidement imité par d'autres fournisseurs.

SQL a été adopté comme recommandation par l'Institut de normalisation américaine (ANSI) en 1986, puis comme norme internationale par l'ISO en 1987 sous le nom de ISO/CEI 9075 - Technologies de l'information - Langages de base de données - SQL

Fonctionnement du SQL

SQL signifie Structured Query Language (Langage de Requête Structurée).
C'est un langage qui permet d'interroger un système de gestion de base de données relationnelle (SGBDR) afin de pouvoir enregistrer, modifier, supprimer ou récupérer des informations.

Une base de données relationnelle se présente sous la forme de plusieurs tableaux.
Chaque tableau, aura un nom et des titres de colonnes comme pour un tableau de type Excel.
Chaque ligne correspondra à un enregistrement qui sera sauvegardé sur le disque dur du serveur.

Exemple : un tableau contenant les informations clients d'une société
client
id_client nom prenom date_naissance email tel pays
1 Smith Kevin 1990-09-04 k.smith@estiam.com +33 612.459.867 France

Le langage SQL joue un rôle central dans la gestion des bases de données relationnelles.
Voici les principaux aspects de son rôle :

1. Interrogation de Données (Data Querying)
SQL est utilisé pour interroger la base de données afin de récupérer les informations nécessaires.
Les requêtes SQL permettent de sélectionner des données spécifiques, de filtrer, de trier, et d'effectuer des calculs complexes.
2. Manipulation de Données (Data Manipulation)
SQL permet de manipuler les données dans les bases de données. Cela inclut :
  • Insertion (INSERT) : Ajouter de nouvelles données.
  • Mise à jour (UPDATE) : Modifier les données existantes.
  • Suppression (DELETE) : Effacer des données.
3. Définition de la Structure de la Base de Données (Data Definition)
SQL est utilisé pour définir la structure des données dans la base de données (DDL - Data Definition Language). Cela comprend la création de nouvelles tables, la définition de colonnes et de types de données, et la mise en place de contraintes comme les clés primaires et étrangères.
4. Contrôle d'Accès aux Données (Data Control)
SQL gère les droits et les privilèges des utilisateurs pour assurer la sécurité des données. Cela inclut la création de comptes utilisateurs, la définition de leurs permissions, et la gestion de l'accès aux différentes parties de la base de données.
5. Gestion des Transactions
SQL permet la gestion des transactions, qui sont des séquences d'opérations traitées de manière cohérente et fiable. Les propriétés ACID (Atomicité, Cohérence, Isolation, Durabilité) des transactions sont essentielles pour maintenir l'intégrité des données.
6. Maintenance et Optimisation
SQL est utilisé pour la maintenance et l'optimisation des performances de la base de données. Cela inclut la création d'index pour accélérer les requêtes, l'optimisation des requêtes, et la gestion de l'espace de stockage.
7. Interopérabilité
SQL, étant un langage standard, permet l'interopérabilité entre différents systèmes de gestion de base de données (SGBD). Cela facilite la migration, l'intégration et la communication entre différents systèmes.
8. Analyse et Reporting
SQL est souvent utilisé pour extraire des données pour l'analyse et la génération de rapports, ce qui est crucial dans les domaines de la business intelligence et de l'analyse de données.

En résumé, SQL est le pilier de la gestion des bases de données relationnelles, offrant des outils puissants pour l'interrogation, la manipulation, la définition, et le contrôle des données, ainsi que pour la gestion des transactions, la maintenance, et l'optimisation des bases de données.

La Structure Générale d’une Requête SQL

Une requête SQL suit un ordre logique de mots clés qui peut être décrit ainsi :

  1. SELECT : Quels colonnes ou calculs souhaitez-vous afficher ?
  2. FROM : Où chercher les données (quelle table) ?
  3. JOIN : Comment relier les données de plusieurs tables ?
  4. WHERE : Quels filtres appliquer pour limiter les résultats ?
  5. GROUP BY : Comment regrouper les données pour les agrégats ?
  6. HAVING : Quels filtres appliquer sur les données agrégées ?
  7. ORDER BY : Comment trier les résultats ?
  8. LIMIT : Combien de résultats retourner ?

Visualiser la Logique avec une Métaphore

Imaginez un entrepôt (la base de données) où :

Explication des Mots-Clés avec un guide pas-à-pas pour construire une requête SQL

Prenons un exemple pratique avec deux tables ventes et produits contenant des informations :

Nous verrons plus tard que les deux tables ont des champs en communs (en rouge) pour permettre une jointure (une connexion) et ainsi mettre en commun leurs informations.
Cette connexion est identifée par une clé primaire et une clé étrangère.

Table: produits
id (clé primaire) product_name price category
1 Smartphone 699 Electronics
2 Laptop 999 Electronics
3 Office Chair 150 Furniture
4 Desk Lamp 40 Furniture
Table: ventes
sale_id product_id (clé étrangère) quantity sale_date
1 1 3 2024-11-01
2 2 1 2024-11-02
3 3 5 2024-11-03
4 1 2 2024-11-04
Étape 1 : SELECT (Quels données afficher ?) Affichez toutes les colonnes d'une table.
 SELECT * 
FROM produits;
SELECT : Spécifie les colonnes à afficher. * signifie "toutes les colonnes". FROM : Indique la table source où aller chercher les données. Sélectionnez des colonnes spécifiques d'une table.
SELECT product_name, price 
FROM produits;
Affiche uniquement le nom et le prix des produits. Étape 2 : WHERE (Filtrer les données) Ajoutez des conditions pour limiter les résultats.
SELECT product_name, price 
FROM produits
WHERE price > 100;
Affiche uniquement le nom des produits et le prix dont le prix dépasse 100 € WHERE : Applique des filtres pour inclure uniquement les lignes qui respectent la condition. Étape 3 : JOIN (Combiner plusieurs tables) Reliez des tables pour combiner leurs informations.
SELECT sales.sale_id, products.product_name, sales.quantity 
FROM ventes
JOIN products ON sales.product_id = products.id;
JOIN : Relie les deux tables en se basant sur une clé commune (sales.product_id et products.id). On récupère la liste des ventes dans la table ventes puis on va compléter les informations de chaque vente avec la table produits en reliant les deux tables par leur champ commun (ventes.product_id et produits.id). Étape 4 : ORDER BY (Trier les résultats) Ajoutez un tri pour organiser les résultats. Classez les produits par prix croissant.
SELECT product_name, price 
FROM products
ORDER BY price ASC;
//Liste triée des produits par prix, du moins cher au plus cher.
ORDER BY : Trie les résultats. ASC (ascendant) ou DESC (descendant). Étape 5 : LIMIT (Limiter le nombre de résultats) Réduisez la sortie pour n'afficher qu'un nombre précis de lignes. Quels sont les 3 produits les moins chers ?
SELECT product_name, price 
FROM products
ORDER BY price ASC
LIMIT 3;
LIMIT : Limite le nombre de lignes dans le résultat. Étape 6 : GROUP BY (Regrouper les données) Regroupez les données pour des calculs d'agrégats comme les sommes ou moyennes. Quel est le total des quantités vendues par produit ?
SELECT products.product_name, SUM(sales.quantity) AS total_quantity
FROM sales
JOIN products ON sales.product_id = products.id
GROUP BY products.product_name;
//Une ligne par produit avec le total des quantités vendues.
Étape 7 : HAVING (Filtrer les groupes) Filtrez les résultats après agrégation. Quels produits ont été vendus en quantités totales supérieures à 5 ?
SELECT products.product_name, SUM(sales.quantity) AS total_quantity
FROM sales
JOIN products ON sales.product_id = products.id
GROUP BY products.product_name
HAVING total_quantity > 5;
HAVING : Applique un filtre sur les données agrégées (contrairement à WHERE). AS : Utilisé pour renommer une colonne ou donner un nom à un résultat calculé dans une requête. Résumé SELECT : Ce que vous voulez voir. FROM : Où chercher les données. WHERE : Filtres sur les données brutes. JOIN : Reliez plusieurs tables. ORDER BY : Trier les résultats. LIMIT : Limiter le nombre de résultats affichés. GROUP BY : Regrouper pour travailler sur des agrégats (comptage, calculs...). HAVING : Filtrer les données dans les agrégation.

Utilisation de base de données pour le web.

Aujourd'hui de nombreux sites internets utilisent une base de données pour enregistrer les textes des pages et surtout les informations des articles si le site fait de la vente en ligne.
Les pages vont interroger la base de données en fonction des besoins des visiteurs.
Le site va récupérer les informations de la base de données, les traiter et les mettre en forme à l'aide de HTML et CSS.
Les requêtes d'interrogation de la base de données d'un site web sont construites directement en remplissant les formulaires de recherche mis à disposition des internautes ou de simples liens vers des requêtes prédéfinies.

Exemple de site Internet de recherche de voyages : Espace évasion