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.
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".
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
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.
client | ||||||
---|---|---|---|---|---|---|
id_client | nom | prenom | date_naissance | 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 :
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.
Une requête SQL suit un ordre logique de mots clés qui peut être décrit ainsi :
Imaginez un entrepôt (la base de données) où :
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.
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 |
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 |
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.
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.
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