Bases de Données Nouveau Programme Des CPGE

Télécharger au format ppt, pdf ou txt
Télécharger au format ppt, pdf ou txt
Vous êtes sur la page 1sur 108

Bases de Données

Nouveau programme des CPGE

Dr. Benjamin NGUYEN


[email protected]

UVSQ & INRIA


Laboratoire PRiSM, CNRS UMR 8144
Equipe-Projet INRIA SMIS « Secured and Mobile Information Systems »
Programme officiel 1/3
 L’objectif de cette partie de la formation vise à développer les savoir-faire
suivants :
 recourir aux concepts des bases de données relationnelles ;
 traduire les questions posées dans un langage de requête en respectant sa syntaxe ;
 prototyper et créer une base de données simple, à l’aide d’un outil interactif ;
 consulter une base de données à travers des requêtes de type SQL ;
 comprendre et décrire les rôles des différents éléments d'une architecture trois-tiers.
 La formation doit mettre en évidence la nécessité d’un niveau d'abstraction
suffisant dans la conception d’outils permettant la gestion de bases de données
de taille importante, là où des algorithmes de recherche simples sur des
structures « plates », orientées tableaux, deviennent inopérants : les schémas
relationnels sont une réponse à ce problème.
Programme officiel 2/3
Contenus Précisions et commentaires

Vocabulaire des bases de données : relation, attribut, domaine, Ces concepts sont présentés dans une perspective applicative, à
schéma de relation ; notion de clé primaire. partir d’exemples.

Opérateurs usuels sur les ensembles dans un contexte de bases Ces concepts sont présentés dans une perspective applicative.
de données : union, intersection, différence. Les seules jointures présentées seront les jointures
Opérateurs spécifiques de l'algèbre relationnelle : projection, symétriques, simples (utilisant JOIN … ON …=...).
sélection (ou restriction), renommage, jointure, produit et
division cartésiennes ; fonctions d'agrégation : min, max,
somme, moyenne, comptage.

Concept de client-serveur. Brève extension au cas de On se limite à présenter ce concept dans la perspective
l’architecture trois-tiers. applicative d’utilisation de bases de données.
Programme officiel 3/3
 La liste suivante énumère un choix non exhaustif d’exercices pratiques. Les bases de données
utilisées à des fins d’illustration concerneront de préférence des questions choisies au sein des
autres disciplines scientifiques et technologiques.
 utiliser une application de création et de manipulation de données, offrant une interface graphique,
notamment pour créer une base de données simple, ne comportant pas plus de trois tables ayant chacune un
nombre limité de colonnes. L’installation et l’exploitation d’un serveur SQL ne fait pas partie des attendus.
 lancer des requêtes sur une base de données de taille plus importante, comportant plusieurs tables, que les
étudiants n'auront pas eu à construire, à l’aide d’une application offrant une interface graphique ;
 enchaîner une requête sur une base de données et un traitement des réponses enregistrées dans un fichier.
 Les principales capacités développées dans cette partie de la formation sont :
 utiliser une application offrant une interface graphique pour créer une base de données et l’alimenter,
 utiliser une application offrant une interface graphique pour lancer des requêtes sur une base de données,
 distinguer les rôles respectifs des machines client, serveur, et éventuellement serveur de données,
 traduire dans le langage de l’algèbre relationnelle des requêtes écrites en langage courant,
 concevoir une base constituée de plusieurs tables, et utiliser les jointures symétriques pour effectuer des
requêtes croisées.
Programme du cours

 Présentation des fondements des systèmes de bases de


données
 Vocabulaire (concepts) des bases de données
 Algèbre relationnelle
 SQL
 Quelques développements
 Modèle Entité/Association
 Contraintes d’intégrité
 Calcul relationnel
Incitations du programme

 Le programme semble inciter à partir du besoin


d’interrogation, de constater la difficulté d’écrire des
algorithmes efficaces, et de conclure sur le besoin des
bases de données
 Comme il est indiqué dans le programme, je vais
toujours prendre des exemples ancrés dans le réel.
De la difficulté d’interroger les
grandes masses de données …
 Soit un ensemble de données représentant des élèves, les modules qu’ils
suivent, et leur notes.
 On souhaite interroger ces données pour retrouver les notes d’un élève,
calculer des moyennes, etc.
1. Il faut modéliser ces données (existe-t-il une méthode générique simple
applicable?)
2. Il faut définir pour chaque opération d’interrogation un programme qui
réalise cette opération. On pourra définir des sous-programmes pour des
tâches à réaliser fréquemment.
3. On souhaite rendre les données pérennes :
1. Il faut les sauvegarder sur un média durable
2. Il faut gérer les pannes à tout moment
4. On souhaite modifier les données
5. On souhaite sécuriser l’accès aux données
Exemple : des élèves et leurs notes
 Définir une structure élève complexe qu’on va mettre dans un tableau. En soi c’est déjà compliqué.

struct eleve{
nom : string;
notes : tableau [X] de int ; // ou quelque chose de plus compliqué
}

 Calculer la moyenne des notes d’un élève = écrire une fonction


float moyenne (eleve e){
float somme = 0;
for(int i=0;i<e.notes.length;i++) somme+=e.notes[i];
return somme/e.notes.length;
}

 Stocker les données = définir un format de fichier et les procédures permettant de lire ou écrire des données.
 Modifier les données = écrire un programme
 Sécuriser les données = écrire (plusieurs) programmes
 Etc.

DEJA SUR CET EXEMPLE CE N’EST PAS SIMPLE !!


Les problèmes des systèmes à base de
fichiers
 Format de fichiers non standards (chacun crée le sien)
 Redondance de données (incohérences possibles ou difficiles à
gérer)
 Écriture d’un programme spécifique pour chaque interrogation :
coûts de développement élevés, coûts de maintenance élevés
 Gestion des pannes à programmer soi même (l’OS ne suffit pas)
 Partage de données difficile
 Sécurisation des données difficile

BREF TOUT EST A FAIRE SOI-MEME !


La réponse « SGBD » =
un « package » comprenant :
 Indépendance physique  Exécution et optimisation
 Possibilité de modifier les structures de  Les requêtes sont traduites en un langage
stockage sans modifier les programmes procédural (algèbre relationnelle)
 Ecriture des applications par des non-  … qui peut être optimisé automatiquement.
spécialistes des fichiers (des années de recherche en BD…)
 Meilleure portabilité, indépendance vis-à-vis  Intégrité logique (Contraintes d’intégrité)
du matériel  Par le biais d’un langage déclaratif
 Indépendance logique  Détection de mises à jour erronées
 Possibilité d’ignorer les données d’autres  Contrôle sur les données élémentaires et les
applications relations
 Possibilité d’enrichir les applications sans  Intégrité physique
devoir tout réécrire  Tolérence aux pannes
 Possibilité de protéger (rendre  Transactions
confidentielles) certaines données  Système (panne courrant)
 Manipulation aisée  Disque (crash)
 Par le biais d’un langage déclaratif (SQL)  Partage de données
équivalent à la logique du 1 er ordre  Isolation (chacun a l’air d’être seul)
 Vues multiples (virtuelles) des données  Concurrence (tout le monde peut agir en
même temps)
 Confidentialité
 Standardisation
