Bases de données – Cours 3 Présenté par: Rouagat Wahab
Contenu Algèbre relationnelle SQL par: Rouagat Wahab
L'algèbre relationnelle l'algèbre relationnelle a inspiré le langage SQL. Elaborée par Codd dans sa thèse, elle repose sur un petit nombre d’opérateurs que l'on applique à des relations de la base de données. Les opérateurs sont de deux types : relationnels et ensemblistes. par: Rouagat Wahab
Opérateurs relationnels Projection La projection est un opérateur d’accès par les colonnes. La projection U d’une relation R sur une liste d’attributs est la relation dont le schéma se réduit aux attributs de la liste. Ses tuples sont ceux de R, avec élimination des tuples en double. par: Rouagat Wahab
Projection Exemple: Soit la relation suivante: R A B C a 1 b d 2 f A B par: Rouagat Wahab
Projection par: Rouagat Wahab
Opérateurs relationnels Restriction (ou Sélection ) La restriction est un opérateur d’accès par les lignes. Une formule de restriction ou qualification q est une expression logique reliant des attributs de la relation opérande avec des constantes par l’intermédiaire d’opérateurs de comparaison ; par exemple : A = a AND B < 2 La restriction U de la relation R par la qualification q est une relation de même schéma que R dont les tuples sont ceux de R qui vérifient la qualification. par: Rouagat Wahab
Restriction Exemple: U = б A=a (R) A B C a 1 d A B C a 1 b d 2 f R par: Rouagat Wahab
Restriction par: Rouagat Wahab
Opérateurs ensemblistes Union L’union de deux relations R et S de même schéma est la relation de même schéma dont les tuples sont à la fois ceux de R et de S. par: Rouagat Wahab
Union S R Exemple: Soit les relations R et S A B C a 3 f A B C a 1 b d 2 f 3 K = R U S A B C a 1 b d 2 f R par: Rouagat Wahab
Union par: Rouagat Wahab
Opérateurs ensemblistes Différence La différence de deux relations de même schéma R et S est une relation de même schéma dont les tuples sont ceux de R n’appartenant pas à S. La différence n’est pas un opérateur commutatif. par: Rouagat Wahab
Différence par: Rouagat Wahab
Opérateurs ensemblistes L’intersection L’intersection de deux relations R et S de même schéma est une relation de même schéma constituée des tuples qui appartiennent à la fois R et à S. par: Rouagat Wahab
intersection par: Rouagat Wahab
Produit cartésien Le produit cartésien de deux relations R et S est une relation dont le schéma est la concaténation de ceux des relations composantes et dont les tuples sont obtenus en combinant chaque tuple de R avec tous ceux de S. par: Rouagat Wahab
jointures On distingue plusieurs opérateurs de jointures. Ils sont associés à des formules de qualification reliant entre eux certains attributs des relations composantes. l’équijointure : La clause de qualification est une égalité entre deux attributs des relations opérandes. La relation résultante est le sous-ensemble du produit cartésien réduit aux tuples vérifiant la qualification, sans répétition, dans le schéma, de l’attribut commun. par: Rouagat Wahab
Exemple: soit la relation R et T ou: B C a 1 b d 2 f R par: Rouagat Wahab
jointure par: Rouagat Wahab
Composition d’opérations La composition des divers opérateurs permet d’envisager des traitements algébriques complexes autorisant des manipulations formelles des données. Soient les relations : EMP(numemp, nomemp, salaire, emploi, departement) DEPT(numdept, nomdept, adresse, ville) La détermination des informaticiens basés à Ouargla et gagnant plus de 20000 DA se fera par : par: Rouagat Wahab
Composition d’opérations Cette expression peut être représentée graphiquement par l’arbre statique d’exécution suivant : par: Rouagat Wahab
arbre statique d’exécution par: Rouagat Wahab
Exercice On suppose qu'une bibliothèque gère une base de données dont le schéma est le suivant : Emprunt(Personne, Livre, DateEmprunt, DateRetourPrevue, DateRetourEective) Retard(Personne, Livre, DateEmprunt, PenalitéRetard) Question: Exprimer les requêtes suivantes en algèbre relationnelle: Quelles sont les personnes ayant emprunté le livre "Recueil Examens BD" ? Quelles sont les personnes n'ayant jamais rendu de livre en retard ? Quelles sont les personnes ayant emprunté tous les livres (empruntés au moins une fois) ? Quels sont les livres ayant été empruntés par tout le monde (i.e. tous les emprunteurs) ? par: Rouagat Wahab
Solution 1: 2: 3: 4: par: Rouagat Wahab
SQL (Structured Query Language) Le langage SQL peut être considéré comme le langage d’accès normalisé aux bases de données. Il est aujourd’hui supporté par la plupart des produits commerciaux que ce soit par les systèmes de gestion de bases de données micro tel que Access ou par les produits plus professionnels tels que Oracle ou Sybase. Il a fait l’objet de plusieurs normes ANSI/ISO dont la plus répandue aujourd’hui est la norme SQL2 qui a été définie en 1992. Le succès du langage SQL est du essentiellement à sa simplicité et au fait qu’il s’appuie sur le schéma conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la stratégie d’exécution. par: Rouagat Wahab
SQL Le langage SQL comporte : une partie sur la définition des données : le langage de définition des données (LDD) qui permet de définir des relations, des vues externes et des contraintes d’intégrité; une partie sur les requêtes : le langage de manipulation des données (LMD) qui permet d’interroger une base de données sous forme déclarative sans se préoccuper de l’organisation physique des données; une partie sur le contrôle des données : le langage de contrôle des données (LCD) qui permet de contrôler la sécurité et les accès aux données. par: Rouagat Wahab
Le langage de définition des données (LDD) Le langage de définition des données permet de définir et de manipuler les concepts du modèle relationnel liés au schéma : relation, attribut, clé, contraintes d’intégrité, vues ainsi que certains éléments liés à l’administration de la base de données : index, droits des utilisateurs. Les types de données disponibles dépendent du SGBD mais on retrouve généralement les types entier, réel, chaînes de caractères et date. Les principaux types de données disponibles en SQL sont : SMALLINT, INTEGER, DECIMAL, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, CHAR et VARCHAR. par: Rouagat Wahab
CREATE TABLE (LDD) Crée une relation (table) Syntaxe : CREATE TABLE <nom_de_relation> ( <nom_d’attribut> <type_de_données> [NOT NULL] [, ...] [, PRIMARY KEY (<nom_d’attribut> [, ...] ) ] [, FOREIGN KEY (<nom_d’attribut>) REFERENCES <nom_de_relation> [, ...] ] ) par: Rouagat Wahab
exemple Soit le schéma relationnel suivant: Article (n_art, design, prix_ach, prix_v) Stock (#sn_art, quantite, seuil) La requête suivante nous permet de créer la relation ‘Article’: create table article( n_art numeric(3) not null, design varchar(30), prix_ach decimal(6,2), prix_v decimal(6,2), primary key (n_art) ) par: Rouagat Wahab
exemple Stock (# sn_art, quantite, seuil) La requête suivante nous permet de créer la relation ‘stock’: create table stock( sn_art numeric(3) not null, quantite numeric(2), seuil numeric(2), primary key (sn_art), foreign key (sn_art) references article(n_art) ) par: Rouagat Wahab
ALTER TABLE (LDD) Modifier une relation (table) Syntaxe : Exemple: ALTER TABLE <nom_de_relation> ADD ( <nom_d'attribut> <type_de_données> ) ALTER TABLE <nom_de_relation> ADD constraint <contrainte> Exemple: Si on veut augmenter la relation stock par le champ etage de type chaîne de caractères Stock (#sn_art, quantite, seuil, etage) alors, on doit appliquer la requête suivante: alter table stock add etage varchar(2) par: Rouagat Wahab
DROP TABLE (LDD) Supprimer une relation (table) Syntaxe : Remarque: DROP TABLE <nom_de_relation> [CASCADE CONSTRAINTS] Remarque: On ne peut pas supprimer une table qui est référencée par d’autres table, en effet, Si on veut supprimer la table ‘article’ on doit d'abord supprimer la table ‘stock’ Remarque : [CASCADE CONSTRAINTS]: forcer la supprission de la relation ainsi que toute relation référençante Exemple: drop table stock par: Rouagat Wahab
Le langage de manipulation des données (LMD) Insertion de données dans une relation Syntaxe INSERT INTO <nom_de_relation > [(<liste_d’attributs>)] VALUES (<liste_de_valeurs >) Exemples : insérer les données (1, ordinateur, 300, 400) dans la table ‘article’: insert into article values (1, ‘ordinateur’, 300, 400) insérer les données (2, datashow) dans ‘article’: insert into article (n_art, design) values (2, ‘datashow’) par: Rouagat Wahab
Le langage de manipulation des données (LMD) Suppression de données dans une relation Syntaxe DELETE FROM < nom_de_relation > [WHERE <expression_de_selection > ] Exemples : Supprimer tous les enregistrements de la table ‘article’: delete from article Supprimer les enregistrements de la table ‘article’ où le numéro d’article égale 2: delete from article where n_art=2 par: Rouagat Wahab
Le langage de manipulation des données (LMD) Modification des données d’une relation Syntaxe UPDATE <nom_de_relation> SET < champ > [WHERE <expression_de_selection > ] Exemples : Modifier le prix d’achat et de vente dans la table ‘article’ où le nom d’article est datashow: update article set prix_ach=30000 and prix_v=35000 where design=‘datashow’ par: Rouagat Wahab
Le langage de manipulation des données (LMD) Sélection de données Syntaxe SELECT [DISTINCT] { * | <nom_d’attribut> [, ...] } FROM <nom_de_relation> [, ...] [WHERE <condition>] Remarque: * remplace la liste des attributs de la relation Exemples : Quels sont les prix d’achat et de vente de l’article ‘datashow’? select prix_ach, prix_v from article where design=‘datashow’ par: Rouagat Wahab
Exemple de Sélection de données : Quels sont les articles dans l’étage B6 et combien d’unité disponible dans le stock? Solution: select design, quantite from article, stock where sn_art=nart and etage=‘B6’ par: Rouagat Wahab
Lien entre algèbre relationnelle et SQL Opération Expression algébrique Expression SQL équivalente Projection P A ( R1 ) SELECT A FROM R1 Sélection s < condition > ( R1 ) SELECT * FROM R1 WHERE <condition > Produit cartésien R1 X R2 SELECT * FROM R1, R2 Jointure R1 * R3 SELECT * FROM R1, R3 WHERE R1.A = R3.A Union R1 U R2 SELECT * FROM R1 UNION SELECT * FROM R2 Intersection R1 n R2 SELECT * FROM R1, R2 WHERE R1.A = R2.C and R1.B = R2.D Différence R1 / R2 SELECT * FROM R1 WHERE not exists (SELECT * FROM R2 WHERE R2.C = R1.A and R2.D = R1.B ) Division R1 : R2 SELECT A FROM R1 GROUP BY A HAVING COUNT (distinct B ) = (SELECT count (distinct B ) FROM R2) par: Rouagat Wahab
Exercice Prenons l’exemple de la bibliothèque : Emprunt(Personne, Livre, DateEmprunt, DateRetourPrevue, DateRetourEective) Retard(Personne, Livre, DateEmprunt, PenalitéRetard) Questions: En utilisant le langage SQL: Créer les relations Emprunt et Retard Exprimer les requêtes suivantes : Quelles sont les personnes ayant emprunté le livre "Recueil Examens BD" ? Quelles sont les personnes n'ayant jamais rendu de livre en retard ? Quelles sont les personnes ayant emprunté tous les livres (empruntés au moins une fois) ? Quels sont les livres ayant été empruntés par tout le monde (i.e. tous les emprunteurs) ? par: Rouagat Wahab