← Développement

SQL / Bases de données

Sommaire

1. Vocabulaire de base

TermeDéfinition
BD / BDDEnsemble structuré de données, stocké pour être facilement exploité (ajout, mise à jour, recherche).
SGBDLogiciel qui gère l'accès à une BDD (description, manipulation, sécurité, cohérence des données).
SGBDRUn SGBD relationnel (données organisées en tables liées entre elles).
SQLLe langage de requêtes qui permet de dialoguer avec une BDD relationnelle.

Évolution / typologie des BDD

SGBDR les plus utilisés : SQL Server (Microsoft), Oracle (Oracle Corp.), MySQL (Oracle Corp.), MariaDB, PostgreSQL, SQLite.

Les deux grandes familles du langage SQL

2. Les 3 niveaux de représentation d'une BDD

Niveau Conceptuel   →   MCD (Modèle Conceptuel de Données) / diagramme de classes
Niveau Logique      →   MLD (Modèle Logique des Données) = modèle relationnel
Niveau Physique     →   MPD, base de données réellement implémentée dans le SGBDR

Le MLD (Modèle Logique des Données)

Formalisme d'écriture d'une table :

NOMTABLE (clé_primaire, attribut1, attribut2, …, #clé_étrangère)

Exemple issu du cours :

EPREUVE (codeEpreuve, intituleEpreuve, coefficientEpreuve)
ETABLISSEMENT (codeEtab, nomEtab, villeEtab)
CANDIDAT (numCandidat, nomCandidat, prenomCandidat, …, #codeEtab)

Contraintes d'intégrité :

3. SELECT — la structure générale

SELECT colonne1, colonne2, ...
FROM table
WHERE condition
GROUP BY colonne
HAVING condition_sur_groupe
ORDER BY colonne;

a) Projection — choisir les colonnes (SELECT)

Mot-clé / syntaxeRôle
SELECT col1, col2Sélectionne certaines colonnes
SELECT *Sélectionne toutes les colonnes
ASRenomme une colonne à l'affichage (alias)
DISTINCTSupprime les doublons du résultat
ORDER BY col [ASC|DESC]Trie le résultat
SELECT nomCandidat AS "Nom", prenomCandidat AS "Prénom"
FROM candidat
ORDER BY nomCandidat;

SELECT DISTINCT villeEtab
FROM etablissement;

Fonctions utiles (syntaxe Oracle vue en cours, logique proche en MySQL) :

SELECT COUNT(*) AS "Nombre"
FROM candidat;

b) Sélection — filtrer les lignes (WHERE)

SELECT numCandidat, note
FROM obtenir
WHERE note >= 10;

c) Jointures — combiner plusieurs tables

SELECT numCandidat, nomCandidat, prenomCandidat, nomEtab
FROM candidat
INNER JOIN etablissement ON candidat.codeEtab = etablissement.codeEtab;
SELECT prenomCandidat, nomEpreuve, note
FROM candidat
LEFT OUTER JOIN obtenir ON candidat.numCandidat = obtenir.numCandidat;

d) Regroupement — agréger des lignes

SELECT villeEtab, COUNT(*) AS "Nombre"
FROM etablissement
GROUP BY villeEtab
HAVING COUNT(*) > 1;

4. Pense-bête — ordre d'exécution logique d'une requête

FROM  →  WHERE  →  GROUP BY  →  HAVING  →  SELECT  →  ORDER BY

L'ordre d'écriture du SQL n'est pas l'ordre d'exécution — utile pour comprendre pourquoi HAVING peut utiliser un agrégat mais pas WHERE.

5. À réviser côté exercices

Le cours contient un sujet type DS sur une base DANINE (fabricant/expéditeur de yaourts) avec des exercices de projection/sélection à partir d'un modèle physique de données, et l'utilisation de DATEDIFF(). Refaire ce type d'exercice (écrire la requête à partir d'un cahier des charges en français) est le meilleur entraînement avant un DS.