Bases de données relationnelles et SQL
Keine KartenThis note details the structure and manipulation of relational databases, covering core concepts like relations, tuples, attributes, keys (primary and foreign), and integrity constraints. It also delves into SQL, including data query languages (SELECT statements with clauses like WHERE, GROUP BY, HAVING, ORDER BY, UNION, INTERSECT), data manipulation languages (INSERT, UPDATE, DELETE), and data definition languages (CREATE TABLE, ALTER TABLE, DROP TABLE). The note includes practical examples and code snippets for each topic.
Organisation du cours et Notions de Bases de Données
Ce cours, de l'UFR SMBH de l'UNIVERSITÉ SORBONNE PARIS NORD (2025/2026), couvre deux parties principales en informatique : Bases de données et Introduction à Python.
Partie I : Bases de données
3 CM, 2 TPs
Intervenants : Mme Ait Mohamed, M.Varzinczak, Mme Dandan
Focus sur : Introduction, Modèle relationnel, Langage SQL
Deux séances de TP (6h) sont dédiées à l'écriture de requêtes SQL (exploitation de MySQL).
Référence : Cours de bases de données – Modèles et langages, Philippe Rigaux.
Partie II : Introduction à Python
2 CM, 2 TPs
Intervenants : M. Varzinczak, Mme Ait Mohamed, Mme Dandan, M. Ladam
L'organisation des modules est conforme aux compétences requises pour la certification PIX (https://pix.org).
1. Notions de base
1.1. Données
Une Donnée est une valeur numérisée qui décrit un fait, une mesure.
Elle peut être sous diverses formes : chaîne de caractères (ex: "Dupont"), nombre (ex: 25), date (ex: "12/07/1998").
Une base de données est structurée. Sans structure, c'est une collection ou un tas de documents.
1.2. Base de Données
Une base de données est un ensemble d’informations structurées mémorisées sur un support persistant.
Exemple de fichier CSV (Comma Separated Values) :
"Dupont" ; "Nicolas" ; "hôpital d’Avicenne" ; 10/01/2022 "Martin" ; "Marie" ; "hôpital d’Avicenne" ; 15/06/2019Ce type de fichier EST une base de données si elle respecte les critères de structuration et persistance, mais elle peut manquer de fonctionnalités avancées.
Difficultés sans SGBD :
Impossible de construire des applications directement sur des fichiers.
Problèmes de productivité, fiabilité, efficacité.
1.3. Les SGBD (Systèmes de Gestion de Bases de Données)
Un SGBD est un système informatique qui assure la gestion de l'ensemble des informations stockées dans une base de données.
Fonctions fondamentales d'une base de données gérée par un SGBD :
Stocker l'information de façon fiable (restituer l'information entrée).
Traiter de grands volumes de données (massification).
Traiter rapidement les données (optimisation).
Sécuriser les accès (gérer les autorisations).
Contrôler la qualité des données (cohérence).
Partager les données (entre applications).
Rendre accessible les données en réseau (gérer la concurrence).
1.4. Langages – SQL (Structured Query Language)
SQL est le langage le plus répandu pour manipuler les données dans un SGBD.
Il permet : interrogation, mise à jour, gestion des droits d'accès.
2. Le modèle relationnel
L'expression "modèle relationnel" provient de la notion de relation.
C'est le modèle théorique dominant pour la représentation logique des bases de données, introduit par Codd en 1970.
Il inclut des concepts pour la description de données (DD) et la manipulation de données (MD).
2.1. Relation, Nuplets et Attributs
Une relation (binaire) sur un ensemble est un sous-ensemble du produit cartésien .
Une relation de degré sur les domaines est un sous-ensemble fini du produit cartésien .
Une relation peut être représentée comme une table avec des colonnes et des lignes.
Un nuplet est un élément d'une relation de dimension n (). Dans une table, un nuplet est une ligne.
Exemple : La relation Région(Département, Code) avec le nuplet (Seine-Saint-Denis, 93).
Conséquences de la définition mathématique d'une relation (ensemble) :
L'ordre des nuplets est indifférent.
Pas de doublons (en théorie).
Pas de "cellule vide" (valeurs toujours connues, atomiques).
Les valeurs des attributs sont élémentaires et atomiques (non-décomposables).
2.3. Schéma d’une relation
Décrit une relation par :
Le nom de la relation (ex: R).
Un nom distinct pour chaque dimension (attribut, noté ).
Le domaine de valeur (type) de chaque dimension (noté ).
Forme : ou simplement .
Exemple : Région(nom: string, code: string).
2.5. Clé
1. Clé primaire
Une clé d'une relation R est un sous-ensemble minimal des attributs qui identifie uniquement chaque nuplet.
On choisit une clé comme clé primaire ; les autres sont des clés secondaires.
Caractéristiques d'une bonne clé primaire :
Désigne sans ambiguïté une et une seule entité.
Sa valeur est connue pour toute entité.
Ne doit jamais être modifiée.
Doit avoir la plus petite taille de stockage possible.
Un attribut non-descriptif ("Id") est souvent le meilleur choix pour une clé primaire.
Tous les attributs doivent dépendre directement de la clé.
2. Clé étrangère
Une clé étrangère est un attribut (ou un ensemble d'attributs) d'une table qui fait référence à la clé primaire d'une autre table.
Elle établit un lien entre deux tables, garantissant l'intégrité référentielle.
Exemple : Dans Manuscrit (id_manuscrit, auteur, titre, #id_expert, nom, commentaire), #id_expert est une clé étrangère qui référence id_expert de la table Expert (id_expert, nom, adresse).
2.6. Les contraintes
Les contraintes garantissent l'intégrité de la base de données.
Exemples de règles garanties par le SGBD :
La valeur d’un attribut doit être unique (contrainte d'unicité).
Un attribut doit toujours avoir une valeur (NOT NULL).
Clé primaire (unicité et identification).
Intégrité référentielle (validité des références d'une table à une autre).
3. SQL – Structured Query Language
SQL est le langage standard pour gérer les bases de données relationnelles.
3.1. Langages d'interrogation
Deux approches complémentaires :
Langage déclaratif : Spécifie le résultat souhaité, sans détailler les opérations. (Ex: logique mathématique)
Langage procédural/algébrique : Définit les opérations pour obtenir le résultat. (Ex: algèbre relationnelle)
SQL combine ces deux approches.
SQL est utilisé pour : interrogation (SELECT), mises à jour (INSERT, UPDATE, DELETE), définition des tables (CREATE TABLE), contraintes, droits d'accès.
3.2. Création d'une base de données
Commande :
CREATE DATABASE nom_base_de_données;
3.3. Requêtes SQL
Syntaxe de base d'une requête :
SELECT [DISTINCT] t.a1, t.a2, ...
FROM T AS t
WHERE <condition>FROM: Définit la table source et sa portée (variable libre).WHERE: Exprime les conditions sur la variable libre.SELECT: Construit le nuplet-résultat.DISTINCT: Élimine les doublons dans le résultat (car les requêtes SQL peuvent produire des doublons, contrairement à la théorie des relations).
Opérateurs logiques dans WHERE
AND: Les deux conditions doivent être vraies.WHERE <condition1> AND <condition2>OR: Au moins une condition doit être vraie.WHERE <condition1> OR <condition2>BETWEEN: Sélectionne un intervalle de données.WHERE colonne BETWEEN 'valeur1' AND 'valeur2'Exemple : Étudiants inscrits entre '2024-09-01' et '2024-10-01'.
SELECT * FROM Etudiant WHERE dateInscription BETWEEN '2024-09-01' AND '2024-10-01';
Fonctions d'agrégation et GROUP BY
GROUP BY: Groupera plusieurs résultats pour appliquer une fonction d'agrégation.SELECT t.a1, fonction(t.a2) FROM Table AS t GROUP BY t.a1;Quelques fonctions statistiques :
AVG()(moyenne),COUNT(),MAX(),MIN(),SUM().Exemple : Coût total d'achats par client.
SELECT nom, SUM(tarif) FROM Client GROUP BY nom;
Filtrage avec HAVING
HAVING: Filtre des groupes après l'agrégation (similaire àWHERE, mais pour les fonctions agrégées).SELECT t.a1, fonction(t.a2) FROM T AS t GROUP BY t.a1 HAVING fonction(t.a2) opérateur 'valeur';Exemple : Clients ayant commandé plus de 40€.
SELECT nom, SUM(tarif) FROM Client GROUP BY nom HAVING SUM(tarif) > 40;
Tri des résultats avec ORDER BY
ORDER BY: Trie les lignes dans le résultat d'une requête SQL. Par défaut, l'ordre est ascendant (ASC).SELECT t.a1, t.a2, ... FROM T AS t ORDER BY t.a1 [ASC|DESC];Exemple : Étudiants par ordre alphabétique du nom de famille.
SELECT * FROM Etudiant ORDER BY nom;
Opérations ensemblistes
UNION: Concatène les résultats de 2 requêtes ou plus. Les colonnes doivent être compatibles.SELECT ... FROM T1 UNION SELECT ... FROM S1;INTERSECT: Retourne l'intersection des résultats de 2 requêtes (données similaires).SELECT ... FROM T1 INTERSECT SELECT ... FROM S1;
Jointure naturelle
Combinaison de lignes de deux tables ou plus basées sur une colonne relationnelle commune.
Exemple : Logements où l'on peut faire du ski.
SELECT nom FROM Logement AS l, Activité AS a WHERE l.code = a.codeLogement AND a.codeActivité = 'Ski';Ou avec la syntaxe moderne (depuis 1992) :
SELECT nom FROM Logement AS l JOIN Activité AS a ON (l.code = a.codeLogement) AND a.codeActivité = 'Ski';
Quantificateurs EXISTS et NOT EXISTS
EXISTS: Vrai si la sous-requête renvoie au moins une ligne.SELECT l.nom FROM Logement AS l WHERE EXISTS (SELECT '' FROM Activité AS a WHERE l.code = a.codeLogement AND a.codeActivité = 'Ski');NOT EXISTS: Vrai si la sous-requête ne renvoie aucune ligne. Utile pour exprimer le quantificateur universel ( "pour tous").SELECT DISTINCT l.nom FROM Logement AS l WHERE NOT EXISTS (SELECT '' FROM Activité AS a WHERE l.code = a.codeLogement AND a.codeActivité = 'Ski');Application de
NOT EXISTSpour le quantificateur universel :Voyageurs qui ont visité tous les logements (i.e., il n'existe pas de logement qu'ils n'ont pas visité).
SELECT DISTINCT v.prénom, v.nom FROM Voyageur AS v WHERE NOT EXISTS (SELECT '' FROM Logement AS l WHERE NOT EXISTS (SELECT '' FROM Séjour AS s WHERE l.code = s.codeLogement AND v.idVoyageur = s.idVoyageur));
3.4. Requêtes SQL de modification de tables
Requête INSERT INTO
Ajoute une ou plusieurs lignes dans une table.
Deux syntaxes principales :
En spécifiant toutes les colonnes :
INSERT INTO table VALUES ('valeur 1', 'valeur 2', ...);En spécifiant les colonnes souhaitées :
INSERT INTO table (col1, col2, ...) VALUES ('valeur 1', 'valeur 2', ...);
Insertion de plusieurs lignes :
INSERT INTO Habitant(Id, prénom, nom, ville, âge) VALUES (01, 'Neil', 'Armstrong', 'Saint-Didier-des-Bois', 42), (02, 'Buzz', 'Aldrine', 'Marigny-le-Châtel', 40);
Requête UPDATE
Modifie des lignes existantes. Souvent utilisée avec
WHERE.Syntaxe :
UPDATE table SET nom_colonne_1 = 'nouvelle valeur', nom_colonne_2 = 'autre valeur' WHERE condition;Exemple : Modifier la ville d'un habitant.
UPDATE Habitant SET ville = 'Saint-Eustache-la-Forêt' WHERE Id = 01;
Requête DELETE FROM
Supprime des lignes d'une table. Utilisée avec
WHEREpour cibler les suppressions.Syntaxe :
DELETE FROM table WHERE condition;Exemple : Supprimer un habitant.
DELETE FROM Habitant WHERE Id = 03;
3.5. Requêtes SQL de définition de tables (DDL)
Requête CREATE TABLE
Crée une nouvelle table, définit ses colonnes et types de données.
Syntaxe :
CREATE TABLE nom_de_la_table ( colonne1 type_donnees, colonne2 type_donnees, ... );Options de colonne :
NOT NULL: Empêche les valeurs nulles.DEFAULT valeur: Attribue une valeur par défaut.PRIMARY KEY (colonne): Définit la clé primaire.FOREIGN KEY (colonne) REFERENCES AutreTable(AutreColonne): Définit une clé étrangère.
Exemple complet :
CREATE TABLE Habitant ( Id INTEGER NOT NULL, prénom VARCHAR(30), nom VARCHAR(30) DEFAULT 'Inconnue', ville VARCHAR(100), âge INTEGER, PRIMARY KEY (Id) );Exemple avec clé étrangère :
CREATE TABLE Manuscrit ( id_manuscrit INTEGER NOT NULL, auteur VARCHAR(30), titre VARCHAR(100) DEFAULT 'Inconnue', id_expert INTEGER NOT NULL, nom VARCHAR(30), commentaire VARCHAR(100), PRIMARY KEY (id_manuscrit), FOREIGN KEY (id_expert) REFERENCES Expert(id_expert) );
Requête ALTER TABLE
Modifie la structure d'une table existante (ajouter/supprimer/modifier une colonne).
Syntaxe de base :
ALTER TABLE nom_table instructions;Exemples :
Ajouter une colonne :
ALTER TABLE nom_table ADD nom_colonne type_donnees;Supprimer une colonne :
ALTER TABLE nom_table DROP COLUMN nom_colonne;Renommer une colonne (MySQL) :
ALTER TABLE nom_table CHANGE ancien_nom nouveau_nom type_donnees;
Requête DROP TABLE
Supprime définitivement une table. Supprime également les index, contraintes et permissions associées.
Syntaxe :
DROP TABLE nom_table;
Références bibliographiques
Philippe Rigaux, Cours de bases de données – Modèles et langages.
CJ Date, A Guide to the SQL Standard.
CJ Date, Introduction aux bases de données. 8ème édition.
K Kline et al., SQL in a Nutshell: A Desktop Quick Reference. 4ème édition.
J Patrick, SQL Fundamentals. 3ème édition.
J Melton et AR Simon, Understanding the New SQL: A Complete Guide.
W Shields, SQL QuickStart Guide.
Quiz starten
Teste dein Wissen mit interaktiven Fragen