1 Cours AR ENASTIC-AMDJARASS 2022-2023 L3-ASRS Dr Abakar Mahamat Ahmat Algèbre

1 Cours AR ENASTIC-AMDJARASS 2022-2023 L3-ASRS Dr Abakar Mahamat Ahmat Algèbre Relationnelle et langage SQL Introduction "La conception et l'utilisation de bases de données relationnelles sur micro- ordinateurs n'est pas un domaine réservé aux informaticiens". C'est en tout cas ce que pensent beaucoup d'utilisateurs en voyant ce type de logiciel intégré aux suites bureautiques les plus connues. Cependant la maîtrise d'un SGBDR micro (Système de Gestion de Bases de Données Relationnelles) est loin d'être aussi facile à acquérir que celle d'un logiciel de traitement de texte ou d'un tableur. Plusieurs étapes sont nécessaires à la mise en place d'une base de données, dès lors que l'on a précisément défini ses besoins (ce qui n'est déjà pas chose facile !) : la création de la structure de la base sous forme de tables (tableaux de données) reliées entre elles par des données clés, la conception des requêtes qui permettront d'extraire ou de mettre à jour les informations qu'elle contient, la conception de l'interface homme-machine (écrans et états) qui rendra plus conviviale la saisie et la restitution des informations. Le degré de difficulté dans la conception de l'interface varie beaucoup selon le logiciel utilisé qui est d'ailleurs le plus souvent différent du SGBDR. La conception de la structure de la base de données, si elle est un peu complexe à appréhender, peut nécessiter, en amont, l'utilisation d'outils de modélisation conceptuels de type entités-associations (Modèle Conceptuel des Données de la méthode MERISE ou diagramme de classes du langage UML). Mais, même dans les cas les plus simples il faut obligatoirement connaître les concepts du Modèle Relationnel, sans quoi un utilisateur non averti pourra toujours arriver à créer une structure inadaptée et sera vite bloqué dans la conception des requêtes. Il s'agit ici, d'étudier les principaux opérateurs de l'algèbre relationnelle servant de base à l'élaboration et à l'analyse (plan d'exécution) des requêtes. Bon nombre d'utilisateurs qui voient les matériels informatiques et les logiciels changer tous les trois mois, seraient surpris d'apprendre que l'algèbre relationnelle a été définie par Codd en 1970. Elle est à l'origine du langage SQL (Structured Query Language) d'IBM, langage d'interrogation et de manipulation de tous les SGBDR actuels (Oracle, PostgreSQL, MySQL, MS SQLServer, MS Access et tous les autres). 2 Une bonne maîtrise de l'algèbre relationnelle permet de concevoir n'importe quelle requête aussi complexe soit elle avant de la mettre en œuvre à l'aide du langage SQL. Parmi les opérations de l'algèbre relationnelle, on dispose d'opérations classiques sur les ensembles (union, intersection, différence, produit cartésien) puis d'opérations propres (projection, sélection, jointure, division). Sont également exposées ici des opérations de calcul, de regroupement, de comptage et de tri, non définies à l'origine par Codd mais très utiles. Tous les opérateurs sont présentés à l'aide d'exemples clairs. Pris séparément, ils sont faciles à appréhender. La rédaction de requêtes (combinaison d'opérateurs) est illustrée par des exercices concrets. Le langage SQL n'est abordé que dans le cadre des opérations évoquées ci-dessus. Seule l'instruction SELECT et ses multiples aspects sont donc présentés. I - Les opérations de base Opération PROJECTION Formalisme : R = PROJECTION (R1, liste des attributs) Exemples : CHAMPIGNONS Espèce Catégorie Conditionnement Rosé des prés Conserve Bocal Rosé des prés Sec Verrine Coulemelle Frais Boîte Rosé des prés Sec Sachet plastique R1 = PROJECTION (CHAMPIGNONS, Espèce) Espèce Rosé des prés Coulemelle R2 = PROJECTION (CHAMPIGNONS, Espèce, Catégorie) Espèce Catégorie Rosés des prés Conserve Rosé des prés Sec Coulemelle Frais 3 Cet opérateur ne porte que sur 1 relation. Il permet de ne retenir que certains attributs spécifiés d'une relation. On obtient tous les n-uplets de la relation à l'exception des doublons. Et en langage SQL SELECT DISTINCT liste d'attributs FROM table ; SELECT liste d'attributs FROM table ; Exemples : SELECT DISTINCT Espèce FROM Champignons ; SELECT DISTINCT Espèce, Catégorie FROM Champignons ; La clause DISTINCT permet d'éliminer les doublons. Opération SELECTION Formalisme : R = SELECTION (R1, condition) Et en langage SQL SELECT DISTINCT liste d'attributs FROM table ; SELECT liste d'attributs FROM table ; Exemples : SELECT DISTINCT Espèce FROM Champignons ; SELECT DISTINCT Espèce, Catégorie FROM Champignons ; La clause DISTINCT permet d'éliminer les doublons. Exemple : CHAMPIGNONS Espèce Catégorie Conditionnement Rosé des prés Conserve Bocal Rosé des prés Sec Verrine Coulemelle Frais Boîte Rosé des prés Sec Sachet plastique R3 = SELECTION (CHAMPIGNONS, Catégorie = "Sec") Espèce Catégorie Conditionnement 4 Rosé des prés Sec Verrine Rosé des prés Sec Sachet plastique Cet opérateur porte sur 1 relation. Il permet de ne retenir que les n-uplets répondant à une condition exprimée à l'aide des opérateurs arithmétiques ( =, >, <, >=, <=, <>) ou logiques de base (ET, OU, NON). Tous les attributs de la relation sont conservés. Un attribut peut ne pas avoir été renseigné pour certains n-uplets. Si une condition de sélection doit en tenir compte, on indiquera simplement : nomattribut "non renseigné". Opération JOINTURE (équi-jointure) Formalisme : R = JOINTURE (R1, R2, condition d'égalité entre attributs) Et en langage SQL En SQL, il est possible d'enchaîner plusieurs jointures dans la même instruction SELECT. En SQL de base : SELECT * FROM table1, table2, table3, ... WHERE table1.attribut1=table2.attribut1 AND table2.attribut2=table3.attribut2 AND ...; Exemple : SELECT * FROM Produit, Détail_Commande WHERE Produit.CodePrd=Détail_Commande.CodePrd ; ou en utilisant des alias pour les noms des tables : SELECT * FROM Produit A, Détail_Commande B WHERE A.CodePrd=B.CodePrd ; Avec la clause INNER JOIN (jointure dite interne) à partir du SQL2, supportée aujourd'hui par tous les SGBDR : SELECT * FROM table1 INNER JOIN table2 ON table1.attribut1=table2.attribut1 INNER JOIN table3 ON table2.attribut2=table3.attribut3... ; Le mot clé INNER est facultatif sur la plupart des SGBDR (sauf MS Access). Cette notation rend plus lisible la requête en distinguant clairement les conditions de jointures, derrière ON, et les éventuelles conditions de sélection ou restriction, derrière WHERE. De plus, l'oubli d'un ON (et donc de la condition de jointure) empêchera l'exécution 5 de la requête, alors qu'avec l'ancienne notation, l'oubli d'une condition de jointure derrière WHERE, n'empêche pas l'exécution de la requête, produisant alors un bien coûteux produit cartésien entre les tables ! Le même exemple que précédemment en utilisant aussi les alias : SELECT * FROM Produit A INNER JOIN Détail_Commande B ON A.CodePrd=B.CodePrd ; La norme SQL2 définit aussi l' équi-jointure naturelle, joignant les 2 tables sur l'ensemble des attributs qu'elles ont en commun, mais en ne gardant qu'une seule colonne pour chaque attribut joint, contrairement aux 2 expressions précédentes : SELECT * FROM table1 NATURAL JOIN table2 ; Il est aussi possible de restreindre (ou préciser) le ou les attributs de jointure avec USING : SELECT * FROM table1 INNER JOIN table2 USING (attribut1) ; NATURAL JOIN et USING ne sont pas supportés par tous les SGBDR. En SQL2, outre la jointure classique (dite jointure interne), apparaissent les jointures externes. On retiendra notamment les jointures externes Gauche (LEFT OUTER JOIN) et Droite (RIGHT OUTER JOIN). Dans le cas d'une jointure externe gauche A->B, toute les lignes de la table A sont incluses même s'il ne leur correspond pas de ligne dans la table B. Sur l'exemple précédent : SELECT * FROM Produit A LEFT OUTER JOIN Détail_Commande B ON A.CodePrd=B.CodePrd ; Le résultat renvoyé est le suivant : A.CodePrd Libellé Prix unitaire N°cde B.CodePrd quantité 590A HD 1,6 Go 1615 97001 590A 2 588J Scanner HP 1700 NULL NULL NULL 515J LBP 660 1820 97002 515J 1 515J LBP 660 1820 97003 515J 3 6 Tous les produits apparaissent même si certains n'ont pas fait l'objet de commande (exemple : 588J). Les colonnes manquantes sont alors complétées par des valeurs NULL. Exemple : PRODUIT DETAIL_COMMANDE CodePrd Libellé Prix unitaire N°cde CodePrd quantité 590A HD 1,6 Go 1615 97001 590A 2 588J Scanner HP 1700 97002 515J 1 515J LBP 660 1820 97003 515J 3 R = JOINTURE (PRODUIT, DETAIL_COMMANDE, Produit.CodePrd=Détail_Commande.CodePrd) A.CodePrd Libellé Prix unitaire N°cde B.CodePrd quantité 590A HD 1,6 Go 1615 97001 590A 2 515J LBP 660 1820 97002 515J 1 515J LBP 660 1820 97003 515J 3 Cet opérateur porte sur 2 relations qui doivent avoir au moins un attribut défini dans le même domaine (ensemble des valeurs permises pour un attribut). La condition de jointure peut porter sur l'égalité d'un ou de plusieurs attributs définis dans le même domaine (mais n'ayant pas forcément le même nom). Les n-uplets de la relation résultat sont formés par la concaténation des n-uplets des relations d'origine qui vérifient la condition de jointure. Remarque : Des jointures plus complexes que l'équijointure peuvent être réalisées en généralisant l'usage de la condition de jointure à d'autres critères de comparaison que l'égalité (<,>, <=,>=, <>). I - Les opérations ensemblistes Formalisme : R = UNION (R1, R2) Et en langage SQL SELECT liste d'attributs FROM table1 UNION SELECT liste d'attributs FROM table 2 ; 7 Exemple : SELECT n°enseignant, NomEnseignant FROM E1 UNION SELECT n°enseignant, NomEnseignant FROM E2 ; Exemple : E1 : Enseignants élus au CA E2 : Enseignants représentants syndicaux n° enseignant nom_enseignant n°enseignant nom_enseignant 1 DUPONT 1 DUPONT 3 DURAND 4 MARTIN 4 MARTIN 6 MICHEL uploads/Industriel/ algebre-relationnelle-enastic-asrs.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager