Conception de bases de données relationnelles Langage SQL Marie Szafranski 2017-2018 ensiie 1 2017-2018 ensiie 1 Généralités Généralités SQL (Structured Query Language) SQL (Structured Query Language) Langage déclaratif pour la manipulation des SGBD(R) interface standard pour accéder aux BD Langage de Définition de Données Création, modification, suppression d objets [LDD / DDL] tables, vues, etc. Langage de Contrôle de Données [LCD / DCL] Gestion des droits sur les objets création des utilisateurs, droits et rôles, etc. Langage de Manipulation de Données [LMD / DML] Recherche, insertion, mise à jour et suppression de données 2017-2018 ensiie 2 2017-2018 ensiie 2
Généralités Généralités Origine du SQL Origine du SQL Fondé sur le modèle relationnel de Codd et l algèbre relationnelle associée [Codd, 70, IBM] Les prédécesseurs de SQL IBM Sequel Structured English QUEry Language IBM DB2 [Boyce & Chamberlin, 77, IBM] La naissance du standard SQL SQL [Relationnal Software (Oracle), 79] SQL-86 [ANSI (États Unis), 86 ; ISO, 87] 2017-2018 ensiie 3 2017-2018 ensiie 3 Généralités Généralités Évolution du SQL Évolution du SQL SQL-86 SQL-89 (ou SQL-1) version originale améliorations mineures SQL-92 (ou SQL-2) extensions majeures (types de données, opérations relationnelles, LDD, transactions, etc.) SQL-99 (ou SQL-3) SQL-2003 introduction du PSM (procédures stockées) introduction du RO extensions XML SQL-2006 SQL-2008 SQL-2011 améliorations mineures (XML) améliorations mineures (RO) améliorations mineures (XML, RO, définition des schémas) 2017-2018 ensiie 4 2017-2018 ensiie 4
Généralités Généralités Super exemple : fil d Ariane Super exemple : fil d ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 5 2017-2018 ensiie 5 Création et modification de tables (attributs, types, etc.) Définition des contraintes d intégrité (clés primaires, candidates, etc.) Définition des contraintes référentielles (clés étrangères) Création de vues Suppression d objets (tables, vues, attributs, domaines, etc.) 2017-2018 ensiie 6 2017-2018 ensiie 6
Types de données Types de données Types numériques INTEGER, TINYINT, SMALLINT, LONGINT DECIMAL[(s, t)], NUMERIC FLOAT[(s, t)] Types chaînes de caractères CHAR(l), VARCHAR(l) TEXT Types date DATE ( AAA-MM-JJ ), DATETIME( AAAA-MM-JJ HH:MM:SS ) YEAR, MONTH, TIME... Autres types RTFM! Monétaires, énumérés (ENUM), séquences (SEQUENCE/SERIAL) Valeur NULL 0, L fait partie du domaine 2017-2018 ensiie 7 2017-2018 ensiie 7 Création de tables Création de tables Définition d un schéma de relation en intension Spécification des attributs et des domaines CREATE TABLE <nom de table>( <nom attribut 1> <type attribut 1> [NOT NULL],. <nom attribut n> <type attribut n> [NOT NULL]); CREATE TABLE Super heros( nom super VARCHAR(20), nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(3)); 2017-2018 ensiie 8 2017-2018 ensiie 8
Contraintes d intégrité Contraintes d intégrité Définition et contrôle de la cohérence d une (ensemble de) donnée(s) création des tables Contrainte sur un attribut Clé primaire Unicité Intégrité référentielle Validité (restriction de domaine) Contrainte sur une table (Après la définition d un attribut) PRIMARY KEY UNIQUE REFERENCES <table> (<attribut(s)>) CHECK (<condition>) (Après la définition de tous les attributs) Clé primaire Unicité Intégrité référentielle PRIMARY KEY (<liste d attributs>) UNIQUE (liste d attributs) FOREIGN KEY (<liste d attributs>) REFERENCES <table> (<liste d attributs>) Validité (restriction de domaine) CHECK (<condition>) 2017-2018 ensiie 9 2017-2018 ensiie 9 Contraintes d intégrité (Super exemple) Contraintes d intégrité (Super exemple) Contrainte sur un attribut CREATE TABLE Super heros( nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(2) (CHECK age BETWEEN 1 AND 65)); -- UNIQUE NOT NULL Contrainte sur une table CREATE TABLE Super heros pouvoirs( super VARCHAR(20), pouvoir VARCHAR(20), CONSTRAINT pk SHP PRIMARY KEY (super, pouvoir), FOREIGN KEY (super) REFERENCES Super heros (super), FOREIGN KEY (pouvoir) REFERENCES Super pouvoirs (nom pouvoir)); 2017-2018 ensiie 10 2017-2018 ensiie 10
Contraintes d intégrité (Autre exemple) Contraintes d intégrité (Autre exemple) CREATE TABLE Personne( n ss CHAR(13) PRIMARY KEY, nom VARCHAR(25) NOT NULL, prenom VARCHAR(25) NOT NULL, age INTEGER(3) CHECK (age BETWEEN 18 AND 65), mariage CHAR(13) REFERENCES Personne(n ss), code postal INTEGER(5), pays VARCHAR(50), CONSTRAINT ck Personne UNIQUE (nom, prenom), CONSTRAINT fk Personne Pays FOREIGN KEY (code postal, pays) REFERENCES Adresse (c p, pays)); CREATE TABLE Adresse( c p INTEGER(5) NOT NULL, pays VARCHAR(50) NOT NULL, initiale CHAR(1) CHECK (initiale = LEFT(pays, 1)), PRIMARY KEY (c p, pays)); 2017-2018 ensiie 11 2017-2018 ensiie 11 Contraintes d intégrité référentielles (Portée) Contraintes d intégrité référentielles (Portée) Suppression ou mises à jour sur les clés étrangères ON DELETE/UPDATE CASCADE ON DELETE/UPDATE RESTRICT 2017-2018 ensiie 12 2017-2018 ensiie 12
Modification de tables Modification de tables Modification d attributs ou de contraintes préalablement définis ALTER TABLE <table> ADD COLUMN (<définition de l attribut>); ALTER TABLE <table> DROP COLUMN (<nom de l attribut>); -- Ajout d un attribut -- Suppression d un attribut -- Modification d un attribut ALTER TABLE <table> ALTER COLUMN (<redéfinition de l attribut>); -- Ajout d une contrainte ALTER TABLE <table> ADD CONSTRAINT (<définition de la contrainte>);... 2017-2018 ensiie 13 2017-2018 ensiie 13 Modification de tables (Super exemple) Modification de tables Super exemple Modification d attributs ou de contraintes préalablement définis CREATE TABLE Super heros( nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(3)); -- table initiale -- modifications ALTER TABLE Super heros ALTER COLUMN nom super TYPE VARCHAR(50); ALTER TABLE Super heros ADD CONSTRAINT u n UNIQUE (nom civil, prenom); ALTER TABLE Super heros DROP COLUMN age; CREATE TABLE Super heros( nom super VARCHAR(50) PRIMARY KEY, nom civil VARCHAR(50), prenom VARCHAR(20), CONSTRAINT u n UNIQUE (nom civil, prenom); -- table modifiée 2017-2018 ensiie 14 2017-2018 ensiie 14
Modification de tables (Remarques) Modification de tables Remarques Modification d attributs ou de contraintes préalablement définis Modification d une table vide sans ALTER Suppression de la table (DROP) et création avec les modifications Plus compliqué si la table est référencée Modification d une table non vide sans ALTER Copie des données dans une table temporaire de même schéma Suppression et création d une table modifiée avec le nouveau schéma Copie des données depuis la table temporaire vers la table modifiée 2017-2018 ensiie 15 2017-2018 ensiie 15 Création de vues Création de vues Définition logique d une relation sans stockage de données Requête stockée (définition) ouvrant une fenêtre dynamique sur les données (résultat) Implantation du concept de schéma externe d un MCD CREATE VIEW <nom de vue> <liste d attributs> AS <spécification de question>; -- nombre et types identiques que dessus CREATE VIEW Super age (super, age) AS SELECT (nom super, age) FROM Super heros; Remarques Lecture d une vue Source d une vue Restitution de l héritage pour tous (modulo les droits accordés) une relation, une autre vue 2017-2018 ensiie 16 2017-2018 ensiie 16
Suppression d objets Suppression d objets Suppression d une relation ou d une vue DROP TABLE <table>; DROP VIEW <table>; DROP TABLE Parvenus; DROP VIEW Parvenus; --! tables référencées 2017-2018 ensiie 17 2017-2018 ensiie 17 Super exemple : fil d Ariane Super exemple : fil d ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 18 2017-2018 ensiie 18
Sélection (Syntaxe) Sélection (Syntaxe) (Produit cartésien + restriction) ou jointure + projection Expression basique d une requête avec SQL SELECT <liste d attributs projetés> FROM <liste de relations> WHERE <condition>; SELECT : sous-ensemble des attributs projetés schéma de la requête FROM : relations des attributs utilisés en projection, en restriction ou en jointure WHERE : conditions sur les attributs restriction ou jointure si exprimée ici 2017-2018 ensiie 19 2017-2018 ensiie 19 Sélection Sélection SELECT SELECT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 SELECT nom super, age FROM Super heros WHERE nom civil = Parr ; SELECT nom super, age FROM Super heros WHERE nom civil = Parr ; projection 2017-2018 ensiie 20 2017-2018 ensiie 20
Sélection Sélection SELECT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 SELECT Super heros.nom super FROM Super heros WHERE nom civil = Parr ; projection restriction 2017-2018 ensiie 20 2017-2018 ensiie 20 Sélection Sélection SELECT DISTINCT SELECT DISTINCT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT nom civil, age FROM Super heros WHERE age = 36; projection restriction SELECT nom civil, age FROM Super heros WHERE age = 36; projection restriction 2017-2018 ensiie 21 2017-2018 ensiie 21
Sélection Sélection SELECT DISTINCT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Frozone Best Lucius 36 SELECT DISTINCT nom civil, age FROM Super heros WHERE age = 36; projection restriction 2017-2018 ensiie 21 2017-2018 ensiie 21 Sélection Sélection SELECT AS SELECT AS Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT nom super, age FROM Super heros WHERE age = 36; 2017-2018 ensiie 22 2017-2018 ensiie 22
Sélection Sélection SELECT AS Super heros Liste de Supers nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT nom super AS Liste de Supers, age FROM Super heros WHERE age = 36; 2017-2018 ensiie 22 2017-2018 ensiie 22 Sélection (Synthèse) Sélection (synthèse) Projeter l ensemble des attributs SELECT * Éliminer les doublons SELECT DISTINCT Renommer les attributs SELECT a AS a Préfixer un attribut par une relation en cas d ambiguïté SELECT Relation.attribut 2017-2018 ensiie 23 2017-2018 ensiie 23
Opérateurs de comparaison et opérateurs logiques Opérateurs de comparaison et opérateurs logiques Restriction : condition exprimée dans la clause WHERE (résultat booléen) Opérateurs de comparaison A = C, A <> C, A < C, A > C, A <= C, A >= C A BETWEEN C1 AND C2 A LIKE chaine joker : %, A IN (C1, C2,...) A IS NULL Opérateurs logiques OR, AND, NOT condition élémentaire := attribut <opérateur de comparaison> constante condition := condition <opérateur logique> condition condition élém. 2017-2018 ensiie 24 2017-2018 ensiie 24 Expression du produit cartésien (Syntaxe) Expression du produit cartésien (Syntaxe) Produit cartésien : opération binaire R1 R2 Schéma : juxtaposition des schémas de R1 et R2 Résultat : combinaison des tuples de R1 et R2 Algèbre relationnelle R3 = Produit(R1, R2) -- = Produit(R2, R1) -- (modulo l ordre des attributs dans le schéma) SQL SELECT * FROM R1, R2; 2017-2018 ensiie 25 2017-2018 ensiie 25
Expression du produit cartésien Expression du produit cartésien Super heros (SH) nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Schéma SH SP? (nom super, nom civil, prenom, age, nom pouvoir) Nombre de tuples? 6 6 Expression? SELECT * FROM SH, SP; 2017-2018 ensiie 26 2017-2018 ensiie 26 Expression d une jointure (Syntaxe) Expression d une jointure (Syntaxe) Jointure : opération binaire sur R1 et R2 Jointure : condition C sur attributs de R1 et R2 de mêmes domaines Schéma : juxtaposition de R1 et R2 Résultat : concaténation des tuples de R1 et de R2 vérifiant C Algèbre relationnelle Jointure(R1, R2, R1.X <operateur de comparaison> R2.Y) SQL SELECT * FROM R1 [INNER] JOIN R2 ON R1.X <op. comparaison> R2.Y; -- SQL-92 SELECT * FROM R1, R2 WHERE R1.X <op. comparaison> R2.Y; -- SQL-89 restriction sur un produit cartésien 2017-2018 ensiie 27 2017-2018 ensiie 27
Expression d une jointure Expression d une jointure Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT nom super, pouvoir, age FROM Super heros INNER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 28 nom super pouvoir age Indestructible Resistance 36 Elastic girl Elasticite 36 Frozone Champ de glace 36 Violette Invisibilite 16 Violette Champ de force 16 Fleche Rapidite 12 2017-2018 ensiie 28 Expression d une jointure Expression d une jointure Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT heros, pouvoir, age FROM Super heros INNER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 28 heros pouvoir age Indestructible Resistance 36 Elastic girl Elasticite 36 Frozone Champ de glace 36 Violette Invisibilite 16 Violette Champ de force 16 Fleche Rapidite 12 2017-2018 ensiie 28
Expression d une jointure Expression d une jointure 2017-2018 ensiie 28 2017-2018 ensiie 28 Expression d une jointure (Compléments) Expression d une jointure (Compléments) Jointure naturelle SQL Jointure naturelle SQL Jointure portant sur des attributs de mêmes noms Jointure portant sur des attributs de mêmes noms Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) -- SQL-92 (nom super, nom civil, prenom civil, age, pouvoirs) SELECT * FROM Super heros NATURAL JOIN Super heros pouvoirs ; -- SQL-92 (nom super, nom civil, prenom civil, age, pouvoirs) SELECT * FROM Super heros NATURAL JOIN Super heros pouvoirs ; -- SQL-89 (nom civil, prenom civil, age, nom super, nom super, pouvoirs) SELECT * FROM Super heros SH, Super heros pouvoirs SHP WHERE SH.nom super = SHP.nom super; 2017-2018 ensiie 29 2017-2018 ensiie 29
Expression d une jointure (Compléments) Expression d une jointure (Compléments) Jointure naturelle SQL Jointure portant sur des attributs de mêmes noms Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) -- SQL-92 SELECT * FROM Super heros [INNER] JOIN Super heros pouvoirs USING (...); Restriction quand plusieurs attributs de m^eme nom 2017-2018 ensiie 29 2017-2018 ensiie 29 Expression d une jointure (Compléments) Expression d une jointure (Compléments) Auto jointure SQL Jointure portant sur la même relation SELECT * FROM R1 <alias1>, R1 <alias2> WHERE <alias1>.attribut = <alias2>.attribut; -- Tous les Supers appartenant à une m^eme famille SELECT nom civil, prenom FROM Super heros SH1, Super heros SH2 WHERE SH1.nom civil = SH2.nom civil; 2017-2018 ensiie 30 2017-2018 ensiie 30
Expression d une jointure externe (Syntaxe) Expression d une jointure externe (Syntaxe) Jointure externe : opération binaire sur R1 et R2 Schéma : juxtaposition de R1 et R2 Résultat : tuples de la jointure de R1 et R2 + tuples de R1 (ou R2) exclus Algèbre relationnelle JointureExterne(R1, R2, R1.X <op. comparaison> R2.Y) SQL SELECT * FROM R1 OUTER JOIN R2 ON R1.X <op. comparaison> R2.Y; SELECT * -- JointureExterneGauche(R1, R2, R1.C = R2.X) FROM R1 LEFT OUTER JOIN R2 ON R1.X <op. comparaison> R2.Y; SELECT * -- JointureExterneDroite(R2, R1, R1.C = R2.X) FROM R2 RIGHT OUTER JOIN R1 ON R1.X <op. comparaison> R2.Y; 2017-2018 ensiie 31 2017-2018 ensiie 31 Expression d une jointure externe Expression d une jointure externe Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT nom super, pouvoir, age FROM Super heros OUTER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 32 nom super age pouvoir Indestructible 36 Resistance Elastic girl 36 Elasticite Frozone 36 Champ de glace Violette 16 Invisibilite Violette 16 Champ de force Fleche 12 Rapidite Jack-Jack 2 NULL 2017-2018 ensiie 32
Expression d une jointure externe Expression d une jointure externe Super heros (SH) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite SELECT nom super, pouvoir, age FROM Super heros OUTER JOIN Super heros pouvoirs ON nom super = heros; = SELECT nom super, pouvoir, age FROM Super heros LEFT OUTER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 32 2017-2018 ensiie 32 Expression d une jointure externe (Exemple complet) Expression d une jointure externe (Exemple complet) #A B C=>R2 1 Alpha 10 2 Bravo 10 3 Charlie 20 4 Delta R1 R2 #X Y 10 Echo 20 Fox 30 Golf 2017-2018 ensiie 33 2017-2018 ensiie 33
Expression d une jointure externe (Synthèse) Expression d une jointure externe (Synthèse) Équivalence entre et R1 LEFT OUTER JOIN R2 R2 RIGHT OUTER JOIN R1 LEFT OUTER JOIN : relation issue d une asso. 0..1 : (0..)n sélection de tous les tuples du côté 1 (ayant une référence ou pas) RIGHT OUTER JOIN : relation issue d une asso. (0..)1 : 0..n sélection de tous les tuples du côté n (référencés ou pas) Utile pour trouver les tuples non référencés par une clé étrangère 2017-2018 ensiie 34 2017-2018 ensiie 34 Opérateurs ensemblistes Opérateurs ensemblistes Union SQL SELECT * FROM R1 UNION SELECT * FROM R2; Intersection SQL SELECT * FROM R1 INTERSECT SELECT * FROM R2; Différence SQL SELECT * FROM R1 EXCEPT SELECT * FROM R2; 2017-2018 ensiie 35 2017-2018 ensiie 35
Tris Tris Résultat : en fonction des valeurs des attributs retournés SQL SELECT <liste d attributs> FROM <liste de relations> WHERE <conditions> ORDER BY <liste de (noms numéro dans la projection) d attributs à ordonner>[asc, DESC]; SELECT nom super, prenom, age FROM Super heros WHERE age >= 16 ORDER BY nom super, age1, 3 DESC; 2017-2018 ensiie 35 2017-2018 ensiie 35 Fonctions de calcul Fonctions de calcul Fonction de calcul : dans une relation Fonction de calcul : sur l ensemble de valeurs d un attribut Résultat : une valeur atomique unique (entier, chaine, date, etc.) count(relation, attribut) nombre de valeurs non nulles d un attribut pour tous les tuples sum(relation, attribut) et avg(relation, attribut) somme (resp.moyenne) des valeurs d un attribut numérique min(relation, attribut) et max(relation, attribut) plus petite (resp. grande) valeur d un attribut parmi les tuples 2017-2018 ensiie 35 2017-2018 ensiie 35
Fonctions de calcul (Syntaxe et exemple) Fonctions de calcul (Syntaxe et exemple) SQL SELECT <liste de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul>; SELECT min(age), max(age), avg(age) FROM Super heros WHERE nom civil = Parr ; Remarques Nombre de tuples d une relation count sur une clé primaire Fonction de calcul d un agrégat clause ORDER BY ou HAVING Fonction de calcul d un agrégat jamais dans une clause WHERE 2017-2018 ensiie 36 2017-2018 ensiie 36 Agrégat Agrégat Agrégat : partitionnement horizontal d une relation en sous-relations Agrégat : un ou plusieurs attributs de partitionnement Agrégat : + fonction de calcul sur chaque attribut des sous-relations Agrégat : partitionnement horizontal d une relation en sous-relations Agrégat : un ou plusieurs attributs de partitionnement Agrégat : + fonction de calcul sur chaque attribut des sous-relations SQL SELECT <liste d attributs de partitionnement et de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul de l agrégat> GROUP BY <liste ordonnée d attributs de partitionnement> HAVING <condition sur les fonctions de calcul>; SELECT pouvoir, avg(age) FROM Super heros INNER JOIN Super heros pouvoir ON nom super = heros GROUP BY pouvoir HAVING avg(age) > 10; 2017-2018 ensiie 37 SQL SELECT <liste d attributs de partitionnement et de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul de l agrégat> GROUP BY <liste ordonnée d attributs de partitionnement> HAVING <condition sur les fonctions de calcul>; SELECT Societe.nom, avg(personne.age) FROM Societe INNER JOIN Personne ON Personne.societe = Societe.nom WHERE Societe.nom LIKE A% GROUP BY Societe.nom HAVING count(num ss) >10; 2017-2018 ensiie 37
Agrégat (Remarques) Agrégat (Remarques) Restriction : avant le calcul de l agrégat (clause WHERE) Restriction : après le calcul de l agrégat (clause HAVING) Projection : attributs dans la clause SELECT sans fonction de calcul Projection : également dans la clause GROUP BY Projection : inverse vrai dans certains SGBDR (Oracle par exemple) Fonction de calcul si GROUP BY : dans les clauses SELECT ou HAVING 2017-2018 ensiie 38 2017-2018 ensiie 38 Requêtes imbriquées Requêtes imbriquées Requêtes imbriquées : recherches plus complexes Requêtes imbriquées : impossibles à écrire en algèbre relationnelle Requêtes imbriquées : sous-requête est une clause FROM ou WHERE SELECT <liste d attributs> FROM <liste de relations> WHERE <sous-requ^ete>; SELECT nom civil, prenom FROM Super heros WHERE nom super IN (SELECT heros FROM Super heros pouvoirs); SELECT nom FROM Chercheur WHERE nom IN (SELECT nom FROM Enseignant); MAL MAL 2017-2018 ensiie 39 2017-2018 ensiie 39
Sous-requête d existence IN Sous-requête d existence IN Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); SELECT C.nom FROM Chercheur C WHERE C.universite IN ( SELECT U.nom FROM Universite U WHERE U.ville = Paris ); -- une colonne SELECT num ss FROM Chercheur WHERE (nom, prenom, age) IN ( SELECT nom, prenom, age FROM Enseignant); -- plusieurs colonnes 2017-2018 ensiie 40 2017-2018 ensiie 40 Sous-requête d existence IN Sous-requête d existence IN Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); SELECT nom FROM Chercheur WHERE universite = Paris 6 IN ( SELECT nom FROM Enseignant WHERE universite IN ( SELECT nom FROM Universite WHERE Ville = Paris )); -- imbrications multiples Alternative à la jointure Non existence d un tuple dans une sous-requête à éviter NOT IN 2017-2018 ensiie 40 2017-2018 ensiie 40
Sous-requête d existence IN Sous-requête d existence IN 2017-2018 ensiie 40 2017-2018 ensiie 40 Sous-requête d existence EXISTS Sous-requête d existence EXISTS Existence d au moins un tuple dans la sous-requête Existence d au moins un tuple dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); SELECT nom super, nom civil, prenom FROM Super heros WHERE EXISTS ( SELECT * FROM Super heros pouvoirs WHERE nom super = heros); SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); SELECT Chercheur.nom FROM Chercheur WHERE EXISTS ( SELECT * FROM Universite; WHERE Universite.nom = Chercheur.universite); 2017-2018 ensiie 41 2017-2018 ensiie 41
Sous-requête d existence EXISTS Sous-requête d existence EXISTS Existence d au moins un tuple dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); Pour valider l existence d un tuple projection inutile dans dans la sous-requête (SELECT *) Non présence d un tuple dans une sous-requête NOT IN 2017-2018 ensiie 41 2017-2018 ensiie 41 Sous-requête de comparaison ALL Sous-requête de comparaison ALL Vérification d une condition : pour les tuples de la requête Vérification d une condition : sur tous les tuples de la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <attribut> <operateur de comparaison> ALL (<sous-requ^ete>); SELECT Nom FROM Chercheur WHERE age > ALL ( SELECT age FROM Eleve; 2017-2018 ensiie 42 2017-2018 ensiie 42
Sous-requête de comparaison ANY Sous-requête de comparaison ANY Vérification d une condition : pour les tuples de la requête Vérification d une condition : sur au moins un tuple de la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <attribut> <operateur de comparaison> ANY (<sous-requ^ete>); SELECT Nom FROM Chercheur WHERE age < ANY ( SELECT age FROM Eleve); SOME peut être utilisé comme synonyme de ANY 2017-2018 ensiie 43 2017-2018 ensiie 43 Raffinement des requêtes dans la clause WHERE Raffinement des requêtes dans la clause WHERE Raffinement : enchaînement récursif de n requêtes dans la clause FROM SELECT <liste d attributs> FROM <requ^ete>; SELECT avg(s) FROM ( SELECT sum(b) as s FROM t GROUP BY a); 2017-2018 ensiie 44 2017-2018 ensiie 44
Exercice Exercice Potion magique Druide(#nom, prénom) Potion(#nom, inventeur 1=>Druide, inventeur 2=>Druide) Ingrédient(#nom I, description) Composition(#(nom P=>Potion, nom I=>Ingredient), quantité) Modèle conceptuel Noms des potions et noms et prénoms de leurs inventeurs Noms et descriptions des ingrédients de la potion magique Nombre d ingrédients de la potion magique Nombre d ingrédients dans chaque potion 2017-2018 ensiie 45 2017-2018 ensiie 45 Super exemple : fil d Ariane Super exemple : fil d Ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parrr Robert 36 Elastic girl Parrr Helene 36 Violette Parrr Violette 16 Fleche Parrr Roger 12 Jack-Jack Parrr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 46 2017-2018 ensiie 46
Insertion de données Insertion de données Insertion directe des valeurs INSERT INTO <table> (<liste ordonnée d attributs>) VALUES (<liste ordonnée des valeurs à affecter aux attributs>); -- si les parvenus étaient des super-héros comme les autres INSERT INTO Super heros (nom super, nom civil, prenom) VALUES (Syndrome, Pine, Buddy); Insertion de valeurs par sélection INSERT INTO <table> (<liste ordonnée d attributs>) SELECT...; -- nombre et type identiques que ci-dessus -- si les parvenus étaient des super-héros comme les autres INSERT INTO Super heros (nom super, nom civil, prenom) SELECT nom parvenu, nom civil, prenom FROM Parvenus; 2017-2018 ensiie 47 2017-2018 ensiie 47 Insertion de données (Remarques) Insertion de données (Remarques) Possibilité de ne pas spécifier un (ou plusieurs) attribut(s) NULL -- l attribut age n est pas spécifié INSERT INTO Super heros (nom super, nom civil, prenom) VALUES (Syndrome, Pine, Buddy); Syndrome, Pine, Buddy, NULL Possibilité de ne pas spécifier la liste d attributs (cas simples) tous les attributs dans l ordre de définition de la relation INSERT INTO Super heros SELECT * FROM Parvenus; -- (nom super, nom civil, prenom, age) 2017-2018 ensiie 48 2017-2018 ensiie 48
Mise à jour de données Mise à jour de données UPDATE INTO <table> SET <liste d attributs = valeurs> WHERE <condition pour filtrer les enregistrements>; Mise à jour directe des valeurs UPDATE Super heros SET nom civil = Parr WHERE nom civil = Parrr ; -- correction de l orthographe du nom Parr Mise à jour de valeurs par calcul UPDATE Super heros SET age=age+1 WHERE nom super = Violette ; -- happy birthday Violette... 2017-2018 ensiie 49 2017-2018 ensiie 49 Suppression de données Suppression de données DELETE FROM <table> WHERE <condition pour filtrer les enregistrements>; Suppression de tous les enregistrements d une relation -- si les parvenus étaient des super-héros comme les autres DELETE FROM Parvenus; Suppression sélective de enregistrements -- si les parvenus étaient des super-héros comme les autres, -- ça se saurait... DELETE FROM Super heros WHERE nom super = Syndrome ; 2017-2018 ensiie 50 2017-2018 ensiie 50
LCD : langage de contrôle des données LCD : langage de contrôle des données LCD : langage de contrôle des données LCD : langage de contrôle des données Création d utilisateurs Définition de leurs droits SGBD, BD, relations ou attributs Remarque Gestion de la création d utilisateur (CREATE USER) par le SGBD en général 2017-2018 ensiie 51 2017-2018 ensiie 51 LCD : langage de contrôle des données LCD : langage de contrôle des données Attribution des droits Attribution de droits GRANT <liste de droits> ON <table> TO <utilisateur> [WITH GRANT OPTION]; -- transfert de droits GRANT SELECT, UPDATE ON Super heros TO Edna Mode; GRANT ALL PRIVILEGES ON Super heros TO Government; Liste des droits SELECT INSERT DELETE UPDATE ALTER ALL PRIVILEGES 2017-2018 ensiie 52 2017-2018 ensiie 52
LCD : langage de contrôle des données LCD : langage de contrôle des données Attribution des droits (Remarques) Attribution de droits (Remarques) Droits sur un SGBD Certains SGBD (MySQL) Droits CREATE et DROP généralement ajoutés (création et suppression de BD et des tables) Droits sur une BD Certains SGBD (MySQL) Droits CREATE et DROP généralement ajoutés (création et suppression de tables) Droits sur une vue Syntaxe quasi-identique (VIEW à la place de TABLE) 2017-2018 ensiie 53 2017-2018 ensiie 53 LCD : langage de contrôle des données LCD : langage de contrôle des données Révocation de droits Révocation de droits REVOKE [GRANT OPTION FOR] <liste de droits> ON <object> TO <utilisateur> REVOKE UPDATE ON Super heros TO Edna Mode; REVOKE ALL PRIVILEGES ON Super heros TO PUBLIC; Droit supprimé pour un utilisateur U droit supprimé en cascade pour les utilisateurs ayant obtenu le droit par U 2017-2018 ensiie 54 2017-2018 ensiie 54