Plan

 Le Modèle Entité/Association (HP)


 Les Fondements Théoriques
 Les Requêtes par l’Exemple
LE MODELE
ENTITE/ASSOCIATION
The Entity-Relationship Model, Toward a Unified View of Data,
Peter P.-S. Chen
ACM Transactions on Database Systems (TODS) 1:(1), 1976

1. Objectifs et principes
2. Le modèle Entité-Association (E/R)
3. Conclusion
Une Base de Données
naît d’un besoin
 Stocker des (grandes quantités de) données
 Quel type de données ?
 Comment structurer les données conceptuellement ? Et « physiquement » ?
 Modélisation Conceptuelle (E/R) puis traduction dans un modèle logique
(e.g. Relationnel, XML, Objet, etc.)
 Stockage « physique » (on n’en parle pas du tout ici).
 Interroger des (grandes quantités de) données
 Faut-il écrire un programme pour chaque action spécifique (requête) qu’on
souhaite faire sur les données ?
 Utilisation d’un langage de requêtes adapté au modèle logique
 Exécution (on en parle un peu) et optimisation (on n’en parle pas) de ces
requêtes
Introduire le modèle relationnel

 Il me parait plus naturel de venir au modèle relationnel


comme une manière d’implémenter un modèle
conceptuel plutôt que de le poser de manière ad-hoc.
 Le modèles conceptuel est une manière de représenter
de données à gérer :
Les (systèmes de gestion des) bases de données ne résolvent
pas des problèmes particuliers, mais permettent de gérer
n’importe quelle sorte de données concrètes.
 Le modèle relationnel d’une base de données se déduit
simplement d’un modèle entité-association.
Modélisation à plusieurs niveaux

Réel
Indépendant du
Modèle modèle de données
Indépendant du
conceptuel SGBD Médecin effectue Visite

Dépendant du
Modèle modèle de données
Relationnel Objet XML
Indépendant du
logique SGBD

Dépendant du
Modèle modèle de données
 Organisation physique des données
 Structures de stockage des données
Dépendant du
Physique SGBD
 Structures accélératrices (index)
1. Objectifs de la Modélisation

 Permettre une meilleure compréhension


 Le monde réel est trop complexe
 Abstraction des aspects cruciaux du problème
 Omission des détails
 Permettre une conception progressive
 Abstractions et raffinements successifs
 Possibilité de prototypage rapide
 Découpage en modules ou packages
 Génération des structures de données (et de traitements)
Élaborer un modèle conceptuel

 Isoler les concepts fondamentaux


 Que vont représenter les données de la BD ?
 Découvrir les concepts élémentaires du monde réel
 Décrire les concepts agrégés et les sous-concepts
 Faciliter la visualisation du système
 Diagrammes avec notations simple et précise
 Compréhension visuelle et non seulement intellectuelle
Dériver le schéma de la BD
 Schéma
 Définition de tous les types de données de la base et de leurs liens
 Agrégation de données
 Type élémentaire (de base): Entier, Réel, String, ...
 Type complexe (composé): Collection de types élémentaires
 Exemple : Type Personne (nom: String, Prenom: String, age: Réel)
 Possibilité d'intégrer des relations entre données (liens)
 Exemple : Personne  Voitures;
 Le schéma (abstrait) est utilisé pour créer de véritables objets du monde réel
(instantiation)
 Instance ou occurrence : Personne("Dupont", "Jules", 20)
 Ensemble de Voitures {id:String}: Voitures {"75AB75", "1200VV94"}
 Création d’une relation entre une personne et une voiture : "Dupont"  "75AB75"
Méthodes

 Méthodes d'analyse et de décomposition hiérarchiques


 1e génération basée sur des arbres fonctionnels
 Diviser pour régner (Problème --> Sous-problème)
 Warnier, SADT, Jackson, De Marco
 Méthodes d'analyse et de représentation systémiques
 2e génération basée sur entité-association
 Séparation des données et traitements
 Merise, Axial, SSADM
 Méthodes d'analyse et de conception orientées objets
 3e génération basée sur les objets
 Réconciliation données et traitements
 Réutilisation de composants
2. Le Modèle Entité – Association
(E/R Model)
 Ensemble de concepts pour modéliser les données d'une
application (d'une entreprise)
 Ensemble de symboles graphiques associés

 Formalisé en 1976 par Peter Chen dans :


The Entity-Relationship model, towards a unified view of data, in
ACM Transactions on Database Systems, 1(1), pp 9-36, 1976
 Etendu vers E/R généralisé puis vers l'objet
Un exemple de modèle Entité-Association
Attribut Attribut Attribut
Marque Date
Nom
Attribut
NP Cardinalité Cardinalité
1..* 0..*
Entité Produit Achete Client Entité
produit acheteur
Rôle Association Rôle
Cardinalité produit
1..*
Rôle Attribut
Remise Attribut
Prenom
Association Vend Attribut
Nom
Attribut
Cardinalité Prix
1..* vendeur Clés Primaires :
Rôle - (NP) clé de Produit
Entité Fournisseur - (NF) clé de Fournisseur
- (Nom, Prénom) clé de Client
Attribut Attribut Attribut
B. Nguyen NF Nom Région
A- Classe d’Entité

 Un objet du monde réel qui peut être identifié et que l'on


souhaite représenter
 La classe d'entité correspond à une collection d'entités décrites
par leur type commun (le format)
 L'instance d'entité correspond à un élément particulier de la
classe d'entité (un objet)
 Attention: on dit entité pour les deux ! Comprendre selon le
contexte.
 Il existe généralement plusieurs instances d’entités dans
une classe d’entité.
Attribut

 Description des propriétés des entités


 Toutes les instances d'une entité ont les mêmes attributs
 Attribut simple: attribut ayant une valeur d'un type de base
 Attribut composé: attribut constitué d'un groupe d'attributs
 Attribut multi-valué: attribut pouvant avoir plus d'une valeur
 Avec le modèle E/R de base tout attribut est simple
 Avec le modèle E/R étendu, les attributs peuvent etre
complexes
 Composés et multi-valués (voir pbs de normalisation, HP)
Identifiant ou Clé

 Un identifiant aussi appelé clé est un attribut qui permet de retrouver une
instance d'entité unique à tout instant parmi celles de la classe.
 Exemple: NVeh dans Voitures, NSS dans Personnes

 Un identifiant peut être constitué de plusieurs attributs (clé composée)


 Exemple:

 [N° , Rue, Ville] pour Maisons


 [Nom, Prénom] pour Personnes
 Clés candidates et clés primaires
 Une clé candidate est un ensemble d’attributs permettant d’identifier de

manière unique une instance d’une entité


 Parmi les clés candidates, on en choisit une, qu’on nomme clé primaire qui

va identifier l’entité
B- Association

 Les entités sont reliées ensemble par des associations


 Entre instances: par exemple 1 véhicule est associé à 1
personne
 Entre classes: abstraction des associations entre instances
 Une association peut avoir des attributs (propriétés)
 Elle peut relier plusieurs entités ensemble
 Il est possible de distinguer le rôle d'une entité (elle peut
en avoir plusieurs)
Association: quelques définitions

 Association (Association)
 Une relation entre des instances de deux (ou plus) classes
 Lien (Link)
 Une instance d'association
 Rôle (Role)
 Une extrémité d'une association
 Attribut de lien (Link attribute)
 Un attribut de l'association instancié pour chaque lien
 Cardinalité (Multiplicity)
 Le nombre d'instance d'une entité pour chaque instance de l'autre
