You are on page 1of 270
INFORMATIQUE AUX CLASSES PREPARATOIRES Marocaines Deuxiéme Année MP/PSI/TSI Cours et exercices corrigés Auteurs Mohamed Lahby Enseignant chercheur & "Ecole Normale Supérieure (ENS) de Casablanca Ancien professeur aux Classes Préparatoites Lycée Technique Mohammedia M’bark Iggane Docteur en informatique Professeur informatique Classes Préparatoires aux grandes écoles Lycée Réda Slaoui - Agadir Ahmed Kanber Enseignant cherchour au Centre de préparation & 'agrégation CRMEF Marrakech Chargé d’inspection aux Classes Préparatoires marocaines Lhoussaine Bouhou Docteur en informatique Professeur d’informatique Classes Préparatoires aux grandes écoles Lycée Lydex - Benguérie Avant Propos Dest (TSP, ce manuel s'inscrit dans le cadre du programme officiel de l'enseignement informatique dans ces é aux éléves de la deuxitme année des Classes préparatoires scientifiques MP, PST et technologiques. classes. Lintéret de cet ouvrage ne réside pas tant dans fe contenu pour lequel les auteurs se sont inspires des ou- -veages et des documents présents dans la toile informatique et dans le commerce, mais plut6t dans Vingénierie pédagogique, la progression et le choix des travaux dirigés issus en grande partie du vécu des auteurs en tant ue professeurs en Classes préparatoires, S'il est relativement facile de trouver des références et des documents consacrés aux différentes notions abordées, il y a relativement pas ou presque pas d'ouvrages adaptés au contexte et au programme des Classes préparatoires marocaines. Ce travail n’aurait pas vu le jour sans le soutien du Ministére de I'Education nationale, représenté par le CNIPE, appuyé par l'attention mobilisatrice du Collectif Prépas qui nous a aecomp: cessus, depuis I'élaboration des programmes et curricula jusqu’aux formations continue: ghiants en Classes préparatoires & partir de 2008. C’est lors dune des sessions de formation continue en 2016, gné dans tous les pro- annuelles des ensei- quill a été décidé d éditer des ouvrages dédiés aux Classes préparatoires marocaines. Le premier ouvrage a été réalisé en 2017, dédi€ aus filitres économiques et commerciales (ECT), Le présent ouvrage s'inscrit dans le méme processus, Un autre ouvrage dsiié aux él@ves de ta premidze année est en cours de réalisation Merci & la Fondation Banque Populaire qui a apporté son concours & ’édition de cet ouvrage. Structure de Vouvrage Le contenu de ce livre est organisé en quatre parties regroupant onze chapitres et un ensemble de problémes et de concours de grandes écoles d’ingénieurs. ‘+ Dans Ia premiére partie « Bases de données », nous allons découvrir la notion dune base de données et les principaux concepts qui s'y rattachent (chapitre 1). Nous présentons, par des exemples, les concepts fondamentaux du modble relationnel et comment ce modéle peut intervenir pour modéliser un probleme ‘el (chapitre 2). Ensuite, nous montrerons comment utiliser l'algebre relationnelle pour répondre aux. equétes des utilisateurs (chapitre 3) Pour fnir, nous apprendrons & traduire en langage SQL, les requétes cobienues & l'aide de l'algebre relationnelle (chapitre 4). Dans fa deuxitme partie, «Algorithmique et programmation avaneées», nous présentons les notions clés d'une fonction récursive (chapitre 5), Nous montrons ensuite comment peut on évaluer la perfor mance d'un algorithme en terme de complexité (chapitre 6). Nous ulisons les deux concepts récursivité et complexité pour implémenter et comparer plusieurs algorithmes de tri (chapitre 7). Nous abordons en- fin deux autres structures de données & S et chapitre 9). ancées les arbres et es graphes avec leurs applications (chapitre Dans ta troisiéme partie, «Ingénierie mu ique et simulation», nous étudions quelques méthodes numériques qui peuvent nous servir dans la résolution approchée d’équatior 10) et aussi dans la résolution approchée des agcomposition LU (chapitee 11). ditférentielles (chapitre stémes linéaires par Ia méthode du pivot de gauss et la + Dans la quatriéme partie, « Problémes et concours», nous allons conclure cet ouvrage avec une série de dix propositions de probltmes et concours dont quatre sont des sujets de Concours National Commun (ne) et six sont des extraits des concours de grandes écoles d'ingénieurs frangaises. Liensemble de ces sujets couvrent chaque théme abordé, dans les différents chapitres. Nous notons enfin que pour chaque chapitre, en plus dun cours détaillé, nous proposons une série dexercices comigés, aii Table des matiéres I BASES DE DoNNEES 1 1 Introduction aux bases de données 3 LA Introduction o.oo veers ce 3 1.2. Etude de cas : Gestion ‘une bibliotheque ‘un centre CPGE et 3 1.3 Notion de base de données. : : 6 1.4 Systéme de gestion de base de données (GBD)... - 6 15 Les différentes architectures d'un SGBD ei eee eee eer 2 Modile relationnel 9 21 Objectif du chapitre .. SPE eee ee eer ecto e ese eae eieeeeet 2.2 Qu’est ce qu’un systéme d'information? . : nr) 23. Lamodélisation conceptuelle 6. 66ers Hie 10 24 Lemodéle relationnel 6.0... eee cere eee ee cee 24.1 Historique et objectifs EE Eee oe eee eerste 24.2. Définitions et Notions de base ves : n 3. Algebre relationnelle a 3.1 Objectif du chapitre ... . a PEE EEE eee See 32 Definition de Palgdhe welstiomelle Bee ESP eet eCe a Spee sceb es ceae0 3.3 Les opérateurs unaires ov eee : prretoiait 331 Lasélectiong...... 5. Sea a cee eee 33.2 Laprojectionn .. 22... eee : 20 3.3.3. Le couplage de la sélection o et a projection 3. . Reece eee recede 334 Lerenommagep .. 6.0. eee eee ee 2 34 Les opérateurs binaires ensemblistes ... . . « x 3.4.1 Union U ra cei sbrapaeeet 2B 342 Intersections... eee e eect eens sees 26 343° Différence~ ... . : eee 3S. Les opérateurs naires ooo eee eee een eee eee eens 29 35.1 Le produit cartésien Xo... ees : 1 3.5.2 Lajointure : 3L 36 Les fonctions d'agrégation 6. ovo veer e eee eee eee eee 2 3.7 Exercices 35 4 Langage SQL 38 4.1 Objectif du chapitte 6.6... EERE tee atte 8B 4.2 Quiestce que le langageSQL 6. eee eee see fires 38 43. Langage de définition de données (LDD).. ss ee ees 39 43.1 Création d'une table 43.2 Suppression d'une table 43.3 Modification @’une table . 44 Langage de manipulation de données (LMD) 4.4.1 Insertion de données 4.4.2 Mise a jourde données . 44.3 Suppression de données 44.4 Interrogation de données... 44.5 Les requétes imbriquées . . . 44.6 Les fonetions d’agrégation 4.5 Le module sqlite3 du python... , 45.1 Introduction eet eeta eat 4.52 Les fonctions supportées parle module sqlite3 453° Exemple ...., ee 46 Exerc ALGORITHMIQUE ET PROGRAMMATION AVANCEES. Récursivité 5.1 Objectif du chapitre 5.2 Concepts de base sur la récurrence 5.2.1 Recurrence en mathématique.. 2. , 5.2.2 Qu’est ce qu'une fonction récursive? 5.2.3, Comment écrite une fonction récursive? . 5.3. Différents types de récursivité 5.3.1 Récursivité simple. . 5.3.2 Récursivité multiple 533. Récursivité imbriquée 5.34 Récursivité mutuelle . . . 5.4 Exécution d'une fonction récursive see ey SAL Lapile des appels 5.4.2 Limitation de la récursivité en Python 55 Bxercices .. eee Complexité algorithmique 6.1. Introduction 6.2. Notion de complexité 62.1 Définition de ta complexité d'un algorithme .. . 6.2.2 ‘Types de complexité 62.3. Différentes nuances de complexité 6.3 Complenité et notation O eee Table des matieres 39 41 42 43 B 45 46 a eee eee 50 52 -. 82 52 53 56 59 OL 61 e a ses a RARLAY 65 66 07 9 0 7 n m n n ‘Table des matidres : 63.1 Notation asymptotique n 6.3.2 Classes de complexité les plus usuelles 4 6.3.3 Comparaison de temps d’exécution oy 8 6.4 Comment mesurer [a complexité d'un algorithme 15 6.4.1 Evaluer la complenité d'un algorithme 15 642 Complexité des opérations sur les listes 1 64.3 Des exemples de calculs de complexité n 6.5 Complexité d'un algorithme récursif . . . 85 66 Exercices 88 7 Algorithmes de tri on 7.1 Objectif du chapitre 2 7.2. Tiipar sélection 92 721 Principe ; 92 7.22. Ilusttation 92 7.23. Implémentation en Pyttion 92 7.24 Analyse de complexité 93 73° Triabulles 94 731 Principe. ss... e eee . 34 7.3.2. Milustration Brreciar 94 733. Implémentationen Python oo... eee eee eee eee 94 7.34 Analyse de complexité 95 74 Tri par insertion 96 74.1 Principe 96 742 Mlustration : 96 74.3 Implémentation en Python . 96 744 Analyse de complenité 6.6 96 7.5 Tri par fusion eee 7 73.1 Principe ” 7.82 Mlusteation 98 7.53 Implémentation en Python 98 754 Analyse de complerité .. . 99 76 Trimpide 20.2... ee eee 100 761 Principe... eee ve 100 7.6.2 Ilustration 100, 7.6.3 Implémentation en Python . to1 7.64 Analyse de complexité 101 7.7 Comparaison de complexité de différents algorithmes de tri. « 103 105 18 Exercices 22.000. ‘Table des matiéres 107 107 ~ 108 8.1 Objectif du chapitre 8.2 Généralités sur les arbres ee ee ee eee eer eee ee B21 Défiiions eee ee os. 108 8.29) sTenminoloaie Fee e cette est ere a 109 83 Arbresbinaires 0... Bae peice eee OSE 83.1 Définition 6... ee eee eee eee 110 8.3.2 Arbresbinaires en Python oo. eee Serer 83.3. Fonctions pour manipuler les arbres binaires. aaron 8.3.4 Parcours d'arbres binaires 2... . pees - 13 84° Arbresbinaires de recherche ©... ee eee eee eee eee US 84.1 Définition : te us 8.4.2 Propriétés d'un arbre binaire de recherche»... . ee 16 85 Tas... 62. eee eee 85.1 Définiion 47 85.2 Implémentation en python... : aoe 17 85.3 Opérations sur un tas, Se tite Eee 86 Tripartas.. 2.0.2... ae Eee ee eee 8.6.1 Principe 120 86.2 Musiration ..... eee Sere: 8.6.3 Implémentation en Python +. 121 8.64 Analyse de complenité 6. eee eee eee 122 8.7 Arbres naires Sree ete Beefs ace aa 8.7.1 Definition . : 123 87.2 Implémentationen Python... eee cesses 123 87.3 Parcours arbres mvaites Soot oe 88. Exercices . Sere eee iteoet ee eee oe Sree Las 9 Introduction a la Théorie des Graphes 128 9 ; i Beet eee (os 9.2 Définitions et vocabulaire debase eee Seer 129 9.2.1 Notion d'un graphe . . . . te eee ves 129 9.22 Graphe non orienté/orientsivalus ee Ee ese aceeete setae ct 2 9.23 Terminotogie eee ae eee eee ete He - 132 9.3. Représentation des graphes .. . : See ce 138 931 Matrice dadjacence eee cece eee eee ee BD 9.3.2 Liste d’adjacence eee os fetes LM 9.4 Graphes eulériens et Graphes hamiltoniens... 2... , a - 135 941A Grapheeulérien. 6... eee Pere eeereeeeeeesdas 942 Graphe hamiltonien . . . Se eerste 136 9S Parcoursdun graphe : ae 137 ‘Table des matitres 9.3.1 Parcours en profondeur (Depth First Search = DFS) atts 9.5.2 Parcours en largeur (Breadth First Search = BFS) . . . fr ee3: 9.6 Plus court chemin : Algorithme de Dijkstra... 6... -. 140 96.1 Principe de 'algorithme eee ee 142 9.6.2 implémentation en python oe : 143 97 Exercices .. 0.6... 144 IIT INGENTERIE NUMERIQUE ET SIMULATION 146 10 Résolution approchée d’équations différentielles 148 10.1 Introduction : Fee: 10.2 Les équations différentielles ordre 1. « ete F cee 149 10.2.1. Définitions et généralités et ce 149 10.2.2 Laméthoded’Buler.. 00... 151 10.2.3. La méthode de Heun oes 154 10.2.4 La méthode de point milieu : 155 10.2.5 La méthode de RK4 : FEE 1g6 10.2.6 Comparaison des différentes méthodes : see Stes? 10.3 Les équations différemtilles ordre 2 ss ev sss eat Cres ELSe 10.3.1. Introduction aoe coaee 158 103.2 Exemple . . - eee eee 159 104 Utilisation de la fonction odeint du module scipy. integrate 162 11 Résolution approchée des systtmes linéaires 165 L1.L Objectif du chapitte 6... vee eee eee : 165 11.2 Normes matricielles de type vectoriette : 16 11.3 Systéme linéaire : Serer es 113.1. Systéme de n équations an inconmues 6. ss wes 166 11.3.2 Perturbations (ot des erreurs) dans un systeme 167 1133 Systeme triangulaire ©... 2... : 168 11.4 La méthode de Gauss . « ae 170 L141 Principe de la méthode . . . eee 170 11.42 Implémentation en python : 172 115 Méthode de Gauss-Jordan. 6... sees ree 74 115.1. Principe de la méthode de Gauss-Jordan ss. : 118 11.5.2 Application ee eee eee eae cH 174 11.6 Décomposition LU. . « oe cee : Et 11.6.1. Principe de la décomposition LU ee 175 177 11.6.2 Implémentat a en python vill IV PROBLEMES ET CONCOURS 1 Extrait Concours National Commun 2015 2 Concours National Commun 2016 3. Concours National Commun 2018 4° Concours National Commun 2019 5 Extrait Concours Polytechnique PSUPT 2005 6 Extrait Concours X (Informatique) MP 2010 7 Extrait Concours X (informatique commune) PSI- 8 Extrait Concours Centrale-Supélec 2016 9 Extrait Concours X/ENS (Informatique B) MP/PC/PSI 2017 10 Extrait Concours E3A (Informatique) MP 2017 V_ ANNEXES Corrigé des exercices du chapitre 3 Corrigé des exercices du chapitre 4 Corrigé des exercices du chapitre 5 Corrigé des exercices du chapitre 6 Corrigé des exercices du chapitre 7 Corrigé des exercices du chapitre 8 Corrigé des exercices du chapitre 9 Bibliographic Index 179 181 186 194 203 210 213 220 24 29 232 235 237 242 4s 230 284 2357 259 260 Premiére partie BASES DE DONNEES CHAPITRE 1 Introduction aux bases de données Sommaire AA Unvoduction .. 2.6. c eee eevee ete eeeeeeeeeesaeeeees 3 1.2 Etude de cas : Gestion d'une bibliothéque d’un centre CPGE . . . « 3 13 Notion de base dedonnées ©... 6.00. e cece eee cence sees 6 14 Systtme de gestion de base de données (SGBD) 5.000 - ee eee e eee ee ee eee ee 6 LS _Les différentes architectures d'un SGBD 1 1.1 Introduction ‘Avec la forte abondance des données sur Internet et le développement trés rapide des applications mobiles qui utilisent différents types de données comme les images les sons et les vidéos, il est devenu nécessaire de modéliser structurer et stocker ces données pour faciiter Faccés aux utilisateurs. Dans ce chapitre, & travers une étude de cas qui traite la gestion d'une bibliothéque, nous présentons les solutions classiques qui permettent de structurer et stocker les données ainsi que leurs avantages et leurs inconvénients. A issu de cette étude, nous allons définir la notion d'une bases de données et les principaux concepts qui s'y rattachent. 1.2 Etude de cas : Gestion d’une bibliotheque d’un centre CPGE On souhaite gérer les emprunts douvrages d'une bibliotheque dans un centre CPGE, Pour cela nous avons pris en considération les régles de gestion suivantes — Chaque livre est caractérisé par son titre, son auteur, le nombre de pages, et la liste des éleves qui ont déja empruncé ce livre. — Chaque éléve est représenté par son nom, son prénom, et sa classe (MPSI 1, PCSI 2, MP 2, ete.). Pour simplifier l'étude de ce cas, on ne sintéresse pas & la date d'emprunt et le date de retour d’un ouvrage. Notre premier objectif, consiste A chercher une méthode simple pour modéliser et mémoriser ces données. Ensuite, on peut ies interroger pour retrouver les livres d'un auteur, retrouver les livres ern- pruntés par un éléve donné, caleuler le nombre moyen de pages de tous les livres, ete. La premiére solution possible consiste & utiliser fa structure de données liste pour modéliser les don- nées de ce probléme. Pour cela, on propose la structure BibLio présentée ci-dessous : CHAPITRE 1. INTRODUCTION AUX BASES DE DONNEES Biblio =((" Maths*,"Antonini™ ,416, [["Wahbi" , "MPI"],[" Nassiri*,"MP2"1]), (Programmer en Python" ,“RAMALHO" ,700,[["Wabbi* ,“MPI"]]), (éAlgorithmes","Cormen" ,240,{{"Kamili" ,"PSI1"]]), (Patients* , "Marsaud” 168, {{" Azizi" ,"MPL" ],["Wabbi* ,"MPi"},["Adil","PSI1"}}), (Physique MP/MPs" ," Vidal" ,744,[[" Nassiri®,"MP2"],["Alami”,"PSt1"1]), (Physique MPSI-PSI" ,"Grecias" ,773,])] La structure Bib2io représente une liste de tuples, chaque tuple contient les informations d'un livre & savoir son titre et son auteur. En plus, dans ce tuple on met une liste des étudiants qu’ont emprunté ce livre, Aprés avoir modélisé ensemble des données & l'aide Pune liste, nous pouvons commeneer le traite- ment souhaité. Dans ce chapitre, nous donnons le code de deux exemples, dans le premier on traite Vaffichage de Ia liste des éléves qu’ont déja emprunté un livee donné, Tandis que dans le deuxiéme exemple, on calcule la moyenne des pages de tous les livres de cette bibliothéque. On suppose que la structure Biblio est une variable globale. 3 Cope PYTHON : affichage de la liste des emprunteurs d'un livre def affiche_emprunteurs (nom): c=False for i in Biblio: 3 CODE PYTHON : Calcul de la moyenne des pages def moyenne_pages (): for i in Biblio! s=sti [2] return s/len (Biblio) Puisque les listes proposées sont implémentées au niveau de la mémoire centrale (RAM), lavantage majeur de cette solution réside dans sa rapidité de traitement des données. En revanche, cette solution présente les inconvénients suivants : — Les données sont stockées d'une maniére temporaire dans la RAM; — La taille des données qu’on peut stocker est limitée, vu la contrainte de lespace disponible dans la RAM; — Lacods aux données dans la RAM, nécessite un langage de programmation; — Il nly a pas une indépendance entre les données et les programmes, cela signifie que chaque modification qu'on apporte sur les données nécessite une re-écriture d'un nouveau programme; — Ilest difficile de sécuriser les données; — Ete, Afin de surmonter les li fichiers textes. La figure 1.1 est un extrait d'un fichier nommé bibio.txt, contenant des informations ites de cette solution, nous proposons une autre alternative basée sur les 4 1.2, ETUDE DE CAS : GESTION D'UNE BIBLIOTHRQUE D’UN CENTRE CPGE relatives aux différents livres empruntés un centre epge. Cette nouvelle modélisation, nous a amené & modifier les deux fonctions précédentes, La modification apportée a chaque fonction est donnée ci-dessous » CODE PYTHON : affichage de la liste des emprunteurs d'un livre def_aftteue_-mprunteursSol2 (nom) feopen (chemin, "1" ) coFalse for iin £ Lei, split",") if L(0}==nom: rue nb=len(L) for j in range(3,nb): print (L{j],end=" ; ") False: print ("ce livre n’existe pas” ) if La deuxidme fonction permettant de déterminer la moyenne du nombre de pages de tous les ouvrages, son code python est donné ci-dessous : 3% Cove PYTHON: calcul de Ia moyenne du nombre de pages chemins" biblio. txt" def moyenne_pagesSol2(): pen (chemin, "r") $0 nb=0 for iin Lei. split(",") Hint (L(2}) abenb+1 return s/nb eL® Nessie" "700; "waho3," FIGURE 1.1 ~ Un extrait du fichier texte bibio.txt Parmi les avantages de cette deuxitme solution, nous citons un stockage persistant sur le disque dur Dun autre cété, nous avons une grande capacité de stockage par rapport 2 la mémoire centrale. Pour les inconvénients de cette solution nous citons : — La redondance de données : on peut trouver la méme information qui se répdte plusieurs fois; — ILn'y a pas une indépendance entre les données et les programmes; CHAPITRE 1, INTRODUCTION AUX BASES DE DONNEES — Le partage de données est difficile; — La sécurisation des données est difficile; A cet égard, nous sommes devant quatre problémes qu'on n'a pas pu résoudre. Afin de pallier & ces problémes, nous proposons d’introduire la notion de bases de données. 1.3 Notion de base de données Définition Une base de données (BD) est un ensemble structuré de données enregistrées sur des sup- ports accessibles par Vordinateur, représentant des informations du monde réel et pouvant etre interrogées et mises & jour par une communauté d'utilisateurs. (ase de données) — Un annuaire : ensemble de personnes (nom, prénom, téléphone, profession, adresse) ; — Service de scolarité : on y trouvera les renseignements concernant les étudiants, leurs états civils, leurs inscriptions passées et actuelles, leurs résultats, ete; — Gestion d’une bibliothéque : ensemble de livres (auteur, titre, prix, année édition,...; — Systémes d'information géographique (SIG) : stockage et analyse de cartes, don- nées météo, images satellites; 14 Systéme de gestion de base de données (SGBD) pemaiiinn aa Ceiameaie acca: > Définition 1.2 (Systéme de gestion de base de données) }—_________________ ee ee Un systéme de gestion de base de données est un ensemble de logiciels-systeme per- mettant aux utiisateurs de décrire, mémoriser, manipuler, traiter et interroger un ensemble de données constituant la base de données. Un bon SGBD doit remplir au moins les cing conditions suivantes — Indépendance physique : un SGBD doit offtir une structure canonique permettant la représen- tation des données réelles sans se soucier de l’aspect matériel ; — Non-redondance des données : un SGBD doit éliminer la duplication d'informations afin d'éviter Ja perte de espace mémoire; — Cohérence des données : un SGBD doit vérifier chaque contrainte d'intégrité pour assurer la cohérence des informations ; i | / | : i 1.3, LES DIFFERENTES ARCHITECTURES D'UN SGD. — Concurrence dacs aux données : un SGBD doit permettre & plusieurs wtilisateurs de modifier des données quasiment en méme temps tout en assurant un résultat cohérent pour un utilisateur consultant la base; — Sécurité et la confidentialité des données : un SGBD doit protéger les données contre les accés non autorisés et contre les panes. Igues ‘Aa fil des ans, plusieurs SGBD sont développés et commercialisés, la figure 1.2 montre exemples des logiciels commerciaux et libres d'un SGBD qui sont déja existant dans fe marché, Dans ce livre, nous nous focaliserons sur le SGBD libre qui est SQLITE. Le choix de ce systéme a été motivé parle fait que python intégre ce SGBD comme module, Satite yy Meges> RSRSESS 3S SF mysaie oY Ms SQL & MS At exer ceess SOL Server FIGURE 1.2 - Logiciels commerciaus et libres d'un SGBD Aprés avoir installé un tel systéme de gestion de base de données, trois grands acteurs peuvent utiliser ce logiciel, il s'agit de l'administrateur, les programmeurs d'application et Les utilisateurs finaux. 1.5 Les différentes architectures d’un SGBD Définition 1.3 (Architectures des SCBD) Une architecture désigne la fagon par laquelle un systéme de gestion de données gére une base données. Parmi les architectures les plus répandues nous citons : une architecture centralisée, une architecture client-serveur et une architecture trois-tiers. Une base de données centralisée est gérée par un seul SGBD, en plus, elle est stockée dans sa totalité 8 un emplacement physique unique et ses divers traitements sont configs & une seule et méme unité de traitement. La figure 1.3 illustre un exemple d'une architecture centralisée. Une deuxiéme architecture est celle des systmes client/serveur (figure 1.4). Lienvironnement client désigne un mode de communication & travers un réseau (comme réseau Internet) entre plu- sieurs programmes ou logiciels : l'un qualifié de client, envoie des requétes; l'autre ou les autres, qualifiés de serveurs, attendent les requetes des clients et y répondent, Par extension, le client désigne également Pordinateur sur lequel est exécuté le logiciel client, et le serveur, ordinateur sur lequel est ‘exécuté le logiciel serveur. Un serveur peut répondre aux requétes d'un grand nombre de clients. Enfin, une woisiéme architecture est celle des systémes trois-tiers, dans laquelle on introduit un troi- sigme "tiers” par rapport & Varchitecture clien/serveur (figure 1.5). Ce niveau intermédiaire repré- joue le rdle interface entre le client et le serveur; typiquement on peut n= sente une machine qi trouver un navigateur Web sur un ordinateur ou un smart phone. CHAPITRE 1. INTRODUCTION AUX BASES DE DONNEES ee FIGURE 1.5 ~ Architecture trois-tiers d'un SGBD | : y = 4 : : : = : = | | | | | Use CHAPITRE 2 Modéle relationnel Sommaire eH 241 Objectifdu chapitre . : eet 22 Qu'est ce qu'un systdme d'information? 66. es ees 9 23. Lamodélisation conceptuelle Rae cet StH tieeie ree oa CELD 24 Lemoddle rlationnel . .. - 24.1 Historique et objects. 24.2 __Définitions et Notions de base 2.1 Objectif du chapitre Dans ce chapitre nous abordons les éléments clés relatifs 4 un systéme d'information afin de com- prendre le positionnement d’une base de données au niveau de ce systéme, Ensuite, nous citons quelques modéles utilisés dans le processus de la modélisation conceptuelle. Enfin, nous allons défi- nir par des exemples les concepts fondamentaux du modéle relationnel, Lintérét de comprendre ce ‘modele, va nous servir dans le calcul relationnel qu’on va traiter dans le chapitre suivant. 2.2 Qu’est ce qu’un systéme d’information ? Avant de se pencher sur la définition d'un syst#me d'information et de montrer Ia relation exis- tante entre une base de données et un systéme d'information, tout dabord, nous essayons de définir le mot "systéme”. Ce terme est couramment utilisé dans plusieurs domaines (physique, mathématiques, informatique, médecine, économie et finances...) Il désigne un ensemble d’léments reliés entre eux en interactions dynamiques et constituant un objet cohérent et fonctionne! dont son objectif est de fournir un service donné. Dans le contexte d’un systéme d'information, ce der représente un en- semble intégré des entités qui permettent de collecter, de stocker et de waiter des données dans la finalité de fournir des services aux utiisateurs finaux. La majorité des entreprises comptent sur leurs systémes d'information pour bien mener et gérer leurs activités, interagir avec leurs clients et leurs fournisseurs et réagir avec la concurrence du marché. Par exemple, une banque utilise un systéme d'information pour traiter les comptes de leurs clients, gérer leurs ressources humaines et atteindre leurs clients potentiels grace a des promotions en ligne. En revanche, le systeme informatique est composé de deux parties principales : du matériel (servers, stations clientes, réseau, cloud) et des logiciels (systéme ¢’exploitation, gestionnaires de fichiers ou CHAPITRE 2. MODELE RELATIONNEL, de bases de données). Lors de la mise en oeuvre d'un systéme d'information, on distingue trois grands niveaux dabstractions entre ordinateur et l'utilisateur final (figure 2.1) : # Niveau interne : il déerit Vorganisation des données en mémoire secondaire (sur disque) et la fagon d'y aceéder + Niveau conceptuelle : est une représentation du monde réel auquiel se rapporte la base de don- andes; + Niveau externe : il représente la fagon dont un utilisateur final ou un programme d'application voit la partie de la base de données qui le concerne. Programe Programme application application [Niveau externe Base de donnces conceptuelle ee [Niveau conceptvel INivean interne FIGURE 2.1 — Les trois niveaux dabstractions d'un syst@me d'information 2.3 La modélisation conceptuelle La modélisation conceptuelle est un processus fondamentale dans la phase de la conception d'une base de données. Elle permet de transformer la partie duu monde réel qui intéresse les utilisateurs, sous la forme de données qui seront enregisttées dans une base de données. Au cours de ces der- nigres années, plusieurs moddles ont émergé pour élaborer la modélisation conceptuelle, nous citons ‘quelques exemples + + Modéle higrarchique : la structure de base => Varbre; © Modéle entité-association : la structure de base => entité et association ; ‘* Modéle relationnel : la structure de base => la relation; * Modale orienté objet : la structure de base => objet; © Ete, = | : . = = : / S / | | : = 24, LE MODELS RELATIONNEL Dans ce chapitre, nous proposons les concepts fondamentaux du modéle relationnel. La figure 2.2 présente le processus de tr ‘ansformation d'un probléme réel (gestion d'une bibliothéque) sous la forme une base de données. Schéma Conceptuel Entités / Associations Imptémentation we Schema relational! logique Ublisatour FIGURE 2.2 ~La démarche de modéiisation d'un probleme réel 24 Le modeéle relationnel 24.1 Historique et objectifs Le moddle relationnel a été introduit par E. F. Codd, qui travaillait au fameux centre de recherche _auteur est une clé primaire de la relation Auteur. Une clé primaire identifie de maniére unique un enregistrement dans une table. Elle per: met ainsi d’éviter les doublons. Par exemple, le numéro d'étudiant T_Etudiant permet identifier un étudiant de maniére unique. Définition 2.9 (Clé étrangere) jp __$$_____________ Une clé étrangére dans une relation est formée d’un ou plusieurs attributs qui constituent une clé dans une autre relation. Une clé étrangére est utilisée pour établir un lien entre deux relations, (€lé étrangére) Pp —$___—______________ Dans la base de données Bibliotheque : ({Exemple — Vattribut 1D_Auteur est une clé primaire dans la table Auteur et est une clé étran- gire dans la table Livre. — Lattribut 10_tivre est une clé primaire dans la table Livre et est une clé étrangere dans la table Emprunteurs. ({Remarque 2.2 — Les clés étrangeres, qui permettent de gérer des relations entre plusieurs tables, et garantissent la cohérence des données, es, les clés étrangéres — Contrairement aux clés primaires, qui doivent étre w peuvent prendre plusieurs fois la méme valeur dans une table. CHAPITRE 3 Algébre relationnelle Sommaire 34 Objectifdu chapitre ...... eee veces eee 7 32, Déinition de Valgdbre elationnelle 6... es ee ees .a7 33 Lesopératoursunaires o.oo ee eee 18 331 Lasélectiono.... 18 332. Laprojection + ; : 2» 333 Le couplage de fa sélection et la projection 21 334 Lerenommagep 6... ee et 2 34 Les opérateurs binaires ensemblistes 2 341 UniooU. . 5 oes ee 23 342 Intersection 26 343. Ditlérence - i: si ; 27 35 Les opérateurs aires... ee 2B 35.1 Le produit earésien x » 3.52. Lajointureo¢ | 3 36 Les fonctions Wagrégation 6... 6s eevee cere eee ee . 2 37 _Evereiees se vee eee ee ee sees tees eee eee 38 3.1 Objectif du chapitre Dans ce chapitre, nous proposerons une introduction & Valgébre relationnelle. De plus, nous illus- trons par des exemples comment utiliser les opérateurs de cette algdbre pour répondre aux requétes des utilisateurs. 3.2 Définition de Palgébre relationnelle Définition 3.1 (Algébre relationnelle) Vialgdbre relationnelle est le support mathématique cohérent sur lequel repose le modéle relationnel. Elle propose un ensemble d’opérations élémentaires formelles sur les relations, dans le but de créer de nouvelles relations. Ces opérations permettent de représenter des requétes sur la base de données dont le résultat s‘exprime sous la forme d'une relation. CHAPITRE 3, ALGEBRE RELATIONNELLE Une requéte est une expression qui s’écrit sous la forme Relation’ operateur Relation? On distingue quatre types d’opérateurs relationnels, 1, Les opérateurs unaires : ce sont les opérateurs les plus simples, ils permettent de produire une nouvelle relation & partir d'une autre relation, Les opérateurs unaires les plus courants sont — Sélection 0, Projection = et Renommage p 2, Les opérateurs binaires ensembliste : ces opérateurs permettent de produire une nouvelle relation a partir de deux relations de méme degré et de méme domaine, Dans cate catégorie on trouve les opérateurs suivants, = Union u, Intersection m et Différence — 3, Les opérateurs binaires ou n-aires : ils permettent de produire une nouvelle table & partir de deux ou plusieurs autres relations, Les opérateurs n-aires les plus répandus sont les suivants — Produit cartésien x, Jointure ™ et Division + 4, Les opérations dagrégation : ce sont des caleuls mathématiques sur un ensemble de valeurs extraites d'une ou de plusieurs relations, Les fonctions les plus utilisées sont : — Moyenne, Somme, Maximum, Minimum et Comptage. ‘Remarque 3.1 La base de données Bibliothdque(chapitre 2 ) est utilisée comme exemple pour tester les différents opérateurs de I'algébre relationnelle. Le schéma de cette base est donné ci- dessous : — ErupIANT(ID_Etudiant, Nom, Prenom, Classe) — AUTEUR(ID_Auteur, Nom, Prenom) — Livae(ID_Livre, Titre, ID_Auteur, Annee Edition, Nbr Pages) — EMPRUNTEURS(ID_Etudiant, ID_Livre, Date_Emprunt, Date_Retour) Nous signalons que dans le schéma précédent, les clés primaires sont en gras et les clés étrangéres sont en italiques, 3.3 Les opérateurs unaires 33.1 Lasélection + Notation : o(R) avec Rune relation (table) et F une con: 18 q (pies iil tai alii iain Définition 3.2 Soit R une relation de schéma $, A ¢ $ et a € Domaine(A), on appelle sélection de R selon une condition F (A = a) la table obtenue en sélectionnant dans F uniquement les Hones qui satisfont cette condition. Exemple 3.1 Quels sont les livres publiés avant 'an 2010? 3.3, LES OPERATEURS UNAIRES Livre live | Tite ID_Awteur| Annee Edition | Nbr_ Pages| 1200 | Pogrammeren thon | atu | 2010 700 7210 | Algcttnes 2015 20 m3 | aa 2008 Tat arin | Algtbre awe | 2015 a6 no | ‘ais | 2010 Sit 120 ‘Origines Bi | 2006 ot 1et Cos pourles progammeuse | C0 | 2007 [oe iat ‘Samarcande Bis | 1869 a6 Ls Patients bi | 207 168 108 Bates de données aioe | 2088 zu | ~> Algebre relationnelle : o 4nuex taition<=2010 (Livre) e SQL: s[setecr 2 | FROM. Livre 5|WHERE __Annee_Fdition <= 2010; Tanuee Edition<=2n0 (Livre) wtive | Tine TD_Auteur| Annee Faition | Nbr_Pages rats va mE TSF io | ovens [aise | aoe wor at Cet pourles pogrammens¢ | 200 | 2007 ae 124 Sumareande Bis | aso a6 Exemple 3.2 Quels sont les livres publiés avant 2015 et qui ont un nombre de pages supérieur ou égale 600? CHAPITRE 3. ALGEBRE RELATIONNELLE, ~ Algebre relationnelle : 2 nnce_paition<=2019 et Nor, Pages>=o00 (LiVre) ~> Langage SQL: SELECT + FROM Livre WHERE Annee_Edition 2015 and Nbr_pages 600; Eiition<=BS ot Nor Poges>-=son (LiVTE) [1D Auteur] Annee Edition | Nor_Pages| rs [ow [es00 [08 3.3.2 La projection + Notation : at.a2,...an(R) avec R une relation, et (Al,..., An) des attributs de R. {Définition 3.3} — Soit Rune relation de schéma S, et A un ensemble d’attributs tels que A C S. On appelle projection de R selon A [a relation a(R) = {e(A)le € R} ‘Cet opérateur supprime les attributs de S qui ne sont pas présents dans la liste de projection A= (Al, ...An). Par conséquent le schéma de x 4(R) est done A. Exemple 3.3 Quels sont les noms et les prénoms des éiudiants? Etudiant 7 [ip_etudiant [Nom Prenom | Classe [00 [ator [amt | aon 22 [mesa [ seme | wea ami Me amet | Me aot ai inane | PS 20 Hama [youd _| Pt (20 ais | Ayoub __ | MPL 21 chat [ Rave | mre = Algébre relationnelle ! tom yrenom (Etudiant) 20 > Langage SQL: ifsetecr nom, prenom 2|FROM Etudiant; colonnes d'une relation. From prenom (Etudiant) Nom | Prenora wait [Amal nessid | Senir amti_| Mobemea mea | al z__| imane amza | Ayoub Tinea __[ Ayoub [Chace | Rane 3.3.3 Le couplage de la sélection o et Ia projection = Quels sont les titres des livres ayant plus de 450 pages? 3.3._LES OPERATEURS UNAIRES On peut combiner les deux opérateurs o et x afin de retourner certaines lignes sous certaines > Langage SQL: + Algdbre relationnelle : tiire(ivir_Pagesaso (Livre) [SELECT titre 2 ROM Livre 3 WHERE Nbr Pages > 450; Tetra Poses CLIvEe)) | Butre(7ir Pagessato (Livre) | Titre Pegrammer en Python Java ay [Longines | ce+ pourtes programmenes © LC** pourles programmews | Bases de données CHAPITRE 3, ALGEBRE RELATIONNELLE Exemple 3.5 ‘Quels sont les noms et les prénoms des étudiants de fa classe MPI’? + Algébre relationnell nom prenom (Tciassex’ apy (Eeudiant)) » Langage SQL 1 {SELECT nom, prenom 2 | FROM Frudiant 3 | WHERE Ayoub Lrordre des deux opérateurs o et x est important, cela signifie que Fat,..an(Or(R)) # oF (maL,..n(R)) Par exemple : + RL: miire(W6e_Pagee>iso CLivre)) “RZ: owin Pagesottal tire CLivte)) Les requétes R1 et R2 ne donnent pas le méme résultat, R2 donne une erreur, car Pat Nbr_Pages n'est plus dans la relation résultat aytre (Livre). 3.3.4 Le renommage p ‘+ Notation : pxso(R) avec R une relation, A attribut de R et B n'est pas un attribut de R (Bg schéma(R)). Soit R une relation de schéma S, tel que § = (AI, A2,...,An) et B ¢ schéma(R). Le renommage d'un attribut Ai avec un nouvel attribut B est relation A’ avec, schéma() (schéma(R) ~ {Ai}) U (B} définie par : pacon(R) = {t/3u € R, efschéma(R) — {Ai} ef ¢{8] = [Aa 3.4, LES OPERATEURS BINATRES ENSEMBLISTES 100, wai [amet | wer 202 Nasi | Samir | wre 103 ami | Mohamed | wre at ‘ahmed | Adi Mee 504 wale Tmane | PSU 209 Vamza [Ayoub | siz 210 Nadia | Ayoub | WPL aa Chak | Rae | ora + Algebre relationnelle : pr _seutiant,om-110 Student Name(Etudiant) ~» Langage SQL: SELECT ID_Etudiant AS 1D_Student, Nom AS Name FROM. Evudiant; PID _Etudiant,Non-y1D_Student Name (Etudiant) w_Student [Name | Prenom | Classe 100. want [Amal | Pe 202 Nasi | Samir | MP2 103 amili_ | Mokamet | MP2 an ‘Ahmed | Adil Mr 30 aie Trane | Pst 20 Hamza [Ayoub | sz 210 [Media| Ayoub | MPL a Chait | Rojae | Pe Remarque 3.3, Cet opérateur permet de lever une ambiguité entre les noms des attributs de deux relations d'une opération binaire (Produit cartésien, jointure, ...). 3.4 Les opérateurs binaires ensemblistes 34.1 Union u RLU R2 avec Ri et R2 deux relations, ayant le méme schéma. 23 CHAPITRE 3, ALGEBRE RELATIONNELLE Définition 3.5 Soient M21 et 22 deux relations de méme schéma. On appelle Punion de 1 et R2 Tensemble des tuples appartenant & R1 ou R2, RIUR2= {tlhe Ri owt RQ} RIUR2 est une relation ayant le méme schéma que RI et R2. Pour appliquer cet opérateur, les noms des attributs doivent étre identiques dans les deux relations R1 et R2. Exemple 3.7 On veut Pensemble des étuciants de deux relations suivantes : Etudiant 1 et Etudiant2 W_Etudiant Prenom | Classe 100 ‘Amal | MPI me Samie | MP2 13 Motwmed [are | a asi sit ‘Ayoub | PSUR Etudiant2 Nom | Prenom | classe 150 Walid | Yassine | M2 am, Nasi | Sami | NP2 155, ‘Amine | Youser | MPa au Abwned | Ad St) 209 Hanes | Ayo | Psa ~> Algebre relationnelle : Etudiontl U Etudiant2 ~> Langage SQL : 1 /SELECT + 2 | FROM Etudiantt 3 |UNION, a|SELECT —« s [FROM Etudiant2; 24 _{Exemple 3.8 | On'considére les relations Etudiant et Auteur. On veut les noms des étudiants et les 3.4, LES OPERATEURS BINAIRES ENSEMBLISTES: Etudiant] J Etudiant? 1D_Btudiant | Nom Prenom | Classe 100 Wahbi Amal um m2 ee rans unst e 3 aimed [ast_—_[ 70 Hirer [Pr [ise vw [te (hss note [ots] noms des auteurs [ Etudiant iDiBiadian [Now od | Prenon stud] Gasse 0 vid aie | a 202 Nasi Swe ee | is nine Was am amet a ri aes 7 » Nomaut | Prenom Aue | Domaine “st ron sa estas 1588 amine Your | Seles os ‘ta satin Senee — Langage SQL: + Algdbre relationnelle :(pyvom_feut-+Nem(Tivom_gtud Etudiant)))U(pivom_sut>Nom{FNom_Aue(AUEU))) SELECT FROM ‘UNION SELECT FROM Nom _Etud Btudiant Nom_Aut Auteur; as Nom as Nom SSS CHAPITRE 3, ALGEBRE RELATIONNELLE [ (evn, feud-rNor von. fend(Btudiant))) Ulpwom , Nom tut-2.Von(7Nom_Aut(Auteur))) Willd Nass ‘Amine ‘Ahmed Karl Hama 34.2 Intersection 9 * Notation : R17 R2 avec Ri et R2 deux relations, ayant le méme schéma. Soient Ri et R2 deux relations de méme schéma. On appelle Lintersection de Rl et R2 Vensemble des tuples (¢) appartenant 4 Rl et a R2. RAN RO = {ite Mette RQ} RIA R2est une relation ayant le méme schéma que Rl et R2. Pour appliquer cet opérateur, les nom des attributs doivent étre identiques dans les deux relations Ri et 22. Soient les deux relations Etudiant1 et Etudiant2, on veut les étudiants communs entre les deux relations Etudiant1 et Btudiant2. 1 Studiant_| Nom Classe 19 a eo | 202 Nasi | Same | ara 15 Kamit | Mohamed _| a2 a wwe | Aa 73i 209 | tama | Ayoub | Ps Brudiant2 W.Etudiant | Nom | Prenom | Classe | ce | 202 asi [ Samir | MP2 188 ‘nine | Youser | ara a ‘Aimed [Adil | ot [20 Hama | Ayoub | Pata 26 3.4, LES OPERATEURS BINAIRES ENSEMBLISTES, : Etudiant Etudiant2 > Algdbre relationnell > Langage SQL: t 2 Btudiantt 3 | INTERSECT al SELECT x | FROM Btudiant2; Etudiantl 9) Btudiant2 w_Budiant [Nom | Prenom | Classe 202 Nass | Samie | MP2 a Abmed | Adil Pst 200 Hamza | Ayoub | Psiz 34.3 Différence ~ + Notation : Ri ~ R2 avec Ri et R2 deux relations, ayant le méme schéma {Définitic Soient Rt et R2 deux relations de méme schéma. On appelle Ia différence entre deux rela- tions R1 et R2, Lensemble des tuples appartenant & Ri et qui ne sont pas dans R2. RI~ RO = (ile Ri ett ¢ RO} 2A~ RB est une relation ayant le méme schéma que Rl et 2. Pour appliquer cet opérateus, les nom des attributs doivent étre identiques dans les deux relations Rl et R2. {Exemple 3.10 Soient les deux relations Btudianti et Btudiant2, On veut les étudiants de la relation Etudiant1 et qui ne sont pas dans la relation Btudiant 2. Etudiant1 D_Hion’ [Nom | Prenom | clse ito [want [aout [x 2 vsti sie [a rm anit | Motaned [a2 jsut Ahmed Adil PSI 209, Hamza | Ayoub: Psi, 2 iii iii Aled CHAPITRE 3, ALGEBRE RELATIONNELLE Etudiant2 w_Btudiant [Nom | Prenom | Classe [0 wali | Yessine | MP2 202 Nass | Samir | MZ 13 Amine | Yousef | MPS uy Aimed | Adi StL 200 Hama | ayoub | siz ~ Algebre relationnelle : Erudianti ~ Btudiant2 > Langage SQL ifseLecT 2 {FROM Etudiant1 3 EXCEPT a|SELECT + s {FROM Btudiomt2; Etudiantl ~ Etudiant2 w_ftudiant [Nom | Prenom 0 wanbi | Amal NG Kamil | Mohemed | MP2 Exemple 3.11 Soient les deux relations Etudiant et Emprunteurs. On veut les identifiants des étu- diants qui nfont pas emprunté de livres. Etudiant W_Btudiant | Nom | Prenom | Classe 1 want | Amal) MPL = asd | Sami | MP2 108 amii__| Mohamed _| MP2 ul ‘Aimed | Adil MP2 wl mane | PSI 709 youd | 5 20 Nadia | Ayoub | MPL i aki | Rone | Mra Emprunteurs w.Erudiant [1D_Livre | Date Emprunt] Date Retour 100 3001 19-09-12 | an19- 00-24 100 1200 wiv-0—27 | 9-10-02 01 Mil 2019-10-02 100 7210 20200112 28 35, LES OPERATEURS N-AIRES Algébre relationnelle 27 erutiane(Etudiant) ~ 71p_erdtiare(Emprunteurs) SELECT ID_Etudiant FROM Etudiant EX. SELECT ID_Btudiant FROM Empruateurs; sudiant (Erprunteur Etudiont| Etudi Brudiant 1 202 163 au 20 210) «Notation : 21 x R2 avec RI et R2 deux relations. _{Définition 3.8 Soient Ri et R2 deux relations, on appelle le produit cartésien de R1 et R2, toutes les combinaisons de lignes possibles & partir de ces deux relations. RU x RB = (0450 Pao Moo Ty) (Hy o0 te) € RU et (0) Tye) © RQ} AY x R2 est une relation dont le schéma est don par schéma( #21) U schéma(R2) Exemple 3.12 Soient les deux relations Etudiant. et Emprunteurs . On veut afficher le produit cartésien des deux relations Etudiant et Emprunteurs. CHAPITRE 3. ALGEBRE RELATIONNELLI + Algébre relationnelle :Etudiant x Emprunteurs Emprunteurs [1 Livre Date_Retour mio 210-0924 1200 2019-10 MOL 2019 10-02 : ~ Langage SQL: \ [IEC 2 | FROM. Etudiant , Emprunteurs; Btudiant x Emprunteurs ni Deed [om seo ane] ie a 7 om aE mace | 2 Nessiri MP2 100 2019 — 09 ~ 12 me ve ro rere | 103 Kamil MP2 100 2019 ~09~27 Remarque 3.4 Il rest pas nécessaire en SQL que les attributs des deux relations RI et R2 soient tous diffé- rents (ceux de RI sont préfixés par RI. et ceux de R2 par R2.). En algébre relationnelle, les. deux schémas doivent étre distincts, exemple précédent du produit cartésien sera calculé Par: ArD_Btudiant-+1DEtudEtudiant) x pry Eeuiiant-+1Dmpr (Emprunteurs) Rem: jarque 3.5 On voit bien que dans l'exemple précédent, le produit cartésien n’a pas énormément de sens car certains étudiants se retrouvent avec des emprunts qui ne les concernent pas (les lignes 3,4,5, 6, 7, 8,9, 10 et 11 du tableau ci-dessus). I va done falloir faire une sélection patmi les résultats précédents, ce qui correspond & Topérateur de la jointure, 30 3.5. LES OPSRATEURS N-AIRES, Exemple 3.13 On veut afficher maintenant, tous les étudiants qui ont emprunté un livre en utilisant le résultat du produit cartésien Etudiant x Emprunteurs. — Algébre relationnelle :o prudiane 1D_Btadiant=Emprunteurs.1D_Ptudian' (ETUDIANT xEmprunteurs) —+ Langage SQL : ifsétecr 2|RROM.-Etudiant , Emprunteurs 3 {wis Etudiant.1D_Etudiant = Emprunteurs.1D_Etudiant ; Ceuta, = Bmpruntewrs. 10 Peudint (ETUDIANT xEmprunteurs) iD Btudiant [Nom | Prenom | Classe | ID_Etudiant | 1D_Live | Date Emprund Date Retour 300 warts anal win ‘| 100 wor | 2019-0 -12 | a9 -w 24 300 ‘Amal Me 100 100 | 2019-09-27 | 2019-10-02 ‘901 [mane | ost ao Mior | 2010-10-02 35.2 La jointure 4 ‘+ Notation : RI R2 avec RI ct R2 deux relations de schéma $1 et $2. Définition 3.9 Soient Ri et R2 deux relations ayant deux schémas $1 et $2 respectivement, et A € SI, Bee S2tels que dom(A) = dom(B). La jointure de Ri et R2 est une relation sur un schéma $ avec S1u $2 définie par De RLM R2= {e€ RL Raed = €.B} = ojep (RI x R2) La jointure comporte toutes les combinaisons de lignes de Ri et de £2 qui ont la méme valeur pour les attributs utilisés pour réaliser la jointure. Exemple 3.14 | Quels sont les noms et les prénoms des étudiants qui ont emprunté un livre? (On utilisera les relations Etudiant et Emprunteurs de lexemple du produit cartésien) + Algebre relationnelle Nom, Prenom(ETUDIANT x Emprunteurs) Etudient.1D_Btutiont= EmpramtoursD_Butiont ~ Langage SQL [SELECT Nom Prenom 2|mom ——Ftudiant JOIN Emprunteurs 3 }0N Etudiant.1D_Etudiant = Emprunteurs.1D_Etudiant ; at I CHAPITRE 3, ALGEBRE RELATIONNELLE. ot 1 [SELECT Wem, Prenom rfmmom’—Etudiant , Emprunteurs yw: —_Etadiant.iD_Btudiant = Empronteurs.1D_Feudiant 5 ™Nom,Prenom(ETUDIANT Mt Emiprunteuts) ce ¢ Etudiant,D_Etudiant=Emprunteurs.£D_Btudiart PE ») Nom renom wt ‘ma va ‘ul hee {mane Exemple 3.15} Quels sont les noms et les prénoms des étudiants qui ont emprunté un livre le 2019-09-27"? ~ Algebrerelationnelle: Nom. Prenom{ Date, Eoiprant<2018-09-27 fo Em: Nem Prenoml@ Date pa (ETUDIANT anh) Btuiant=Bmprantenrs 1D. Budi prunteurs)) ~> Langage SQL: {SELECT “Nom , Prenom > |RROM Etudiant JOIN Empruntears 3 {ON Etudiant.ID_Etudiant = Emprunteurs.ID_Etudiant afWeERE —— Date_Emprunt = "2019-09-27" ; (te empranta'2018-00-29/(ETUDTANT ss 1D, SabinteRerantears |, ons MPFUMELS)) Nom Prenom ‘wahbi al J 3.6 Les fonctions d’agrégation Une fonction @agrégation est un opérateur qui permet de regrouper des lignes d'une relation R, en se basant sur un seul attribut ou plusieurs, ensuite évaluer chaque regroupement a Paide de cette fonction, 32 FE ee wines 3.6, LE {Définition 3.10 Soientt R une rel ‘On note 47j(0)(R) la relation obtenue + ion, A et B deux attributs de R et f une fonction d'agrégation sur R. — ef regroupant les lignes de A qui sont identiques sur Vattribut A — eren définissant un nouvel attribut f(B) pour ces valeurs regroupées, par application de la fonction d’agrégation f sur chacun de ces agrégats sur Tattribut B. — La fonction f peut étre 1, COMPTE : compter les valeurs d'un attribut d'une relation, ~+ En SQL COMPTE : count 2, SOMME : additionner les valeurs d'un attribut d'une relation, + En SQL SOMME : sum » En SQL MOYENNE : WG 4, MAXIMUM : chercher la valeur maximale d'un attribut d'une relation, > En SQL MAXIMUM : MAK 5, MINIMUM: chercher la valeur minimale d?un attribut d'une relation > En SQL MINIMUM : 11 3, MOYENNE : effectuer la moyenne des valeurs d'un attribut d'une velation, | {Exemple 3.16 [z= est le nombre total des étudiants de la relation Btudiant? Etudiant wD Brudiant [Nom | Prenom | Classe 10 wats Amal | MPL 2 Masset | Some | MP2 108 Kamil | Mohamed | MP2 | [sn Aemed | Adil | a i mane | Pst 209 Hames | Ayoub | FSI m0 —~(| Mada | Ayoub | wrt a2 coats [aie | wre -+ Algebre relationnelle :Yeonpeo(1D_studiane)(Etuciant) + Langage SQL FONCTIONS D'AGREGATION [SELECT COUNT(ID. 2|FROM Etudiant; 33 CHAPITRE 3, ALGEBRE RELATIONNELLE, ot SELECT COUNT(+) |FROM Etudiant; 2 Etudiant) Etudiant) | ‘Exemple 3.17) Quel est le nombre total des étudiants par classe? ~ Algébre relationnelle cts: Ympt/0 rude (Etat) » Langage SQL : [SELECT Classe, COUNTCID_Etudiant) 2|FROM——-Etudiant s [GROUP BY. Classe; Classe"lcompte(D), Etudiene) Etudiant) MPL 2 MP2 4 Pst L Psa L Exemple 3.18 Quelles sont les classes ayant 2 ou plus d'étudiants? > Algébre relationnelle :6omp1e(10_Bvudiant)>2(Closse’beomptel1D_Etudiant) — Langage SQL 1 {seu jasse_, COUNT(+) 2 | ROM Etudiant, 3|GROUP BY Classe 4 [HAVING COUNT(+) >= 25 fiant)). SeomptelID, Etubiani)™9(ClosseTeomptel1D_Btudane) Btudiant)) ei [2 MP2 4 a4 i i ; ] 1 3.7, EXERCICES Remarque 3. Pour effectuer une sélection avant une opération d'agrégation en SQL, il faut utiliser une condition "WHERE" avant l'instruction "GROUP BY", Par contre, pour faire une sélection aprés une opération d'agrégation il faut utiliser une condition "HAVING" avant Vinstruction “GROUP BY’. 3.7. Exercices Exercice 3.1 On considére la base de données relationnelle composée de deux tables : la table Pays et la table Villes. Code = texte me CodeVilie texte = = Nonwille texte : CodePays texte Continent texte Structure de la table "Pays! : “Le champ Code contient un code unique pour chaque pays; “Le champ NomPays contient le nom de chaque pays; “Le champ Superficie contient la superficie de chaque pays, exprimée en Km? ; “Le champ Continent contient le continent de chaque pays. Exemples d’enregistrements dans la table "Pays? : f Pays Code ‘NomPays ‘Superficie Continent [ MAR Maroc 710 850 Afrique DEU Allemagne 357 386 Europe TTA italie 301 338 Europe ‘ARG ‘Argentine 2.780 000 Europe RUS Russie 1710000 Asie Structure de la table 'Villes’ : VLe champ CodeVille contient un code unique pour chaque ville; VLe champ NomiVille contient les noms des villes; “Le champ CodePays contient le code du pays de chaque ville. Exemples d'enregistrements dans la table ‘Villes’ : 35. CHAPITRE 3, ALGEBRE RELATIONNELLE Pays CodeVille NomvVille CodePays cia Rome ITIA-EEEE Ere cuN Casablanca MAR svO Moscou i[ Rus RAK "| Marrakech fe ae [Ee Berlin IC 1, Déterminer les clés primaires et les clés étrangéres dans les tables Pays et Villes, Justifier votre réponse. 2, Eerire, en algébre relationnelle, Ja requéte qui donne le résultat suivant : Les noms et les superfic s des pays du continent ’Burope’. 3. Ecrire, en langage SQL, les requétes qui donnent les résultats suivants : 4) Les noms des villes, sans répétition, dans les quelles le caractére ‘mse trouve & la 2éme et a la demiére position, Exemple : Amsterdam, b) Les codes et les noms des villes du pays Espagne’, riés dans Vordre alphabétique des noms des villes. ©) Les noms des pays, et le nombre de villes dans chaque pays, ayant le nombre de villes compris strictement entre 100 et 1000, triés dans ordre décroissant des nombres de villes. ¢) Dans certains pays, on peut trouver une ville ayant le méme nom que celui de son pays. Donner les noms de ces pays ) Supprimer toutes les villes du pays ‘Belgique’. Exercice 3.2 On considére le schéma relationnel d'une base de données portant sur des fournisseur: « Fournisseur ( idF, nom, ville ) ++ Produit (idP, libelléorigine, type , couleur) ++ Fourniture (idP, idP, quantité, prix) La table Fournisseur décrit des fournisseurs, en spécifiant le numéro (id) le nom et la ville de rési- dence. La table Produit décrit des pieces de rechange, caractérisées par leur numéro (idP), leur nom (ibelié), leur ville de fabrication (origine), leur couleur et leur (type). La table Fourniture représente les offres des fournisseurs pour les pieces quills peuvent liver. Ces offtes sont caractérisées par le numéro du fournisseur pouvant effectuer la livraison, le numéro de la pitce liveable, la quantité et le prix auquel ce fournisseur propose cette piéce. On sait également que des fournisseurs sont enregis- trés dans la base de données, méme s'ils ne fournissent pas de produits. Dans la table Fourniture en revanche, quantité ne vaut jamais zéro, on a information qu'un fournisseur a déja fournit un produit. 1. Préciser les clés primaires et les clés étrangéres des tables de la base. 3.7, BXERCICES a) Afficher les numéros des fournisseurs qui fournissent au moins un produit, ») Afficher les numéros des fournisseurs qui fournissent le produit du numéro est 6, ©) Aificher les numéros et noms des fournisseurs qui ne fournissent rien. 4) Afficher les noms et villes des fournisseurs qui ont déja fournit 2u moins un produit origi- naire de leur ville, CHAPITRE 4 Langage SQL Sommaire 4A Objectif du chapitre ©. 0... 0. eee Heese) 4.2 Qu'estce quele langageSQL os. see e eevee as sees 43° Langage de dedonnées (LD)... 6s e 0s eee eee ee eee ee eee 39 43.1. Création d'une table 39 43.2 Suppression d'une table. . ‘ eet 433. Modifcction d'une table 42 44 Langage de manipulation de données (EMD) os 6.06000 c eee eeee eens 8 4.4.1. Insertion de données eee 4.4.2 Mise & jour de données 45 443° Suppression de données ‘ 46 444 Interrogation de données a 44.5 Les requétes imbriquées ” 446 Les fonctions dagrégation .. : so 45 Le module sqlite3 du python eee otiae 45.1 Introduction... . : ‘ 2 45.2. Les fonetions supportées parle module slite3 : 32 453 Exemple 33 4.6 _Enercices sv vs ean Senos oe 56 4.1 Objectif du chapitre Dans le chapitre précédent, nous avons montré par Vexemple comment écrire des requétes en utilisant Valgebre relationnelle. Dans ce chapitre, nous introduisons le langage SQL. pour traduire les requetes obtenues & Yaide du formalisme relationnel dans ce langage. Notre objectif consiste & maitriser la syntaxe SQL, afin de comprendre les fondements des SGBD existants, tels que SQLite, MySQL, Microsoft SQL Server, Oracle, etc. 4.2 Qu’est ce que le langage SQL Le langage SQL (Structured Query Language) est un langage standard permettant & un client de communiquer avec une base de données, Il ¢ été standardisé par les deux normes ANS et 180 43, LANGAGE DE DEFINITION DE DONNEES (LDD) ir Otre intégré en interne par différents SGBD relationnels tels que SQLite, MySQL, Microsoft SQL. sever, Oracle, etc. Le langage SQL se décompose en deux parties principales qui sont le langage de base de données relationnelle, ainsi que d'en modifier ou en supprimer. Tandis que la deuxiéme partie DME se charge a la réalisation des opérations telles que sélectionner, insérer, modifier ou supprimer sg données dans une table d'une base de données relationnelle. 5 ce qui suit, nous détaillons fe fonetions de chaque partie, ot nous montrons par Fexemple 1a Le langage de définition de données permet la modification du schéma d'une base de don- nées, II propose trois opérations : la création (CREATE), la suppression (DROP) et la modi- fication (ALTER). 43.1 Création d’une table La commande CREATE TABLE permet de créer une table dans la base de données courante. Sa syntaxe est la suivante : — 1 [CREATE TABLE nom_table (colonne_1 type_t [contrainte_1], 1] (colonne 2 type 2 [comtrainte_2], colonne_n type_n [contrainte_a] Dans cette syntaxe, pour chaque colonne (attribut) on définit trois informations le nom de la colonne, son type et éventuellement une contrainte d'intégrité. Les différents types de données qu'on peut __associer pour une colonne (attribut) sont présentés dans le tableau 4.1. ‘Type Description INT Entier signé de 32 bits | REAL. Nombre réel codé sur 8 octets TEXT Chaine de caractéres sans limite CHAR(n) Chane de caractéres de longueur fixe VARCHAR(n) Chaine de caractéres de longueur variable BOOLEAN Donnée logique DATE Date exprimée sous la forme année (4 chiffres), mois (2 chiffres) et jours (2 chiffres), 1998-08-25" ‘TABLE 4.1 ~ Les différents types utilisés en SQL, a : i: CHAPITRE En revanche, une contrainte Cintégrité est une regle qui doit étre vérifiée par les données de la base, A tout moment. Llobjectif d'utilisation d’une contrainte d'intégrité est dassurer la cohérence logique de la base de données. En général, on distingue deux types de contraintes d'intégrité, la contrainte de colonnes et celle de la table. Pour le premier type, il représente une régle dintégrité qui peut étre appliquée uniquement sur une seule colonne. Tandis que Ja contrainte de table est une régle intégrité qui porte sur plusieurs colonnes en méme temps. Les différentes contraintes @intégrité sur une colonne ou sur une table sont indiquées dans la table 4.2. ——_—— Cont De NULLINOT NULL ‘autorise (NULL) ow interdit (NOT NULL) insertion de la valeur NULL pour | une colome (lsu colonnes PRIMARY KEY a seule fois dans Vinstruction. re une colonne (ou plusieurs). Ceite con UNIQUE indique que la colonne oa ka liste des colonnes engendrent Punicité de Menre- gistrement (forment une clé secondaire). Avec cette contrainte, la colonne peut prendre la valeur NULL. Cette contrainte peut apparatre plasieuts fe | CHECK (condition) indique que la condition qui porte sur une ou plasicurs colonnes de Ta table doit etre toujours satisfaite. Cette contrainte doit €te vérifiée lors de Minsertion de lignes que Pattribut réalise cette condition | FOREIGN KEY perinct, pour les valeurs de la colonne, de faire référence & des valeurs pré exitantes dans une colonne dune autre table. DEFAULT atiribue une Valeur par défaut st aucune donage n'est indiquée que pour cette colonne fors de Pajout d'une ligne dans la table TABLE 4.2~ Les différentes contraintes d'intégrité Exemple 4.1 Création de la table Auteur(La base de données Bibliotheque chapitre 2) : + AuTeUR(ID_Auteur, Nom, Prenom) CREATE TABLE Auteur ( 1D_Auteur INTEGER NOT NULL PRIMARY KEY, Noma TEXT, Prenom TEXT yb Création de la table Livre(La base de données Bibliothéque chapitre 2) Livre({D_Livre, Titre, 1D_Auteur, Annee_Edition, Nbr_Pages) 4,3, LANGAGE DE DEFINITION DE DONNEES (LDD) (CREATE TABLE Livre ( ae ID_Livre INTEGER NOT NULL PRIMARY KEY, : Titre TEXT, 1D_Auteur INTEGER NOT NULL, Annee_Edition INTEGER, Nbr_Pages INTEGER, FOREIGN KEY(ID_Auteur) REFERENCES Auteur(ID_Auteur) 4.3.2. Suppression d’une table La commande DROP TABLE permet de supprimer dé“initivement une table d'une base de données. Sa syntaxe est la suivante : 1 {DROP TABLE nom_table; Remarque 4.1 Si on veut supprimer une table qui est relige 8 d'autres tables par des clés étrangeres, il est recommandé de les supprimer avant de supprimer la table concernée. Crest le cas par exemple de la table Auteur et la table Livre, Exemple 4. Suppression de la table Auteur. ‘Sveare delasusedeouendes Parca es dndes GiiersPrgras | Beda SQ oeewente petrinindee | Qin Type ‘Avant la commande DROP ian DROP TABLE Auteur; 3 + Résultat : 4 aie i CHAPITRE 4, LANGAGE SQL. Structure dela Bae de Données! pareoc es doindes ail Pragnas "Enda e SOL (Goeerunetatie —y créerunindex | Qh arpriner [Nom “ype Ey Te > (3) Empronteurs > E) Beudiant Apres la commande DROP + El tne (i Yue Ef dices 4.3.3. Modification d’une table La commande ALTER TABLE permet de modifier Je schéma d'une table existante, a l'aide de cette commande, on peut ajouter, supprimer ou modifier une colonne. Sa syntaxe est la suivante : = SSE ees ces: 1 [ALTER TABLE aom_table instruction; f | Le mot-clé « instruction » ici sert & désigner une commande supplémentaire, qui peut étre : — ADD nom_colonne type_donnees :permet @ajouter une colonne. — DROP nom_colonne : permet de supprimer une colonne. ~ MODIFY nom_colonne type_donnees : permet de modifier une colonne. Exemple 4.4 Ajout de la colonne Date_Naissance dans la table Btudiant, ‘Sbuctre dels Bose deCerndes.” Paccurinesdoreéet Eateries Pragnar — Exéauterle SOL Wai aml Net } Nasi Semi ea Kem Mohamed NPR 4 au Ahmed Adi eR 5301 aie mane Pst 6 209 Hames Ayoub sa 7 210 ia ‘Ayoub eo ‘Chakri Rajae 4.4, LANGAGE DE MANIPULATION DE DONNEES (LMD) [ALTER TABLE Etudianc 2 {ADD Date_Naissance DATE; + Résultat: Stucture df ce de Données Parco les domes trie Pragraz _exbeuer le 9a @eses Beale te Hele ote aan 100 jabato 26 recon Yeon m2 ‘anil Mohamed we a 5 210 Anz mane Pst o'r von ab 7312 Nadia ‘Ayoub ‘MPL ar am Onin Rae 44 Langage de manipulation de données (LMD) Aprés avoir eréé la base de données a l'aide du langage de définition de données, on introduit le langage de manipulation de données pour manipuler les tables de cette base. En effet, ce deuxitme langage, se charge a la réalisation des opérations telles que sélectionner, insérer, modifier ou suppri- mer des données dans une table. 44.1 Insertion de données La commande INSERT INTO permet d’ajouter une ligne ou une partie d'une ligne dans une table existante. IL existe deux formes pour insérer des données dans une table, la syntaxe correspondante pour chaque forme est indiquée ci-dessous : i iii — Syntaxe SQL de la premitre forme INSERT INTO nom_table VALUES C'valeur 1’, ‘valeur 2°, ... ‘valeur a’); Dans cette forme, pour insérer une ligne, il suffit d’indiquer les informations pour chaque colonne existante en respectant lordre. — Syntaxe SQL de fa deuxiéme forme INSERT INTO nom_table (nom_colonnel, nom_colonne2, ...) 2|VALUES ('valeur 1”, ?valeur 27, ...)4 (isc CHAPITRE 4, LANGAGE SQL. Dans cette deuxiéme forme, pour insérer une ligne, il suffit de spécifier les colonnes qu’on souhaite compléter Il est possible d'insérer une ligne en renseigner seulement une partie des colonnes. Exemple 4.5 Insertion des auteurs dans la table Auteur. — (AI07,/RAMALHO’ Luciano’) — (B202’,CORMEN’, Thomas’) — ('€300'DELANNOY’ Claude’) — (A102/’ANTONINI' Christophe’) ‘Stucuredela nase deComées Parcou las domes teres ragnes Exécuter SQL Table: [Tas Nom Prenom ite INSERT INTO Auteur ‘VALUES( "A101", 'RAMALHO’ , ‘Luciano "); Stuctre dele Gase de Dornies Parco les dornées Eh les Pragnse xdcute SQL a a Luciana | ERT INTO Auteur VALUES (°B202" , "CORMEN’, "Thomas"), (C300 " "DELANNOY” , "Claude *), 4 | CA102", "ANTONINI’ "Christophe *); 2 +R 4 4.4, LANGAGE DE MANIPULATION DE DONNEES (LMD) La commande UPDATE permet d'effectuer des modificatis SeikreEa deDE vacant cere {Bai ragal Besele ig ese Prenom Fire Five Luciano CORMEN Thomas DELANNOY Claude ANTONIE Christophe 44.2. Mise A jour de données ns sur des lignes existantes. Linstruction WHERE est souvent combinée avec cette commande pour indiquer sur quelles lignes doivent porter les modifications. La syntaxe de cette commande est la suivante SET colonne_1 = colonne=2 colonne_i [UPDATE nom_table ‘valeur_1’, ‘valeur_2", "valeur _i WHERE condition; Linstruction SET indique quels champs de la table vont étre mis & jour et avec quelles valeurs ils vont étre. Nous signalons que les champs non spécifiés aprés Pinstruction SET ne seront pas modifiés. De plus, sila clause WHERE est absente, tous les enregistrements de la table seront affectés. Exemple 4.6 Modification du prénom de auteur ayant 'identifiant ‘A101’ en ‘Lewis’, Parcoutles domées | Giterleragrat Bxdetrle SOL Fite Five Fite ‘On modifie le prenom |: foot RAMALKO Lucero de Vauteur ‘A101 |2 e202 CORMEN Thomas 3 C00 DeLANNOY Claude 4 A102 [ANTON Ghristophe Roe 3 |WHERE ID_Auteur 2| SET Prenom = *Lewis” "ALO"; — eS“ CHAPITRE 4, LANGAGE SQL, + Résultat : Smuckre de Gane deDornes Parcourles doves | ete es Pragmas Exdatarle SL eS ie Bl ae ffite Fe Five | Le prenom de Pautour gAtoL RAMALHO. Lewis hi feo anes] gern den 2a Come Thome 5 cao Detamoy —cowde + ai02 Avrount —— Crsophe 443 Suppression de données La commande DELETE permet de supprimer des lignes dans une table. La couplage de cette com- mande avec 1a clause WHERE, permet de sélectionner les lignes concernées qui seront supprimées, Dans Je cas oi il n'y a pas la clause WHERE, toutes les lignes seront supprimées et la table sera alors vide, La syntaxe de cette commande est la suivante : 1 [DELETE FROM nom_table — 2 | WHERE condition Exemple 4.7 n des auteurs dont les prénoms commencent par la lettre ’C, Suche dela Base de Dernéss Porcaub les corres ites Pragnas edeutere Sal | aor RANALIO Luciano {3 00 DELANNOY — daude Jes prenoms qui DELETE FROM Auteur WHERE Prenom LIKE ‘Ci; + Résultat: 46 : 4.4, LANGAGE DE MANIPULATION DE DONNEES (LMD) ‘Smuchre dela ase de Cores Parc les dorndes Dans une requéte SQL, l'opérateur LIKE est utilisé dans la clause WHERE pour effectuer une recherche dans des chatnes de caractéres. On utilise LIKE avec les caractéres _ et %. Le premier est employé pour remplacer un caractére inconnu, le second pour remplacer 0, 1 ow plusieurs caractéres inconnus. 4,44 Interrogation de données La commande SELECT permet d'afficher (intetroger) les données d'une table existante. La syntaxe de cette commande est la suivante : SELECT nom_colonnel, nom_colonne2,, FROM table WHERE condition ; La clause WHERE permet diintroduire une condition pour déterminer les lignes & afficher. SQL sup- porte des opérateurs de comparaison (<, <: >, <>), logiques (AND, OR), de test de va- leur manquante (IS NULL, IS NOT NULL), de recherche textuelle (LIKE), de sélection d'intervalle (BETWEEN) et de liste (IN, NOT IN). 1 Exemple 4.8 Alfichage des prénoms des étudiants qui commencent par ’A et se terminent par b’ | Etudiant | Wieden [Nox Tpmwon | Gao 7 wa [aman 7 caffe] en He 103 Kamili Mohamed | MP2 | 7 rer aa SEE FP a cae weet 7 vom aya | we 7 ata 7 cna [ae [wr 47 CHAPITRE 4, LANGAGE SQL [SELECT Prenom FROM Auteur: 3 |WHERE Prenom LIKE '#0ib’; + Résultat : Résultat Prenom Ayoub youl Remarque 4. Pour éliminer les doublons dans les résultats il faut simplement ajouter DISTINCT aprés le mot SELECT. 1 [SELECT DISTINCT Prenom 2|FROM Auteur a |WHERE Prenom LIKE Ab’; » Résultats Résultat Prenom ‘Ayoub Exemple 4.9 Affichage des identifiants, des noms et des prénoms des étudiants qui n'ont pes encore rendu des livres qu’ils ont emprunté avant le 2019-10-05’. On convient que sila Date_Retour’ n'est pas renseignée alors ce champs reste & "NULL. Emprunteurs W_Beudiant | D_Live | Date Eomprunt] Date Retour 100 act | 2019 09-12 | 2010 00-24 100 200 i909 =a | 291010 ~02 m1 31 ang ~10~ «2 | NULL | as ‘amg 10-12 | 2010-10-14 a 220, | 2019-10-12 | nue [og =s0—9 | nvae 1 [SELECT Beu-1D_Btudient , Nom, Prenom 2]mRoM” Etudiant AS Et’ JOIN’ Emprunteurs AS Emp 3/ON Btu. ID_Etudiant = Emp. 1D_Etudiant {WHERE Date_Emprunt <= '2019-10=05" AND Date_Retour 1S NULL; 4.4. LANGAGE DE MANIPULATION DE DONNEES (LMD) C- Résultat [osetia [Rom] renoat [a erecta Remarque 4.4 Dans le but de pouvoir récupérer les renseignements sur [es étudiants ayant emprunté des livres, lajointure entre la table "Etudiant et la table Emprunteurs’ est nécessaire. Pour lever Tambiguité concernant la colonne '1D_Etudiane, il suffie de préfixer "ID_Etudiant’ par le nom de la table et un point :"Etu..D_Etudiant’ ou ’Emp.ID_Etudiant’ (Etu’ et ‘Emp’ sont des alias respectivement sur les tables "Etudiant’ et "Emprunteurs’) Exemple 4.10 Les identifiants, des noms et des prénoms des étudiants qui n’ont pas encore rendu des livres qu'ils ont emprunté avant le '2019-10-05', On affichera également, cette fois-ci les titres de ces livres et les dates d’emprunts | [SELECT Etu.1D_Etudiant, Nom, Prenom, Titre, Date Empront 2|mROM Etudiant AS Eta 3/JOIN Emprunceurs AS Emp ON Etu.ID_Etudiant = Emp.1D_Etudiant 4{JOIN Livre AS L ON L.ID_Livre Emp. 1D Livre 5 |WHERE Date_Emprunt <= '2019-10-05" AND Date Retour 1S NULL; i Résultat [jgiadiane [Nom [enon [tive [Bate pro | [oot fac | tnane “algtone nog 10~2 | 44.5 Les requétes imbriquées Une requéte imbriquée est appelée aussi sous-requete, consiste a exécuter une requéte a intérieur d'une autre requéte, Une requéte imbriquée est souvent utilisée au sein d'une clause WHERE ou de HAVING pour remplacer une ou plusieurs constantes. Les opérateurs utilisés pour exprimer une condition dans une requéte imbriquée sont donnés ci-dessous — EXISTS : cette commande permet de verifier sil y a une présence ot) Hoi de lies lorsde — ALL : cette commande permet de comparer une valeur avec le résultat d'une sous-requéte. Leexpression est vraie si toutes fes comparaisons sont vraies: — ANY : cette commande permet de comparer une valeur avec le résultat d'une sous-requéte. expression est vraie si au moins une des comparaisons est vra 49 CHAPITRE 4, LANGAGE SQL Exemple 4.11 Affichage des éudiants qui sont dans la méme classe que Fétudiant dont l'identifiant est 100. SELECT + FROM Etudiant WHERE Classe = ( SELECT Classe FROM Etudiant WHERE [dEtudiant = 100); Exemple 4.12 Affichage des étudiants qui ont emprunté au moins un livre. SELECT + ae ROM Etudiant AS Etu WHERE Exists ( SELECT « FROM Emprunteurs AS Emp WHERE Bmp. 1D_Etudiant = Etu.1D_Btudiant); Affichage des identifiants de tous les livres récemment empruntés. SELECT ID_Livre ROM Emprunteurs WHERE Date_Emprunt >= ALL (SELECT Date_Emprunt FROM Emprunteurs ); 44.6 Les fonctions d’agrégation Comme nous avons déjé évoqué dans le chapitre 3, le concept d’agrégation permet de réaliser tune partition de ensemble des lignes d'une table (chaque élément de la partition constitue un agré- gat) au moyen d'un certain critére portant sur les attributs de la relation pour ensuite effectuer une méme opération sur chacun des agrégats. Pour utiliser une fonction @agrégation, on fait appel & la commande SELECT selon la syntaxe suivante SELECT FONCTION_AGREGA(colonne) ,.. FROM nomTablel, nomTable2 ,.. WHERE condition GROUP BY colonne HAVING condition; 50 jon SUM(} qui permet de calculer la somme des éléments d'une colonne. La fonction COUNT () i permet de compter le nombre des éléments d'une colonne, Le fonction AVG() qui retourne la jer moyenne concernant les éléments d'une colonne. La fonction 428 () qui retourne la plus setite Van. “une colonne et la fonction MAX () qui renvoie la valeur maximale d'une colonne. in général, on introduit la commantle GROUP BY pour regrouper les lignes ayant des valeurs identiques dans une ou plusieurs colonnes issues de l'instruction SELECT, en une seule ligne. De plus, mmande HAVING permet de filter la sélection des groupes figurant dans le résultat en utilisant _ (exemple 4.13 ‘Affichage du plus grand, plus petit et la moyenne de pages de tous les livre {SELECT MAX(Nbr_Pages), MIN(Nbr_Pages), AVG(Nbr_Pages) ROM Livre; {Exemple 4.14 Affichage du nombre d’emprunt pour chaque étudiant ayant emprunté un livre. On récupére ce résultat par ordre décroissant du nombre demprunt. i [SELECT 1D_Beudiant, COUNT(+) AS Nbr_emprunts FROM Emprunteurs GROUP BY 1D_Etudiant [ORDER BY Nbz_emprunts DESC; -{Remarque 4.6 ORDER BY permet de trier les lignes dans un résultat dune requéte SQL. Il est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant (ASG) ou descendant (DESC). Exemple 4.15, Affichage des identifiants des étudiants ayant emprunté plus de 4 livres & partir du '2019- 10-02. 1 {SELECT 1D_Btudiant, COUNT(=) AS Nbr_empruats 2 /FROM— Emiprunteurs 3 |WHERE Date_Emprunt >= °2019-10~-02" <|GRoup By ID_Etudiant 5 [HAVING Nbr_emprunts >= 4 5h CHAPITRE 4. LANGAGE SQL 7 1 |Sitecr 1D_Livre FROM — Emprunteurs: Rov ay 1D_Livre 4 HAVING COUNT(+) > 33 1 Sticr 1D_Livre, Titre 2/RoM Livre s|WHERE Noe_Pages = ( SELECT MAX(Nbr_Pages) ‘ FROM Livre): — Exemple 4.18 ‘On affiche les noms et les prénoms des étudiants de la classe “MPI' qui ont déja emprunté plus de 3 livres. 1 [SELECT Nom , Prenom 2|Rom Eeudiant AS Et 3/JOIN Emprunteur AS Enp ON Etu.1D_Etudiant = Emp.1D_Etudiant 4 [WHERE Classe = 'MPL" 5 |GRoup py Emp. 1D_Etudiant 6 |BAVING GOUNT(+) > 33 45. Le module sqlite3 du python 45.1 Introduction suite est un SGBD open souree, qui utilise le langage SQL. Ce SGBD est la seule base de données relationnele qui est installée avee Python, & Taide du module sqlite3. Une base de données SQLite, est représentée aide d'un fichier. Dans ce fichier, il y aura plusieurs tables avec une gestion proche de celle des fichiers. Lavantage majeur de SQLite réside dans sa capacité & gérer des tables de plusieurs centaines de milliers de lignes sans probléme, 4.5.2 Les fonctions supportées par le module sqlite3, De nombreuses fonctions sont disponibles dans le module sqlite3, afin d'assurer la communication centre le langage python et le SGRD SQLite. Llensemble de ces fonctions avec leurs deseriptions sont présentées dans le tableau 4.3, 32 _[ Fonetion 4.5, LE MODULE SQLITE3 DU PYTHON Deseription connect() ceite méthode permet de se connecter & une base de données ‘cursor() ‘des curseurs sont utilises pour les interactions avec Ia base : émission de requetes SQL execute() cette méthode qui permet |"évaluation dune requéte SQL executemany() cette méthode permet l'exécution de valeurs retardées fetchone() cette méthode permet de récupérer une seule ligne d'une requete SQL. fetehall() cette méthode permet de récupérer toutes les lignes d'une requéte SQL. closet) ‘cette méthode permet la fermeture de la connexion avec une base de données. ‘commit() cette méthode permet de valider une transaction avec fa base. rollback() ‘cette méthode annule une transaction avec la base. L’annulation de toutes les modifi- cations apportées & la base de données se fait depuis le dernier appel & commit) 43,3. Exemple Nous allons eréer une base de données nommée "Bibliotheque.sqlite’ dans le dossi TABLE4.3 ~ Les différentes fonctions supportées parle module sqlite sea\\n Dans cette base, nous allons créer une table "Livre" contenant les champs suivants live teeta [ne Conran Live | varcHarcea) | clé primaire Fae sone SHE Opa ‘ancy | vows eaten [tea | - Pas ormoee [= — Création de Ja base de données import sqlite 2|db_loc = "C:\\ Bibliotheque. sqlite” conn = sqlite3 .connect(db_loc) Création de Ja table Livre’ ¥ Curseur # Creation pour les interactions avec a base: emission de requetes SQL curseur=conn. cursor () de la table curseur.execute("'" CREATE TABLE IF NOT EXISTS Livre ( ID_Livre VARCHAR(20) PRIMARY KEY, Titre VARCHAR(20),, TD_Auteur VARCHAR(20) , Annee Edition INTEGER, Nbr_Pages INTEGER) ;" ) wl conn.commit() # Validation de la creation de 1a table Livre CHAPITRE 4, LANGAGE SQL — Insertion des enregistrements dans la table ‘Livre’ INSERT INTO Livre VALUES ‘A101" ,*2019* ,700); curseur 71200" curseur.execute(***INSERT INTO Livre VALUES ("1210",,"Algorithmes” ,"B202" , 1 xecute( a 4 s|curseur.execute(" "INSERT INTO Liv: 6 7 8 Programmer en Python’ wy "1213" "Java" ,"¢300" 787)3""") curseur. execute ("* INSERT INTO Livre VALUES ('MIOL" ," Algebre” "A102" ,"2015" ,416);""") 9 | curseur. execute ("" "INSERT INTO Livre VALUES 10 | (°1102" , "UME" "A103" ,*2016" ,341);""") u1 | curseur.execute(""*INSERT INTO Livre VALUES 12| ("L20* ,"Origines” ,"B105" ,"2006" ,507);""") 13 |conn.commit() _#Validation — Récupération des données On peut récupérer la premiére ligne d'une requéte & 'aide de la fonction fetchone. curseur.execute(""* SELECT « FROM Livre ;"**) curseur. fetchone() Le résultat est un tuple : [(°1200" ,*Programmer en Python”, A101" ,"2019" ,700) ] —+ On peut récupérer tous les éléves & l'aide de Ja fonction fetchallO. curseur.execute(""* SELECT + FROM Livre; "**) L = curseur. fetchallO, print(L) —sLe résultat est une liste de tuples : [('1200" , "Programmer en Python® 2019" ,700), 1 2| 1210" ," Algorithmes* ,"B202" ,"2013",240), 3] (*1213" "Java" , "C300" ,"2008" ,787),, | COMI0I" |" Algebre" "A102" ,"2015" 416), s| C1102" , "UML" ,"A103" "2016" 341), q 6 | (°L20", "Origines" ,"B105" ,"2006" ,507)] | — Affichage de la liste des livres publiés avant 2013. curseur.execute(**" SELECT + 1 2 FROM Livre 3 WHERE — Anne_edition <= 2013 4]C = curseur. fetchallO s| print(C) 4.8, LE MODULE SQLITES DU PYTHON [cecurseur. execute ("*" SELECT + FROM Livre WHERE Anne_edition <# 2013; for e in C: . print (2) —rLe résultat : (71210" ,"Algorithmes" ,"B202","2013",240), 11213" ,"Java" ,"C300" ,*2008" ,787), ("L20" ," Origines” ,"B105" ," 2006" ,507)] Calcul du nombre moyen de pages de tous les livres : curseur.execute(*** SELECT AVG(Nbr_Pages) FROM Livre; "™") Im = curseur. fetchone 0) print("Le nombre moyen de pages de tous les livres : \%.2f*\90(a{0)[0])) Le résultat : Le nombre moyen de pages de tous les livres : 498,50 Recherche par une fonction Python : “+ Une fonction Python recherche (an) qui prend en entrée une année et qui renvoie la liste des livres publiés en cette année : def recherche (an): ab_loc = "C:\\Bibliotheque. sqlite conn = sqlite3 .connect(db_loc) er = conn. cursor () R=" SELECT + FROM Livre WHERE Annee Edition = 7 ;7*" cr. execute (R, (an) leer. fetchall O conn. close () return L Le résultat : 55> recherche (2006) [(°L20", *Origines’, 'B105”, 2006, 507)) a fermeture de la connexion ~»Pour fermer la connexion avec la base de données on utilise la syntaxe suivante : conn. close () CHAPITRE 4, LANGAGE SQL. 4.6 Exercices Exercice 4.1 ‘Une entreprise souhaite avoir & sa disposition une application pour gérer les congés de son personnel. Le responsable de cette entreprise a fourni les données suivantes : Chaque employé recoit, durant chaque année, un congé, de 26 jours, qui peut étre pris en une seule {ois ow en plusieurs fois sans dépasser !e nombre de jours de congé autorisé durant une année, Un employé a droit de reporter une partie ou la totalité de son congé a une année ultérieure, La gestion de ces congés nécessite la gestion d'une base des données nommées "GestCongé. sqlite” qui est composée des tables suivantes : — Employé(Matricule , NomPr, AnnéeEmbauche) — Congé(Numéro, DateDebut, NbtJr, Type, Matricule) On précise que la clé primaire de la table Employé est attribut "Matricule’ et celui de la table Congé est Vattribut ‘Numéro’ par contre Pattribut "Matricule’ de la table Congé est une elé secondaire dans cette table. On suppose que les tables sont créées, la liaison entre ces tables est établie et les données sont saisies en voila un extrait de chacune des deux tables : pa { Matricute _[ NomPr ‘AnnéeEmbauche Dt, Hamri Anwar | 2016 [Ma Salmi Hind | 2015 [Ms Asti Sami 2016 [MG Radi Amina | 2015 l 1 [ Numéro | DateDebut [ Nord ‘Type _| Matricule [_&__ [2015-11-15 | 10 Maladie Mp | & 2015-11-16 | 20 Normale My, | | 2015-11-16 | 15 | Accouchement | Mz Gyo | 2015-12-29 | 18 Normale | Ma | i | Coos t 2016-12-28 | 10 | Normale My [ Coep | 2016-12-29 | 6 Normale | Ma [Goa | 2017-01-01 | 5 ‘Maladie Ms [Gon __| 2017-01-01 | 10 | Accouchement | Mz i Partie! — Algébre Relationnelle 1, Herire la requéte sélectionnant les noms et les prénoms des employés, embauchés 'année 2015. 56 4.6, EXERCICES 2, ferire la requéte sélectionnant les numéros des congés, letrs date début et leur nombre de jours, regu par ‘Asti Sami Partie I] — Langage SQt 1, Eerire la requéte SQL correspondante a la question 1 2, Kcrire la requéte SQL correspondante a Ia question 2 3. Berire la requéte sélectionnant toutes les données des employés ayant effectué des congés le mois de décembre de l'année derniere; 4, crite la requéte aftichant les noms et les prénoms des employé: ayant regu des congés aut ‘cours de cette semaine(entre la date d'aujourd’hut et la date Paujourd’hui - 7jours ); 5. ficrire la requéte déterminant, pour chaque employe identifié par son matricule, son nom et son prénom, le nombre Total des nombres de jours de ses congés requ & partir de l'année 2016; 6, Herire la requéte affichant les mois des années dont l'ensemble des employés ont recu plus de 50 jours de congés. 7. Eerire la requéte affichant les noms et prénoms, triés en ordre croissant, des employés ayant regu des congés de type normale, éviter les doublons. 8, Ecrire, de deux fagon différentes la requéte sélectionnant les numéros des congés et leur date début concernant les congés dont le nombre de jours est inférieur strietement 2 15 et les congés de type maladie. Partie IT — Langage Python Dans cette partie, seuls les opérateurs SQL “select, “rom, ‘join’ et ‘on’, “insert inte’, values’ sont autorisés lors d’une expression concernant une requéte SQL. En utilisant les instructions du langage Python 1. Ecrire une fonction ListeCongEmp (m) qui prend comme argument, un matricule d'un em- ployé afin dafficher la liste des données des congés, repérées par leur numéro, leur date, leur nombres de jours recu par cette employé, pendant Pannée 2016. On affichera, également, le total des nombres de jours de congés regu par cet employé pendant cette année. 2. Ecrire une fonction ListCongan (a) qui prend comme argument, une année a, afin d'afficher, pour chaque mois de cette année, le nombre total des nombres de jours de congés regu par Yensemble des employés pendant chaque mois de l'année passées comme paramétre cette fonction. 3. Ecrire une fonction Transferer (t,n£) qui prend comme argument, un type de congé (pa- ram@tre t) et un nom de fichier(paramétre nf) afin de créer un fichier texte dont le nom est Ie nom passé par le paramétre nf et dont le contenu est les noms et prénoms des employés, ayant regu des congés de ce type de congé, qui seront séparés par deux symboles (tiré de 6) avec les dates de congés concernant les congés sélectionnés du type passé, comme paramétre & cette fonction. 37 CHAPITRE 4, LANGAGE SQL. 4, Berive une fonction Archiver (Dt) qui prend comme argument une date (paramétre DO) afin ajouter tous les congés, regus pendant certe date, dans une table Archive(Nuimero, DateDeb, Nord, Matricule, NomPr) supposée existante dans la méme base de données. 58 Deuxiéme partie ALGORITHMIQUE ET PROGRAMMATION AVANCEES LLANE CHAPITRE 5 Récursivité Sommaire Sl Objectif du chapitre 00. ee eee eee e eres cree ener neee peeee O1 52. Concepts de base surla récurrence. os 6s eee verses ee ree rears 1 5.2.1 Récurrence en mathématique . cee cetveevee es @ 5.2.2. Qu'est ce qu'une fonction récursive? eee he e 523 Comment éerite une fonction réeursive? . . . a erenseneesearaice a3 523. Différents types de récursivité 66s e severe eee etcetera 6] 53.1 Recursive simple... ees 7 7 : ve B 53.2 Récursivité multiple. . ae He o 533. Récursivité imbriquée 6... ss oe 2 . 64 53.4 Récursivité mutuelle Seer eaar tate : sees 54 Exécation d'une fonction réeursive sve serene eee . 6 SA.L_Lapile des appels oe EPA eee 68: 5.4.2 Limitation de la récursvité en Python. « « 7 sees 6 SS Exercices ose e eee eeee erent aret 7 a 5.1 Objectif du chapitre Une approche efficace pour résoudre un probleme complexe, consiste ale: décomposer en plusieurs sous problémes plus simples qui seront étudiés séparément. D’autre part, il arrive souvent qu'une tméme séquence d'instructions sera utilisée & plusiewrs reprises dans un programme. La programme: tion modulaire permet de résoudre les diffcultés évoquées ci-dessus en introduisant les fonctions. En effet, une fonction représente tne entité de données et d'instructions qui permettent de fournir une solution a une partie bien définie d'un probléme complexe. Lavantage majeure de cette approche modulaire, réside dans sa capacité de réutilisation des fonctions déja existantes. Cela signif qu'wne fonction peut appeler n'importe qu'elle autre fonction selon les besoins. Dans ce chapitre, nous nous focalisons sur le cas oli une telle fonction qui s'appelle elle-néme, CHAPITRE 5, RECURSIVITE 5.2. Concepts de base sur la récurrence 5.24 Récurrence en mathématique Nous allons commencer par exemple de la suite numérique (u,,) définie pour n € N par : uy =1 Uy = Deyn +3 En effet, ua est appelé une suite récurrente, qu'on peut Pexprimer sous la forme suivante : tn = 24 (24 (2a wy +3)n) +3) 49 Le principe de la récursivité a une grande similitude avec le principe de récurrence en Mathématiques ui est basé sur deux étapes at tion : consiste & vérifier qu’une propriété P{n) dépendant d'un entier n est vrai pour un certain ng. C'est ce qui correspondra aut test dParrét pour la récursivité, ~ Hérédité : on suppose que la propriété P(n) est vrai pour un certain entier n > ny et on montre quelle est vrai & Vordre n + 1. Ce qui correspondra & Pappet de la fonction récursive 5.2.2 Qu’est ce qu’une fonction récursive? Définition 5.1 Une fonction est dite récursive si elle s'appelle elle-méme au cours de son exécution. Parmi les avantages dune solution récursive, nous citons que cette approche est souvent plus simple, plus lisible et aussi plus facile & prouver qu'une solution itérative (boucle for ou while). De plus, cette approche est plus adaptée lorsqu’elle est appliquée & une structure récursive comme les listes, les arbres, etc. Cependant, son inconvénient majeur réside dans son exécution qui nécessite Putilisation lune pile d'appels. L’appel de cette pile, peut provoquer des débordements de la mémoire, 5.2.3 Comment écrire une fonction récursive? Liidée de base pour écrire une fonction récursive, consiste A définir tout d’abord le modéle ma- thématique de la fonction de récurrence. Dans ce modéle de mathématique, il faut déterminer la condition d'arrét pour assurer la terminaison de lalgorithme, Considérons la fonction Factorielle définie ci-dessous : fet sin=0 nx (n=! sinon cde i te Be UL 02 5.3, DIFFERENTS TYPES DE RECURSIVITE, avant décrire le code d'une fonction récursive qui permet de calculer la factorielle on doit vérifier x " Jes deux points suivants : _— nl =n x (n— 1)! représente la relation de récurrence. — 0! ~ U représente la valeur de la terminaison de T'algorithme. Nous proposons ci-dessous les deux fonctions faet_it(n) et fact_re(n). La premitre fonction repré- sente une solution itérative qui retourne la valeur de a, tandis que Ia deuxiéme fonction est une version récursive qui fat le méme traitement que la premiére fonction. def Fact_it(n}: fel for i im range(1n+1): fete return f anaebuWAppel de Ie fonction >>>fact_ie (8) 120, [eer fact, if a: return 1 else: return nv fact_re(n-1) asrexe Appel de la fonction noo fact_re (5) 120 5.3 Différents types de récursivité 5.3.1 Récursivité simple Définition 5.2 La récursivité simple consiste faire un seul appel récursif pour la fonction P dans le corps dune fonction récursive P | Exemple Considérons la fonction Puissance définie ci-dessous : oe sin=0 2 zea") sinon def puissance Re(x,): if n==0: return 1 else: return xe puissance_Re(x,n=1) 63 CHAPITRE 5, RECURSIVITE, ( 5.3.2 Récursivité multiple Définition 5.3 Une récursivité est multiple s'il y a plusieurs appels récursifs A une fonction P dans le corps d'une fonction récursive P. Suite de Fibonacci : def Fibonacei_Re(n): 2 if n==0 or 3 return 1 4] else 5 return Fibonacci_Re(n—1)+Fibonacei_Re (n-2) 5.3.3 Récursivité imbriquée Définition 5.4 Une récursivité est dite imbriquée si une fonction récursive P contient tun appel imbriqué. La fonction d’ACKERMANN : ptt sin=0 Ack(n,p) = ¥ Ack(n — 1,1) sin>Qetp=0. Ack(n— 1, Ack(n,p~ 1) sinon ifdef ack(n,p): 2] if ned: 3 return p#l 4 : s return ack(n-1,1) 6 return ack(n—1,ack(n,p~1)) 6

You might also like