SELECT
, INSERT
, UPDATE
et DELETE
.SQL est omniprésent dans les systèmes informatiques modernes. Il permet à la fois :
CREATE
, ALTER
, DROP
) ;INSERT
, UPDATE
, DELETE
) ;SELECT
, JOIN
, GROUP BY
, etc.) ;GRANT
, REVOKE
) ;Type SQL | Description |
---|---|
INT , BIGINT |
Nombres entiers (positifs ou négatifs) |
SMALLINT , TINYINT |
Entiers de plus petite taille (moins de mémoire utilisée) |
DECIMAL(p,s) |
Nombres décimaux précis avec p chiffres au total et s après la virgule |
FLOAT , REAL |
Nombres décimaux à virgule flottante (moins précis, plus légers) |
CHAR(n) |
Texte fixe de longueur n (utile pour des codes, comme un INSEE) |
VARCHAR(n) |
Texte variable jusqu’à n caractères |
TEXT |
Texte long (commentaires, descriptions…) |
DATE |
Date au format AAAA-MM-JJ |
TIME , DATETIME |
Heure seule ou date avec heure |
BOOLEAN |
Valeur logique : TRUE ou FALSE |
ENUM(...) |
Valeur choisie parmi une liste définie (ex : 'Homme' , 'Femme' ) |
BLOB |
Données binaires (images, fichiers, sons…) |
nom VARCHAR(50)
: chaîne de texte pouvant aller jusqu’à 50 caractères.montant DECIMAL(8,2)
: valeur numérique avec 6 chiffres avant la virgule et 2 après (ex : 123456.78).sexe ENUM('Homme', 'Femme', 'Autre')
: contraint la valeur à une liste prédéfinie.codePostal CHAR(5)
: champ texte fixe pour un code à 5 chiffres.photo BLOB
: stocke une image en base de données (rarement conseillé).Le langage SQL est divisé en plusieurs familles de commandes, selon leur rôle dans la gestion d’une base de données relationnelle.
Catégorie | Signification | Exemples |
---|---|---|
DDL (Data Definition Language) | Sert à définir ou modifier la structure des objets de la base (tables, vues, clés...). | CREATE TABLE , ALTER , DROP |
DML (Data Manipulation Language) | Sert à ajouter, modifier ou supprimer des données dans les tables. | INSERT , UPDATE , DELETE |
DQL (Data Query Language) | Sert à interroger les données pour les lire ou les analyser. | SELECT |
DCL (Data Control Language) | Sert à gérer les permissions et la sécurité d’accès aux données. | GRANT , REVOKE |
CREATE DATABASE
crée une base nommée Ecole
.
La commande USE
permet de travailler à l’intérieur de cette base.
PRIMARY KEY
signifie que la colonne idEtudiant
est unique et obligatoire pour chaque ligne.
Elle sert à identifier de manière sûre un enregistrement.
idEtudiant
: un entier (identifiant unique).nom
et prenom
: des textes de longueur maximale 50 caractères.dateNaissance
: une date (au format AAAA-MM-JJ).
+------------+----------+--------+---------------+
| idEtudiant | nom | prenom | dateNaissance |
+------------+----------+--------+---------------+
| 1 | Martin | Alice | 2001-05-12 |
| 2 | Durand | Lucas | 2000-11-03 |
+------------+----------+--------+---------------+
On peut ajouter d'autres contraintes, par exemple rendre une colonne obligatoire :
NOT NULL
: le champ ne peut pas rester vide.CHECK
: impose une condition logique (ici, un volume horaire strictement positif).INSERT
Etudiant
, en précisant les colonnes concernées et les valeurs associées.
Insérer plusieurs lignes à la fois :
Sans nommer les colonnes (déconseillé) :
SELECT
SELECT
permet d’afficher les données souhaitées.
Ici, on affiche les colonnes nom
et prenom
des étudiants nés après le 1er janvier 2001, triés par nom croissant.
Afficher toutes les colonnes :
Filtrer un nom précis :
SELECT *
dans les applications : cela surcharge inutilement les requêtes.
- Utilisez des **filtres** pour limiter le volume de données retourné.
- Triez avec ORDER BY
pour faciliter la lecture des résultats.
UPDATE
Dupont
pour le changer en Dupond
.
WHERE
pour éviter de modifier **toutes les lignes** de la table accidentellement.
DELETE
Lefevre
.
Supprimer toutes les données de la table (⚠️ dangereux) :
WHERE
, la commande DELETE
supprime toutes les lignes de la table.
Utilisez-la uniquement en connaissance de cause.
Une jointure permet de combiner des données provenant de plusieurs tables. Cela est essentiel dans une base de données relationnelle, où les informations sont souvent réparties sur plusieurs tables. Il existe différents types de jointures, selon le résultat souhaité.
INNER JOIN
ou JOIN
)La jointure interne ne conserve que les lignes qui ont des correspondances dans toutes les tables jointées. C'est à dire, elle ne retourne que les enregistrements qui existent dans les deux tables. C'est le type de jointure le plus courant.
JOIN
(ou INNER JOIN
) ne conserve que les lignes présentes dans toutes les tables jointes.
Si un étudiant n’a pas d’inscription, il n’apparaîtra pas dans le résultat.
LEFT JOIN
)La jointure externe gauche conserve toutes les lignes de la première table (à gauche) et les lignes correspondantes de la seconde table (à droite). Si aucune correspondance n'est trouvée, les colonnes de la seconde table contiendront des valeurs nulles.
LEFT JOIN
conserve toutes les lignes de gauche (`Etudiant`), même si elles n'ont pas de correspondance dans la table droite.
Cela permet de voir les étudiants même sans cours inscrit (le champ `intitule` sera alors NULL
).
Il est possible d'ajouter des filtres dans la clause WHERE
pour restreindre les résultats. Par exemple, pour ne garder que les cours de plus de 20 heures :
Type de jointure | Résultat attendu |
---|---|
INNER JOIN |
Correspondances exactes dans toutes les tables |
LEFT JOIN |
Toutes les lignes de gauche, même sans correspondance |
RIGHT JOIN |
Toutes les lignes de droite (rarement utilisé) |
FULL JOIN |
Toutes les lignes des deux tables (non supporté par MySQL) |
Les fonctions d’agrégation permettent de faire des calculs sur plusieurs lignes d’une table. Elles sont très utiles pour obtenir des statistiques ou des résumés de données.
Cette requête retourne la moyenne des notes et le nombre d'inscrits pour le cours dont l'identifiant est 1
.
Fonction | Rôle |
---|---|
AVG() |
Calcule la moyenne |
SUM() |
Fait la somme des valeurs |
COUNT() |
Compte le nombre de lignes |
MAX() |
Renvoie la valeur maximale |
MIN() |
Renvoie la valeur minimale |
AS
AS
permet de donner un alias (nom temporaire) à une colonne ou une expression dans le résultat d’une requête.
AS total_etudiants
donne un nom lisible à la colonne résultante.GROUP BY
Ici, la moyenne est calculée pour chaque cours.
HAVING
Cette requête retourne les cours dont la moyenne des notes est strictement supérieure à 12.
HAVING
?HAVING
permet de filtrer les résultats après un GROUP BY
,
là où WHERE
filtre les lignes avant regroupement.
Cette requête :
idEtudiant
et idCours
forment ensemble une clé primaire composite, garantissant qu’un étudiant ne peut s’inscrire qu’une seule fois à un même cours.FOREIGN KEY
établit des liens avec d'autres tables :
idEtudiant
fait référence à la table Etudiant
,idCours
fait référence à la table Cours
.Inscription
que si cette valeur existe déjà dans la table référencée.