Cardinalité (max) d'une association

 1:1 Personne Habite Adresse one-to-one

 1:N Personne Possède Voiture one-to-many

 N:M Vendeur Vend Produit many-to-many


Cardinalités min et max
(Notations UML)
 Cardinalité maximum
 Indique le nombre maximum d'instances d'une classe d'entité
participant à une association
 Cardinalité minimum
 Indique le nombre minimum d'instances d'une classe d'entité
participant à une association

1..* 0..7
Etudiant Passe Examen
Domaines

 Ensemble nommé de valeurs


 Un attribut peut prend valeur dans un domaine
 Généralisation des types élémentaires
 Exemples
 Liste de valeurs (1,2,3)
 Type contraint (0< int <100)
 Permettent de préciser les valeurs possibles des attributs
 Réduisent les ambiguïtés
3. Conclusion :
La pratique de la conception
 Bien comprendre le problème à résoudre
 Essayer de conserver le modèle simple
 Bien choisir les noms
 Ne pas cacher les associations sous forme d'attributs
 utiliser les associations
 Faire revoir le modèle par d'autres
 définir en commun les objets de l’entreprise
 Documenter les significations et conventions
 élaborer le dictionnaire
FONDEMENTS THEORIQUES :
LE CALCUL RELATIONNEL &
LE MODELE RELATIONNEL

A relational model of Data For Large Shared Data


Banks
E.F. Codd,
Communications of the ACM (CACM) 13(6), 1970
1923-2003

1. Concepts pour la description


2. Concepts pour la manipulation
3. Concepts additionnels
Langages

 Dans la suite nous allons décrire 3 approches/langages


« équivalentes »
 Le calcul relationnel : langage déclaratif (intentionnel) dérivée de la
logique du premier ordre
 L’algèbre relationnelle : langage impératif (procédural)
 La « syntaxe » Structures Query Language (SQL)
 Les parties « de base » de ces trois langages sont équivalents (au
sens du pouvoir expressif) selon le théorème de Codd (1970)
 Les 3 langages utilisent des concepts proches, et des noms parfois
différents.
1. CONCEPTS DESCRIPTIFS
 Ensemble de concepts pour formaliser la description d'articles de fichiers plats

 Modèle standardisé mais extensible (depuis 1986)


 Introduction de types de données variés (SQL2)
 Introduction de la dynamique (Triggers), des types non scalaires et objets, requêtes
récursives… (SQL3)
 Introduction du XML (SQL:2003)
 SQL:2006 : amélioration du XML
 SQL:2008 : triggers instead of
 Version actuelle : SQL:2011 (fenetres glissantes, support du temporel)
Les concepts

 Domaine D (ou type)


 Les entiers, les chaînes de caractères de longueur 32, les pays, les couleurs aux cartes, etc.
 Attribut : un couple nom/domaine (= Colonne en SQL)
 Variable de relation : un ensemble ordonné d’attributs (sert d’entête à une relation)
 (Nom:String, Age:Int)
 Tuple (n-uplet) : un ensemble ordonné de couples attribut/valeur (= Rangée ou Row en
SQL)
 (Nom: Toto, Age : 18)
 Relation : un ensemble de tuples (= Table en SQL)
Etudiants Nom Age
Toto 18
Titi 22
Tata 20
Définitions 1/2
 Soit D={Di} un ensemble de domaines.
String, int, etc.
 Soit C un ensemble (fini) d’attributs Ai (colonnes) sur des domaines Di
C={NOM:string, PRENOM: string, NC:int, …}
 Soit R un ensemble fini de noms de relations.
R={RESPONSABLE, COURS, ETUDIANT, INSCRIT}
 Soit h une fonction R2C qui à une relation associe un sous ensemble de C.
h(RESPONSABLE)={NR:int, NOM:string, PRENOM:string}

 On dit que S=(D, R, h) est un schéma relationnel.
e.g.
RESPONSABLE (NR:int, NOM:string, PRENOM:string)
COURS (NC:int, CODE_COURS:string, INTITULE:string)
ETUDIANT (NE:int, NOM:string, PRENOM:string)
INSCRIT (NE:int, NC:int,ANNEE:int)
Définitions 2/2

 Un tuple (ou n-uplet) est défini comme une fonction partielle de


CD0D1… (i.e. cette fonction donne une valeur à un attribut)
t1=(NE: 123456, NOM: « LEGRAND » , PRENOM: « Marie »)
 Le sous ensemble de C sur lequel t est défini est appelé domaine
de t et noté dom(t).
 L’ensemble de tous les tuples possibles (sur D) est noté TD
 Etant donné un schéma S=(D, R, h), une base de données
relationnelle DB est définie comme une fonction de R2TD qui
associe à chaque relation r de R un sous-ensemble fini de TD tel
que pour chaque tuple t de ce sous-ensemble h(r)=dom(t)
La Clé : un concept fondamental

 GROUPE D'ATTRIBUTS MINIMUM QUI DETERMINE UN TUPLE


UNIQUE DANS UNE RELATION = clé « candidate »
 Exemples:
 Ajouter NUMETU dans ETUDIANTS
 …ou bien un ensemble d’attributs dont la valeur est unique!
 CONTRAINTE D'ENTITE
 Toute relation doit posséder au moins une clé
 Dans un SGBD, pour chaque relation une clé (la plus simple possible) est
choisie, et est appelée clé primaire de la relation.
 Si on définit pas de clé, alors on pourrait penser que canoniquement l’ensemble des
attributs composant le domaine de la relation sera une clé. (pas tout à fait vrai :
SQL gère des multi-ensembles)
Notations
 NOM DE LA RELATION, LISTE DES ATTRIBUTS AVEC DOMAINES, ET
LISTE DES CLES D'UNE RELATION
 Exemple:
 ETUDIANTS(NE: Int, NOM:texte, DATENAISS:entier, VILLE:texte, SECTION:texte)
 Par convention, seule la clé primaire est soulignée
 INTENTION ET EXTENSION
 Un schéma de relation définit l'intention de la relation
 Une instance de table représente une extension de la relation
 SCHEMA D'UNE BD RELATIONNELLE
 C'est l'ensemble des schémas des relations composantes
 PLUS DES CONTRAINTES (HP)
 Contraintes d’intégrité
 Dépendances fonctionnelles
Clé Étrangère (HP)

 GROUPE D'ATTRIBUTS DEVANT APPARAÎTRE COMME


CLÉ DANS UNE AUTRE RELATION
 Les clés étrangères définissent les contraintes d'intégrité
référentielles
 Lors d'une insertion, la valeur des attributs doit exister dans la relation
référencée
 Lors d'une suppression dans la relation référencée les tuples référençant
doivent disparaître
 Elles correspondent aux liens entité-association obligatoires
Dépendance fonctionnelle (HP)
 Permet d’indiquer que certains attributs dépendent d’autres attributs
 e.g. La valeur de la prime d’un employé dépend de son poste
 i.e. SECTIONDEPARTEMENT ou (PRODUIT, QUANTITE)  PRIX

 Formes normales : on divise la relation en attributs clé et attributs non clé


 1ère forme normale
 Tous les attributs sont monovalués (et la relation doit avoir une clé)
 2 forme normale
e

 Les attributs non clé ne peuvent pas dépendre d’un sous-ensemble d’une clé candidate
 3e forme normale
 Les attributs non clé ne peuvent pas dépendre d’un sous-ensemble d’attributs non clé
 Boyce-Codd NF
 Les attributs clé ne peuvent pas dépendre d’un sous-ensemble d’attributs non clé.

« The key, the whole key, nothing but the key, so help me Codd »

Permet de réaliser un « bon » schéma relationnel (éviter les redondances, et donc les problèmes de mise
à jour).
Par contre ça demande de faire plus de jointures …
Exemple de Schéma

 EXEMPLE
ETU(NE,1..1
NOM, DATENAISS, VILLE)
0..*
SECTION (NS, NOMSEC,
ETUDIANT INSCRITDEPARTEMENT)SECTION
INSCRIPTION(NE, NS, ANNEE, FRAIS)
NE  CLES
NOMETRANGERES
DN NS DPT
INSCRIPTION.NE REFERENCES ETU.NE NOM
VILLE ANNEE FRAISSECTION.NS
INSCRIPTION.NS REFERENCES
 CLES CANDIDATES
 UNIQUE(SECTION.NOMSEC)
Synthèse :
Syntaxe SQL
 CREATION DES TABLES EN SQL Les tables sont la plupart
CREATE TABLE <relation name>
(<attribute definition>+)
du temps créées via une
[{PRIMARY KEY | UNIQUE} (<attribute name>+)] interface.
 avec :
<attribute definition> ::= <attribute name> <data type> Le code SQL sert à les
[NOT NULL [{UNIQUE | PRIMARY KEY}] ]
 Exemple :
créer« automatiquement »
CREATE TABLE ETU
( NE INTEGER PRIMARY KEY,
NOM VARCHAR (32),
DATENAISS INTEGER NOT NULL,
VILLE VARCHAR(64) )
Pourquoi tout ce blabla sur le modèle
E/R ??
Méthodologie pour implémenter des entités et associations sous forme de
tables

1. Transformer toutes les relations n-aires en relations binaires


2. Chaque entité devient une table
3. Les attributs correspondent aux colonnes des tables
1. nom attribut  nom colonne
2. Ensemble de valeurs  domaine
3. Clé primaire E/A  Clé primaire de la table
4. Clé candidate E/A  Contrainte UNIQUE de la table
Traduction des associations
 Règle de base
 Une association est représentée par une table dont le schéma est le nom de
l'association et la liste des clés primaires des entités participantes suivie des
attributs de l'association. Ces clés primaires deviennent des clés étrangères de cette
nouvelle table.
 Exemples :
 ACHETE (numproduit, numClient, Date)
 FOURNIT (NumFournisseur, NumProduit, Prix, Remise)
 Amélioration possible
 Regrouper les associations 1:N --> 1:1 avec la classe cible
 Exemple :
 VOITURE (N°VEH, MARQUE, TYPE, PUISSANCE, COULEUR)
 POSSEDE (N° SS, N° VEH, DATE , PRIX )
 regroupées si toute voiture a un et un seul propriétaire
2. CONCEPTS
MANIPULATOIRES
 Un ensemble d’expressions formelles
 Calcul relationnel (déclaratif = impossible à implémenter, facile à énoncer)
 Algèbre relationnelle (procédural = possible à implémenter, dur à énoncer)
 Ces opérations permettent d'exprimer toutes les requêtes sous
forme d'expressions algébriques qui pourront être exécutées et
optimisées
 Elles sont la base du langage SQL qui est un langage déclaratif
 Paraphrasage en anglais des expressions du calcul relationnel
 Ces opérations sont extensibles
Les requêtes du calcul relationnel

 Le calcul relationnel se décline de deux manières


 Calcul relationnel de tuples
 Calcul relationnel de domaines
 Ce sont des fragments de la logique du premier ordre

e.g.
ne, nometu, date, ville | Etudiant(ne, nometu, date, ville) ns,
nomsec | Section(ns, nomsec) annee | Inscrit(ne, ns, annee)
Calcul Relationnel :
Atomes
 Les formules atomiques (ou atomes) sont des formules terminales
(i.e. elles n’incluent aucune autre proposition)
 Soit V un ensemble de variables (à valeurs dans l’ensemble des
tuples)
 Les atomes autorisés sont les suivants :
 si vV, wV, adom(v), bdom(w) alors v.a = w.b est un atome
 e.numetu = i.numetu
 si vV, adom(v), kD alors v.a = k est un atome
 e.ville = Versailles
 si vV, rR, dom(v)=h(r) alors r(v) est un atome
 Etudiant(e)
 La sémantique formelle est définie étant donnée une base de
données et une affectation des variables à des tuples.
Calcul Relationnel :
Formules et Requêtes
 Les atomes peuvent être combinées en formules selon la
grammaire suivante :
 Atome = {v.a = v.b | v.a = k | r(v)}

Formule = {Atome | Formule1 Formule2 | Formule1 Formule2 |
Formule1 | v:H (Formule1) | v:H (Formule1)}
 ∀ t : {ne, nom, prenom, ville} ( Etudiant(t) ∧ t.nom = « Toto » ∧ ¬ ( t.ville =
« Paris »)
Signifie : tous les étudiant s’appelant Toto habitent ailleurs qu’à Paris
 Une requête est de la forme :
 {v : H | Formule(v)}
 {e : {nom} | t : {ne, nom, prenom, ville} (t.nom = e.nom ∧ Etudiant(t) ∧
t.ville = « Versailles »}
Signifie : Trouver le nom de tous les étudiants habitant Versailles
/!\ On ne gère pas les agrégats, il faut étendre le formalisme
A quoi ça sert ?

A EXPRIMER FACILEMENT DES REQUETES !


(pour des mathématiciens/logiciens )

Comme c’est pas si simple pour le commun des mortels,


on a inventé SQL ! (on va voir ça plus tard)
Les opérations de l’algèbre
relationnelle
Opérations Ensemblistes Classiques

 Opérations binaires pour des relations de même schéma


 UNION notée 
 INTERSECTION notée 
 DIFFERENCE notée —
 Opérations binaires pour des relation de
schémas différents
 Produit cartésien
 Pas d’opérations unaires
 Extension
 Union externe pour des relations de schémas différents
 Ramener au même schéma avec des valeurs nulles
Exemple de Produit Cartésien

R=ETU × INFOVILLE

ETU NOM DN INFOVILLE NOMV DPT


VILLE ANNE 1991 VERSAILLES 78

×
VERSAILLES
BERNARD 1993 PARIS PARIS 75
CELINE 1993 PARIS
DAVID 1991
R VERSAILLES NOM DN VILLE NOMV
DPT ANNE 1991 VERSAILLES VERSAILLES
78
ANNE 1991 VERSAILLES PARIS
75
BERNARD 1993 PARIS VERSAILLES
78
BERNARD 1993 PARIS PARIS
75
CELINE 1993 PARIS VERSAILLES
Projection

 Elimination des ETU NOM DN


attributs non désirés VILLE ANNE
BERNARD
1991
1993
VERSAILLES
PARIS
et suppression des CELINE 1993 PARIS
DAVID 1991 VERSAILLES
tuples en double EMILIE 1993 VELIZY

 Relation  Relation
notée:  DN,VILLE (ETU)
 A1,A2,...Ap (R) DN,VILLE(ETU) DN VILLE
1991 VERSAILLES
1993 PARIS
1993 VELIZY
Restriction

 Obtention des tuples de R satisfaisant un critère Q


 Relation  Relation, notée Q(R)
 Q est le critère de qualification de la forme :
 Ai Valeur
  { =, <, >=, >, <=, !=}

 Il est possible de réaliser des "ou" (union) et des "et"


(intersection) de critères simples
Exemple de Restriction

ETU NOM DN
VILLE ANNE 1991
VERSAILLES
BERNARD 1993 PARIS
CELINE 1993 PARIS
DAVID 1991
VERSAILLES
EMILIE 1993 VELIZY

DN>1992 (ETU)

ETU NOM DN
VILLE BERNARD 1993 PARIS
CELINE 1993 PARIS
EMILIE 1993 VELIZY
Jointure
 Composition des deux relations sur un domaine commun
 Relation X Relation ->Relation
 notée
 Critère de jointure
 Attributs de même nom égaux :
 Attribut = Attribut
 Jointure naturelle
 Se fait en principe en utilisant une clé étrangère !!!
 Comparaison d'attributs :
 Attribut1 Attribut2
 Théta-jointure
 La jointure peut se voir comme un produit cartésien, combiné à une
restriction sur l’attribut de jointure, puis d’une projection pour éliminer
l’attribut doublon.
Exemple de Jointure
ETU NOM DN
VILLE ANNE 1991
VERSAILLES
BERNARD 1993 PARIS
CELINE 1993 PARIS
DAVID 1991
VERSAILLES R=ETU INFOVILLE
INFOVILLE NOMV DPT
VERSAILLES 78 ETU.VILLE = INFOVILLE.NOMV
ETU.VILLE = INFOVILLE.NOMV
PARIS 75

R NOM DN VILLE DPT


ANNE 1991 VERSAILLES 78
BERNARD 1993 PARIS 75
CELINE 1993 PARIS 75
DAVID 1991 VERSAILLES 78
Jointure et Produit Cartésien

R1 R2 Équivaut à : A=B(R1 × R2)


A=B

R NOM DN VILLE NOMV


DPT ANNE 1991 VERSAILLES VERSAILLES
78
ANNE 1991 VERSAILLES PARIS
75
BERNARD 1993 PARIS VERSAILLES
78
BERNARD 1993 PARIS PARIS
75
CELINE 1993 PARIS VERSAILLES
78
CELINE 1993 PARIS PARIS
75
DAVID 1991 VERSAILLES VERSAILLES
78
À quoi ça sert ?

À EXÉCUTER
 Une expression de l’algèbre relationnelle peut se lire de manière
fonctionnelle comme un plan d’exécution de la requête. i.e. si on
a implémenté les opérateurs de l’algèbre relationnelle, et qu’on
utilise des structures de type relation il me suffit de les appeler en
passant en paramètre les relations en question !
 Les plans sont souvent représentés sous forme d’arbre.
À OPTIMISER
 Il est important de noter que certaines opérations sont
commutatives, c’est la base de l’optimisation des requêtes.
Pourquoi ça marche ?
Complétude Relationnelle
 Théorème de Codd : l'algèbre relationnelle a un pouvoir expressif équivalent
à celui du calcul relationnel. (article Relational completeness of data base
sublanguages)

 Les cinq (sept) opérations de base permettent de formaliser sous forme d'expressions toutes
les questions que l'on peut poser avec la logique du premier ordre.
 Exemple :
 Nom et Section des étudiants de Versailles nés en 1991 ?
Algèbre Relationnelle :
NOM, NOMSEC (DATEN=1991 ET VILLE=« VERSAILLES »(ETU INSCR SECTION)

Calcul Relationnel :
{t:{nom, nomsec} | e:{ne, nom, ville, datenaiss}, i:{ne, ns},s:{ns, nomsec} (t.nom = e.nom
t.nomsec = s.nomsec i.ne=e.ne i.ns=s.ns e.datenaiss = 1991 e.ville =
« Versailles »)
Et SQL ?
 Une requête SQL (donc une description en langage « naturel ») peut se traduire sous la forme
d’une expression de l'algèbre relationnelle (en fait SQL va plus loin : en particulier avec les
agrégations)
 Requête élémentaire :
SELECT A1, A2, …Ap
FROM R1, R2, …Rk
WHERE Q [{UNION |INTERSECT | EXCEPT } … ]
 Sémantique du bloc select :
A1,A2,…Ap ( Q (R1 × R2 ×… × Rk) ) )

/!\ UN PRODUIT CARTÉSIEN N’EST PAS UNE JOINTURE !!!

 Et pourtant SQL est déclaratif … ?


{t:{A1, A2, … An} | x1:{…}, x2:{…}, …xn:{…}k (Q(t, x1, x2,…xn) 
LIEN(t, x1, x2, …xn)}

 Tout le problème réside dans la manière de calculer Q !


Principe de fonctionnement
du moteur d’exécution du SGBD
1. On écrit sa requête en SQL
2. Cette requête a une sémantique formelle donnée par le
calcul relationnel
3. Cette requête est traduite (et optimisée) en utilisant
l’algèbre relationnelle
Exemple d’exécution et optimisation
(HP)
Selection Projection

M.labo=‘ROCHE’ V.med_id, V.labo

Jointure
Différence
R S _
R.a = S.b

R S
Produit
Cartésien Union
X U

R R S
S
Ex. Plan d’exécution candidat (1)
R
Requête
« Nom et prénom des patients nom_patient
prénom_patient
visités dans le Béarn à qui on a
prescrit des médicament du
laboratoire ROCHE de numéro de labo = “Roche"
label = 17 après le 20 août 2006 » ^ Region = “Béarn"
^ date > "20/08/2006"
^ label = 17

med_id med_id
=

vis_id vis_id
=

V P M

Plan candidat N°1


Ex. Plan d’exécution candidat (2)
Plan candidat N°2 Plan candidat N°3
R R

nom_patient nom_patient
prénom_patient prénom_patient

med_id med_id vis_id vis_id


= =

vis_id vis_id med_id med_id


= =

Region = date> labo = “Roche"


“Béarn" "20/08/2006" ^ label = 17 labo = “Roche"
Region = date >
“Béarn" "20/08/2006" ^ label = 17

V P M
V P M

De ces 3 arbres, lequel est le meilleur ?


Ex. Plan d’exécution candidat (2)
Plan candidat N°2 Plan candidat N°3
R R

nom_patient nom_patient
prénom_patient prénom_patient

med_id med_id vis_id vis_id


= =

vis_id vis_id med_id med_id


= =

Region = date> labo = “Roche"


“Béarn" "20/08/2006" ^ label = 17 labo = “Roche"
Region = date >
“Béarn" "20/08/2006" ^ label = 17

V P M
V P M

De ces 3 arbres, lequel est le meilleur ?

Le premier est sûrement moins bon, mais les 2 derniers ?


3. CONCEPTS ADDITIONNELS
 Ensemble de concepts pour :
 Etendre les fonctionnalités de manipulation
 Décrire les règles d'évolution des données
 Supporter des objets complexes (SQL3)

 Introduits progressivement dans le modèle :


 Complique parfois le modèle
 Standardisés au niveau de SQL3 (1999)
 Des extensions multiples …
Renommage

 Pour changer le nom d’une colonne.


 Notation simple en algèbre relationnelle:
AB (R)
 Exemple : ETU2 = DNDATEN (ETU1)

ETU1 NOM DN ETU2 NOM DATEN


VILLE BERNARD 1993 PARIS VILLE BERNARD 1993 PARIS
CELINE 1993 PARIS CELINE 1993 PARIS
EMILIE 1993 VELIZY EMILIE 1993 VELIZY
Fonctions et Agrégats

 FONCTION
 Fonction de calcul en ligne appliquée sur un ou plusieurs attributs
 Exemple : MUTUELLE = FRAIS*15/100
 AGREGAT
Partitionnement horizontal d'une relation selon les valeurs d'un groupe
d'attributs (Bi), suivi d'un regroupement par une (ou plusieurs)
fonction(s) Fi de calcul en colonne (SUM, MIN, MAX, AVG, COUNT,
…) sur les attributs Ci respectifs
 NOTATION : gamma minuscule
B , B , … ,B
1 2 N F1(C1), (R)
F2(C2), …,FN(CN)
B. Nguyen
Ensemble des colonnes 70
Exemples d'agrégats
ETU NOM AGE
VILLE ANNE 21 VERSAILLES
BERNARD 19 PARIS
CELINE 19 PARIS
DAVID 20 VERSAILLES

AVG(AGE)(ETU) 
VILLE MAX(AGE) (ETU)
SQL :
AVG(AGE) SQL :
SELECT AVG(AGE) 19.75
SELECT VILLE, MAX(AGE
FROM ETU;
VILE MAX(AGE)
FROM ETU
/!\ le HAVING se fait VERSAILLES 21 GROUP BY VILLE;
tout simplement avec un  PARIS 19
Vue (HP)
 Relation d'un schéma externe déduite des relations de la base par une question
 Exemple : Etudiants Versaillais

CREATE VIEW ETUVERSAILLAIS AS


SELECT NE, NOM, NOMSECTION
FROM ETU E, INSCRIPTION I, SECTION S
WHERE E.NE = I.NE AND I.NS=S.NS
AND E.VILLE = « VERSAILLES »

 Calcul de la vue
 Une vue est une fenêtre dynamique sur la BD et est recalculée à chaque accès.
 Une vue peut être matérialisée (vue concrète) pour accélérer les calculs l’utilisant. Dans ce
cas, le SGBD doit être capable de savoir quand recalculer la vue.
Déclencheur (Trigger) (HP)
 Action base de données déclenchée suite à l'apparition d'un événement
particulier
 Forme :
 {BEFORE | AFTER} <événement> THEN <action>
 Un événement peut être :
 une opération sur une table (début ou fin)
 un événement externe (heure, appel,etc.)
 Une action peut être :
 une requête BD (mise à jour)
 Une annulation (abort) de transaction
 l'appel à une procédure cataloguée
Déclencheur avec condition (Règle)
(HP)
 Il est possible d'ajouter une condition afin de déclencher l'action
seulement quand la condition est vérifiée
 Une condition est une qualification portant sur la base.
 Exemples :
BEFORE UPDATE EMPLOYE
IF SALAIRE > 100.000
THEN ABORT TRANSACTION
4. CONCLUSION

 Un ensemble de concepts bien compris et bien formalisés


 Un modèle unique, riche et standardisé
 intégration des BD actives
 intégration des BD objets
 intégration des BD XML
 Un formalisme qui s'étend plutôt bien
 algèbre d'objets
 Un langage associé défini à plusieurs niveaux
 SQL1, 2, 3, 2003, etc.
LES REQUETES PAR L’EXEMPLE
SQL, Calcul Relationnel, Algèbre Relationnelle

Origines et Evolutions
SQL1 86: la base
SQL1 89: l'intégrité
Jim Melton (Oracle)
Editeur de la norme SQL
1. Origines et Evolutions
 SQL est une manière simple d’écrire une formule (requête) du
calcul relationnel. Tout comme le calcul relationnel, une requête
SQL peut être traduite en un expression de l’algèbre
relationnelle.
 Il existe plusieurs versions normalisées, du simple au complexe :
 SQL-86 version minimale
 SQL-89 addendum (intégrité)
 SQL2 (92) langage complet
 SQL3 (99) aspects objet, triggers
 SQL:2003 introduction d’aspects XML
 SQL:2006 intégration du début de XQuery
 SQL:2008 modifications mineures (instead of, truncate)
 SQL:2011 améliorations XQuery
 La plupart des systèmes supportent SQL2 ou SQL3
Opérations
 Opérations de base
 SELECT, INSERT, UPDATE, DELETE
 /!\ Seul le SELECT (ou « SFWGH ») correspond au Calcul
Relationnel. SQL est « relationnellement complet » (permet
d’exprimer toutes les requêtes du Calcul et de l’Algèbre.
 Opérations additionnelles
 définition et modification de schémas
 définition de contraintes d'intégrité
 définition de vues
 accord des autorisations
 gestion de transactions
Organisation du Langage

SQL comprend quatre parties :


1. Le langage de définition de schéma (Tables, Vues,
Droits)
2. Le langage de manipulation (Sélection et mises à
jour)
3. La spécification de modules appelables (Procédures)
4. L'intégration aux langages de programmation
(Curseurs)
SQL 86
 LANGAGE DE DEFINITIONS DE DONNEES
 CREATE TABLE
 CREATE VIEW
 LANGAGE DE MANIPULATION DE DONNEES
 SELECT OPEN
 INSERT FETCH
 UPDATE CLOSE
 DELETE
 LANGAGE DE CONTROLE DE DONNEES
 GRANT et REVOKE
 BEGIN et END TRANSACTION
 COMMIT et ROLLBACK
 SQL EST « COMPLETEMENT UTILISABLE »
Base de Données

 Collection de tables et de vues dans un schéma


TABLES
RESPONSABLE (NR, NOM, PRENOM, DPT)
COURS (NC, CODE_COURS, INTITULE, ECTS, NR, DPT)
ETUDIANT (NE, NOM, PRENOM, VILLE, AGE)
INSCRIT (NE, NC,ANNEE)
RESULTAT (NE, NC, ANNEE, NOTE)
VUES
ADMIS (NE, NC, ANNEE)
COURS_DPT (DPT, NC, INTITULE)
Schéma E/A “allégé”
(sans attributs, rôles)
1..1 1..* 1..*
RESPONSABLE COURS
RESP. 1..*
INSC.

0..* RESU.
0..*
ETUDIANT
2. SELECT: Forme Générale
SELECT <liste de projection>
FROM <liste de tables>
[WHERE <critère de jointure> AND <critère de restriction>]
[GROUP BY <attributs de partitionnement>]
[HAVING <citère de restriction>]
 Restriction :
 arithmétique (=, <, >, <>)
 textuelle (LIKE)
 sur intervalle (BETWEEN)
 sur liste (IN)
 Possibilité de blocs imbriqués par :
 IN, EXISTS, NOT EXISTS, ALL, SOME, ANY
Forme générale de la condition
<search condition> ::= [NOT]
<nom_colonne>  constante  <nom_colonne>
<nom_colonne> LIKE <modèle_de_chaîne>
<nom_colonne> IN <liste_de_valeurs>
<nom_colonne>  (ALL ANY SOME) <liste_de_valeurs>
EXISTS <liste_de_valeurs>
UNIQUE <liste_de_valeurs>
<tuple> MATCH [UNIQUE] <liste_de_tuples>
<nom_colonne> BETWEEN constante AND constante
<search condition> AND  OR <search condition>
avec
::= < = >   
Remarque: <liste_de_valeurs> peut être dynamiquement déterminée par une requête
Exemples de Questions (1)
 Q1: Liste des nom,(T:{NOM,
prenom des PRENOM}|E:{NOM,
étudiants PRENOM
(ETUDIANT(E) E.NOM =
SELECT NOM, PRENOM T.NOM
E.PRENOM=T.PRENOM)
FROM ETUDIANT E
 Q2: Noms des étudiants inscrits en IN311 en 2007 ou 2008
 SELECT NOM Projection
× (T:{NOM}|E:{NOM,
FROM ETUDIANTS E, COURSNE}(C:{NC,
C, INSCRIT I NE, CODE_COURS}(
Produit cartésien
I:{NC,
WHERENE, ANNEE}(ETUDIANT(E) COURS(C)INSCRI
E.NE = I.NE
T.NOM=E.NOM
AND I.NC = C.NC ATTRIBUTS DE JOINTURE
E.NE=C.NEC.NC=I.NCE.NE=I.NE
AND C.CODE_COURS LIKE '%IN311%' ATTRIBUTS

 I.ANNEE=2007I.ANNEE=2008)
AND I.ANNEE IN (2007, 2008) 
DE RESTRICTION
C.CODE_COURS=« IN311 »)))
Avec la jointure dans le FROM

 Q2: Noms des étudiants inscrits en IN311 en


2011 ou 2012
SELECT NOM
FROM (ETUDIANTS E JOIN INSCRIT I ON E.NE
=I.NE) JOIN COURS C ON I.NC=C.NC
WHERE
 C.CODE_COURS LIKE '%IN311%'
AND I.ANNEE IN (2011, 2012)
Exemples de Questions (2)
 Q3 : Noms et prénoms des étudiants inscrits à des cours dont le code
commence par IN, entre 2009 et 2012.
 SELECT NOM, PRENOM
× FROM ETUDIANT E, INSCRIT I, COURS C
WHERE E.NE = I.NE AND I.NC = C.NC
 AND C.CODE_COURS LIKE "IN%"
AND (I.ANNEE BETWEEN 2009 AND 2012)
 Q4 : Code des modules suivis par au moins un etudiant. (requête imbriquée)
SELECT C.CODE_COURS
(T:{CODE_COURS}|E:{NOM,
FROM COURS C NE}(C:{NC, NE,
CODE_COURS}(I:{NC,
WHERE EXISTS ( SELECT * NE, ANNEE}( Sous
ETUDIANT(E) COURS(C)INSCRIT(I)
FROM ETUDIANT E, INSCRIT I
requête
WHERE E.NE = I.NE AND I.NC = C.NC )
T.CODE_COURS=C.CODE_COURS
E.NE=C.NEC.NC=I.NCE.NE=I.NE)
Exemples de requêtes agrégat les
p u
e T
 Q5 : Calculez la moyenne de chaquenétudiant, e l d
t i o n
référencé par son NE
e l a
SELECT E.NE, AVG(R.NOTE)
etAVG(R.NOT
u l R
E)
FROM ETUDIANT E, a c
lRESULTAT R
u C
WHERE E.NE
l à d
= R.NE
 GROUP -d e
BY E.NE

E.NE

t a u
e s
HAVING COUNT(DISTINCT R.NC) >= 5
O n
Pour les étudiants ayant suivi plus de 5 modules …
Exemples de requêtes agrégat

 Q5’ : Calculez la note maximale de chaque


module, référencé par son NC
etMAX(R.NOT SELECT C.NC, MAX(R.NOTE)
E)
FROM COURS C, RESULTAT R
WHERE C.NC = R.NC
E.NE  GROUP BY C.NC
 HAVING COUNT(DISTINCT R.NE) >= 15

Pour les modules de plus de 15 étudiants…


Exemples de Requêtes agrégat
 Q6: Calculer l’age du plus jeune étudiant
et(AGE) SELECT MIN(AGE)
FROM ETUDIANT

 Q7 : Calculer le nombre d’étudiants, ainsi que l’age de l’étudiant


le plus vieux reçus par module, pour les modules du dpt INFO
dont la moyenne globale est supérieure à 12.
etCOUNT(*), MAX(AGE) SELECT C.NC, COUNT(*), MAX(E.AGE)
× FROM ETUDIANT E, RESULTAT R, COURS C
WHERE E.NE = R.NE AND R.NC = C.NC
 AND C.DPT = "INFO"
C.NC GROUP BY C.NC
HAVING AVG(R.NOTE) > 12
Requêtes agrégat et fonctions

 Q8 : Donnez le nombre d’ECTS obtenus par chaque


étudiant, référencé par son NE, dans une colonne
appelée CREDITS.
SUM(R.ECTS)
CALCUL DE FONCTION  CREDITS

SELECT E.NE, SUM(R.ECTS) AS CREDITS


FROM ETUDIANT E, RESULTAT R

WHERE E.NE = R.NE
AND R.NOTE >= 10
GROUP
/!\ ICI ON BY E.NE PAS EN COMPTE LA COMPENSATION !
NE PREND
Requêtes agrégat et fonctions
 Q8’ : Donnez le nombre d’ECTS obtenus par chaque
étudiant, référencé par son NE, dans une colonne
appelée CREDITS.

SELECT E.NE, SUM(R.ECTS) AS CREDITS


FROM ETUDIANT E, RESULTAT R
WHERE E.NE = R.NE
GROUP BY E.NE
 HAVING AVG(R.NOTE) >= 10
/!\ COMBIEN D’ECTS A L’ETUDIANT S’IL N’A PAS LA MOYEN
AU SEMESTRE ?
Requêtes agrégat et fonctions
Q9 : SELECT CALCUL.NE, MAX(CALCUL.CREDITS)
FROM
( SELECT E1.NE, SUM(R.ECTS) AS CREDITS
FROM ETUDIANT E1, RESULTAT R1
WHERE E1.NE = R1.NE
AND R1.NOTE >= 10 Peut on faire sans union
GROUP BY E1.NE
UNION
SELECT E2.NE, SUM(R2.ECTS) AS CREDITS
FROM ETUDIANT E2, RESULTAT R2
WHERE E2.NE = R2.NE
GROUP BY E2.NE
HAVING AVG(R2.NOTE) >= 10 ) AS CALCUL
GROUP BY CALCUL.NE
Requêtes agrégat et fonctions
CALCUL DE FONCTION
SELECT CALCUL.NE, GREATEST(NORMAL.CREDITS, COMPENSE.CREDITS)
AS CREDITS CREDITS
FROM
( SELECT E1.NE, SUM(R.ECTS) AS CREDITS
FROM ETUDIANT E1, RESULTAT R1
WHERE E1.NE = R1.NE Table « NORMAL »
AND R1.NOTE >= 10
GROUP BY E1.NE ) AS NORMAL,
SELECT E2.NE, SUM(R2.ECTS) AS CREDITS
FROM ETUDIANT E2, RESULTAT R2
WHERE E2.NE = R2.NE Table « COMPENSE »
GROUP BY E2.NE
HAVING AVG(R2.NOTE) >= 10 ) AS COMPENSE
WHERE NORMAL.NE = COMPENSE.NE
CALCUL.NE
GROUP BY CALCUL.NE
Requêtes imbriquées (1)
 Q10: Donner les CODE_COURS des cours qui
n’ont aucun inscrit
SELECT CODE_COURS SELECT CODE_COURS
FROM COURS C FROM COURS C
WHERE C.NC NOT IN WHERE C.NC <> ALL
( SELECT I.NC
( SELECT I.NC
FROM INSCRIT I )
FROM INSCRIT I )

On ne se ressert pas forcément de la requête extérieure


Requêtes imbriquées (2)

 Q11 : Donner le NE des étudiants qui ne suivent


pas tous les cours
SELECT NE
FROM ETUDIANT E
WHERE EXISTS (
SELECT *
FROM COURS C
Requête doublement imbriquée !
WHERE NOT EXISTS (
SELECT *
FROM INSCRIT I
WHERE C.NC = I.NC
AND I.NE = E.NE) )
Utilisation de SQL
depuis un langage de prog.
 Il est très fréquent d’utiliser SQL à partir de
programmes
 Applications C++/Java/etc.
 Applications Web (PHP, etc.)
 L’utilisation de bibliothèques JDBC est
conseillée
 … plus de détails dans le cours sur PHP et Java.
3. Les Mises à Jour (HP)

 INSERT
 Insertion de lignes dans une table
 Via formulaire où via requêtes
 UPDATE
 Modification de lignes dans une table
 DELETE
 Modification de lignes dans une table
Commande INSERT
 INSERT INTO <relation name>
[( attribute [,attribute] … )]
{VALUES <value spec.> [, <value spec.>] …| <query spec.>}
 Exemples
INSERT INTO ETUDIANT (NE, NOM, PRENOM, VILLE, AGE) VALUES
(112, ‘MARTIN’, ‘THOMAS’ , ‘VERSAILLES’, 20)

INSERT INTO RESULTAT (NC,NE, ANNEE, NOTE)


SELECT C.NC, I.NE, 2013 AS ANNEE, 20 AS NOTE
FROM COURS C, INSCRIT I
WHERE C.CODE_COURS = ‘INF311’
AND C.NC = I.NC
Commande UPDATE

UPDATE <relation name>


SET <attribute = {value expression | NULL}
[<attribute> = {value expression | NULL}] …
[WHERE <search condition>]
 EXEMPLE
UPDATE RESULTAT
SET NOTE = NOTE * 1.2
WHERE RESULTAT.NC IN
( SELECT NC
FROM COURS C
WHERE C.CODE_COURS = ‘INF311’ )
Commande DELETE

DELETE FROM <relation name>


[WHERE <search condition>]

 EXEMPLE
DELETE FROM RESULTAT
WHERE NC IN
SELECT C.NC
FROM COURS C
WHERE C.CODE_COURS = ‘INF311’
4. Contraintes d'intégrité

 Contraintes de domaine
 Valeurs possibles pour une colonne
 Contraintes de clés primaires
 Clé et unicité
 Contraintes référentielles(clé étrangères)
 Définition des liens inter-tables
SQL1 - 89 : INTEGRITE

 VALEURS PAR DEFAUT


CREATE TABLE ETUDIANT
( NE INT(5) PRIMARY KEY,
NOM VARCHAR(128),
PRENOM VARCHAR(128),
VILLE VARCHAR(128),
AGE INT(3) CHECK BETWEEN 10 AND 120)
 CONTRAINTES DE DOMAINES
SQL1 - 89 :
Contrainte référentielle
 Clé primaire et contrainte référentielle
CREATE TABLE INSCRIT
( NC INT(5),
NE INT (5),
ANNEE INT(4),
PRIMARY KEY (NC, NE, ANNEE),
FOREIGN KEY (NC) REFERENCES COURS(NC),
FOREIGN KEY (NE) REFERENCES ETUDIANT(NE) )
 Référence en principe la clé primaire
 celle de COURS et celle de ETUDIANT
SQL1 – 89 : Création de table
CREATE TABLE <nom_table>
(<def_colonne> *
[<def_contrainte_table>*]) ;
< def_colonne > ::=
<nom_colonne> < type  nom_domaine >
[CONSTRAINT nom_contrainte
< NOT NULL  UNIQUE  PRIMARY KEY 
CHECK (condition) REFERENCES nom_table (liste_colonnes) > ]
< def_contrainte_table > ::= CONSTRAINT nom_contrainte
< UNIQUE (liste_colonnes) PRIMARY KEY (liste_colonnes)
CHECK (condition)
FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes) >
5. CONCLUSION

 SQL1 est un standard minimum


 Les versions étendues:
 SQL2 = Complétude relationnelle
 SQL3 = Support de l'objet
 SQL:2006 = Extension à XQuery
 Par la suite … pas encore de grande révolution : ajout de
fonctions mineures
 Sont aujourd'hui intégrées dans les grands SGBD
Les grand systèmes de gestion de
bases de données (avril 2014)
 « Commerciaux »
 Oracle version 12c
 IBM DB2 version 10.5
 Microsoft SQL Server 2014
 Sybase ASE 15.7 (SAP)
 « Open Source »
 MySQL v. 5.6 (http://www.mysql.org/) and its clone,
MariaDB 10.0
 Postgres v. 9.3 (http://www.postgresql.org/)
LA NORMALISATION DE SQL
 Groupe de travail ANSI/X3/H2 et ISO/IEC JTC1/SC2
 Documents ISO :
 SQL1 - 86 : Database Language SQL X3.135 ISO-9075-1987
 SQL1 - 89 : Database Language SQL with Integrity Enhancement X3.168 ISO-
9075-1989
 SQL-92 : Database Language SQL2 X3.135 ISO-9075-1992
 SQL:1999 (SQL3)
 SQL:2003 ISO/IEC 9075:2003
 SQL:2006 ISO/IEC 9075-14:2006
 SQL:2008 ISO/IEC 9075:2008
 SQL:2011 ISO/IEC 9075:2011

Vous aimerez peut-être aussi