Base de données
Transcription
Base de données
BASE DE DONNEES 1 OlivierCuré [[email protected]] Contact Olivier Curé [email protected] http://www.univ-mlv.fr/~ocure IFIS bureau 262 Profil : Thèse au LIAP-5 (Laboratoire d'Intelligence Artificielle de Paris 5). 2 Mots-clés de ma recherche : représentation des connaissances, ontologie, web sémantique, XML, Interface Homme-Machine et automédication. OlivierCuré [[email protected]] Objectifs du cours Présentation des concepts liés aux bases de données, aux modèles des bases de données et aux systèmes de gestion de base de données. Vous permettre de concevoir des schémas et d'utiliser des base de données. Comprendre que la conception d'une base de données n'est pas triviale, demande de la flexibilité et de la réflexion. 3 OlivierCuré [[email protected]] Plan du cours 1. Introduction aux bases de données 2. Le modèle entité-association 3. Le modèle relationnel 4. SQL 5. Vues 6. Normalisation 4 OlivierCuré [[email protected]] Lectures recommandées Fundamentals of Database Systems, 4th edition Elmasri and Navathe. Addison Wesley A first course in database Ullman and Widom. Computer Science Press Intelligent database systems Bertino, Catania and Zarri. Addison Wesley Des structures aux bases de données Carrez, Masson 5 OlivierCuré [[email protected]] 0. Des chiffres 6 OlivierCuré [[email protected]] Evolution de l'information ● Ordre de grandeur : – 1Mo : 1 gros roman – 200Mo : ce que mémorise un être humain dans sa vie. – 900Mo : information contenue dans le génome d'une cellule humaine. – 1To : estimation de la taille d'un HD en 2007. Toutes les conversations d'un être humain dans sa vie au format MP3. – 20To : bibliothèque du congrès à Washington (que le texte), 20 millions d'ouvrages. – 200To : archives du net en 2003 12 milliards de pages. – 3Po : Bibliothèque du congrès scannerisée (textes + images). – 100Eo : total du flux d'information dans le cerveau humain durant sa vie (Von Neumann). – Eo (Exa), Zo (Zetta) et Yo (Yotta). O.Curé [7 ] Web et stockage ● ● ● ● Coût du stockage : – 1970 : 20 000F / Mo – 1998 : 2F / Mo – 2004 : < 0,005f / Mo Capacité de stockage est multipliée par 3,5 tous les 18 mois (plus que la loi de Moore). Le 10/5/2005, Google référence 8 058 044 651 de pages Web. 15 à 20% de l'existant ? Un exemple : Medline regroupe 11 millions d'articles provenant de 3600 journaux sur les 30 dernières années. O.Curé [8 ] 1. Introduction 9 OlivierCuré [[email protected]] Pourquoi étudier les bases de données Une fondation théorique appliquée à des besoins et problèmes réels et concrets. Regroupe de nombreuses notions informatiques : OS, programmation, logique, multimédia, intelligence artificielle, réseaux. Intérêt grandissant pour les technologies des BD : Industrie : data mining, data warehouse, customer relationship mgmt, etc.. Scientifique : génôme, digital libraries et le web, etc.. 10 Base de données multimédia, base de données et XML (NXD). OlivierCuré [[email protected]] Base de données (BD) Une base de données (database) est un ensemble structuré et cohérent de données enregistrées avec le minimum de redondance pour satisfaire simultanément plusieurs utilisateurs de manière sélective et dans un temps opportun. 11 OlivierCuré [[email protected]] Système de gestion de base de données (SGBD) Un ensemble de logiciels permettant la création et la maintenance de bases de données. Un SGBD (database Management System -DBMS) doit permettre : la description, l'organisation et la gestion des données sur les mémoires secondaires. la recherche, la sélection et la modification des données. 12 la manipulation des représentations abstraites des données, indépendamment de leur organisation et de leur implantation sur les supports physiques. OlivierCuré [[email protected]] Caractéristiques des SGBD Structure (types et comportements des données). Persistence des données (mémoire secondaire). Accès aux données (langage déclaratif pour les requêtes, langage procédural de programmation). Performance (accès et stockage des données). Partage ( accès concurrentiel et transactions) Volume important de données 13 Sécurité et reprise sur pannes OlivierCuré [[email protected]] Caractéristiques des SGBD Indépendance physique L'utilisation des données est indépendante de l'organisation physique (support de stockage et méthode d'accès). La modification de l'organisation physique des données ne doit pas entrainer de modifications dans les programmes accédant aux données. Indépendance logique L'utilisation des données est indépendante de la structure logique. 14 Une modification du schéma conceptuel ne doit pas entrainer la modification des programmes. OlivierCuré [[email protected]] Architecture ANSI /SPARC Trois niveaux : Niveau interne Niveau Conceptuel Niveau externe Schéma interne mapping conceptuel/ interne Schéma conceptuel mapping externe /conceptuel 15 Schéma Schéma externe #1 externe #2 ANSI : American National Standards Institute SPARC : Standard Planning and Requirments Committee OlivierCuré [[email protected]] 2. Modèle entitéassociation 16 OlivierCuré [[email protected]] Etape de développement d'une base de données Cahier des charges (besoin des utilisateurs, que doit gérer la bd). Schéma conceptuel (le plus souvent dans le modèle EA). Schéma logique (traduire le modèle EA dans le modèle de la base de données). Ajustement de schéma (normalisation, consistence). Schéma physique (indexes, organisation sur le disque). Sécurisation 17 OlivierCuré [[email protected]] Etape de développement d'une base de données (2) extrait de "Fundamentals of Database Systems 4th edition", Elmasri & Navathe, Addison-Wesley 18 OlivierCuré [[email protected]] Entité et propriété Une entité est similaire à la notion d'objet. Elle décrit une « chose » du monde. Un type d'entité est similaire à la notion de classe, elle définit la structure commune à un ensemble d'entités. Exemple : les étudiants. Une propriété correspond à un état. Les valeurs des propriétés décrivent une entité. Représentation graphique dans un diagramme EA : Une entité dans un rectangle Une propriété dans une forme ovale. 19 OlivierCuré [[email protected]] Diagramme EA 20 OlivierCuré [[email protected]] Propriétés identifiantes C'est l'ensemble des propriétés qui ne peuvent appartenir à plusieurs entités. La valeur doit dont être fixée pour chaque entité. Cette propriété est soulignée dans le diagramme EA. 21 OlivierCuré [[email protected]] Association Une association est un lien entre deux ou plusieurs entités. Un type d'association est une collection d'associations similaires. Un type d'association A va lier des types d'entités E1, ..,En de manière que chaque association dans A implique les entités e1 ∈ E1, e2 ∈ E2, ..., en ∈ En. Réprésentation sous la forme d'un losange. 22 OlivierCuré [[email protected]] Type d'entité et type d'association 23 OlivierCuré [[email protected]] Association(2) Un type d'association peut avoir ses propres attributs. 24 OlivierCuré [[email protected]] Cardinalité Les cardinalités permettent de mettre en évidence, le nombre minimum (maximum) d'instances d'un type d'entité qui sont en relation avec une instance d'un autre type d'entité. Les cardinalités sont représentées sous la forme d'un couple de valeurs min, max. min ∈{0,1} et max ∈ {1, n} 25 OlivierCuré [[email protected]] Diagramme ER avec cardinalités Un type d'association peut avoir ses propres attributs. 26 OlivierCuré [[email protected]] Association ternaire Si chaque élève participe à toutes les séances de TD : 27 Comment faire lorsque les étudiants ne sont pas tenus de suivre l'intégralité des TD des cours. OlivierCuré [[email protected]] Association ternaire (2) 28 OlivierCuré [[email protected]] Association n-aire Un médecin (ou un patient) particulier peut ne pas participer à la relation. Chaque instance de Prescription apparaît une fois et une fois seulement dans une instance de la relation « ordonnance ». Une instance de médicament n'apparaît au plus qu'une fois par ordonnance. 29 OlivierCuré [[email protected]] Association récursive rôle 30 OlivierCuré [[email protected]] Association et héritage On définir des hiérarchies au niveau des types d'entité. On utilise alors une association du type « is -a ». 31 OlivierCuré [[email protected]] Un exemple Une bibliothèque et sa gestion des emprunts : Un ouvrage est caractérisé par un numéro unique, un titre, un auteur et un éditeur. Un ouvrage est décrit par un ensemble de mots qui indiquent les sujets qui sont traités. Le bibliothèque dispose d'un ou plusieurs exemplaires de chaque ouvrage. Un exemplaire est identifié par un numéro et caractérisé par une date d'achat. Un emprunteur est identifié par un numéro , son nom et son adresse. 32 OlivierCuré [[email protected]] Diagramme EA de la gestion d'une bibliothèque 33 OlivierCuré [[email protected]] Bilan du modèle EA Avantages : Uniquement 3 concepts : entité, association et attribut. Représentation graphique intuitive et rapide. Inconvénients : Non-déterministe, pas de règle absolue pour déterminer ce qui est entité, attirbut ou association. Absences de contraintes d'intégrité, structures complexes. 34 OlivierCuré [[email protected]] 3. Le modèle relationnel 35 OlivierCuré [[email protected]] Modèle de données (data model) Un ensemble de concepts permettant de décrire la structure d'une base de données : types de données, relations, contraintes, opérations (langage de définition et de manipulation des données). sémantique. 36 OlivierCuré [[email protected]] Quelques modèles de données Evolution dans le temps : système de fichiers (50s) modèle hiérarchique( 60s) :IMS modèle réseau (70s): Codasyl, IDMS modèle relationnel (80s): Oracle, Sybase,DB2,.. modèle orienté objet (90s): Versant, Gemstone modèle objet-relationnel (90s) : postgreSQL 37 modèle semi-structuré (hétérogénéité, XML). Le modèle relationnel est le plus populaire aujourd'hui. OlivierCuré [[email protected]] Modèle relationnel Basé sur la notion d'ensemble (set) collection d'élément de même type pas d'ordre pour les enregistrements ordonnancement des attributs dans une relation pas de duplications des enregistrements On parle alors de SGBDR (RDBMS) 38 OlivierCuré [[email protected]] Domaine de valeurs Un domaine de valeurs correspond à un ensemble de valeurs. Par exemple les entiers, les réels, etc.. Le produit cartésien (x) de n domaines est l'ensemble de toutes les combinaisons des éléments de ces ensembles. Exemple : D1 = { a, b} et D2 = {a, e} D1 x D2 = {(a,a),(a,e),(b,a),(b,e) } 39 OlivierCuré [[email protected]] Relation Une relation est un sous-ensemble du produit cartésien d'une liste de domaines. Chaque relation est identifiée par un nom. Représentation sous la forme d'une table à 2 dimensions : des colonnes, attributs. des lignes, enregistrements ou n-uplets. 40 OlivierCuré [[email protected]] Attribut Un attribut prend ses valeurs dans domaine de valeurs. Un attribut est identifié par un nom. Exemple : titre Alien année nomDir prénomDir annéeNaissDir 1979 Scott Ridley 1943 Reservoir Dogs 1992 Tarantino Quentin 1963 The thing 1982 Carpenter John 1948 Volte-face 1997 Woo John 1946 Pulp Fiction 1995 Tarantino Quentin 1963 41 OlivierCuré [[email protected]] Clés Clé : un ensemble d'attributs dont le regroupement des valeurs identifie sans ambiguité un n-uplet (tuple). Clé candidate (candidate key): une clé pour laquelle aucun sous-ensemble n'est une clé. Une clé minimale. Clé primaire (primary key): une clé candidate sélectionnée pour être la clé principale d'une relation. Une clé primaire par relation. 42 OlivierCuré [[email protected]] Clé externe Une clé externe (foreign key) est un ensemble d'attributs dans une relation qui correspondent exactement à la clé primaire d'une autre relation. Le nom des attributs ne doivent pas nécessairement correspondre mais les domaines doivent être identiques. 43 OlivierCuré [[email protected]] Un exemple Une relation sur les films titre année Alien 1979 Reservoir Dogs 1992 The thing 1982 Volte-face 1997 Pulp Fiction 1995 Terminator 1984 Ghosts of Mars2001 Mad Max 1979 Mad Max 2 1981 44 nomDir prénomDir Scott Ridley Tarantino Quentin Carpenter John Woo John Tarantino Quentin Cameron James Carpenter John Miller George Miller George annéeNaissDir 1943 1963 1948 1946 1963 1954 1948 1945 1945 Quelques problèmes : Supprimer un film, ajouter un réalisateur, modifier la date de naissance d'un réalisateur, Cohérence des données. OlivierCuré [[email protected]] Un exemple (2) Une relation sur les films titre Alien Reservoir Dogs The thing Volte-face Pulp Fiction Terminator Ghosts of Mars Mad Max Mad Max 2 Une autre relation sur les réalisateurs idDir nomDir prénomDir annéeNaissDir Scott Ridley 1943 année idDir1 2 Tarantino Quentin 1963 1979 1 3 Carpenter John 1948 1992 2 4 Woo John 1946 1982 3 5 Cameron James 1954 1997 4 6 Miller George 1945 1995 2 1984 5 2001 3 Problèmes précédents : Supprimer un film, ajouter un 1979 6 réalisateur, modifier la date de naissance d'un réalisateur, Cohérence des données. 1981 6 45 OlivierCuré [[email protected]] Schéma d'une relation Le schéma d'une relation correspond à l'ensemble : nom de la relation, liste des attributs (avec domaines) et indication de la clé primaire (souligné). R : A1, A2, ..., An Schéma d'une base de données est l'ensemble des schémas des relations de la base. 46 OlivierCuré [[email protected]] Schémas, exemple Schéma des relations : film (titre, année, idDir) realisateur (idDir, nomDir, prenomDir, anneéNaisDir) Schéma de la base de données : film, realisateur 47 OlivierCuré [[email protected]] Mapping EA - relationnel Une type d'entité devient une relation. Une propriété devient un attribut. Une propriété identifiante devient une clé primaire. Une association devient une relation et sa représentation est fonction des cardinalités. 48 OlivierCuré [[email protected]] Transformation des associations en relations Les cardinalités maximales de l'association sont de 1 : L'identifiant d'une entité est utilisé comme clé étrangère de l'autre relation, ou inversement. 49 Entity1(a1, Entity2(a2, ou Entity1(a1, Entity2(a2, ...) ..., #a1) ...,#a2) ...) OlivierCuré [[email protected]] Transformation des associations en relations (2) La cardinalité maximale d'une association est à n et l'autre à 1 : L'identifiant de l'entité (*:n) devient une clé étrangère de l'entité (*:1). Entity1(a1, ..., #a2) Entity2(a2, ...) 50 OlivierCuré [[email protected]] Transformation des associations en relations (3) Les cardinalités maximales sont à n : L'association devient une relation et sa clé primaire se compose des identifiants des entités. Entity1(a1, ...) Entity2(a2, ...) Asso1(#a1,#a2, a3) 51 OlivierCuré [[email protected]] Exemple mapping relations n,m (1) Schéma relationnel Produit (numPro, nomPro) Client (numCli, nomCli) Achat (#numCli,#numPro) (2) 52 OlivierCuré [[email protected]] Transformation des associations en relations (4) Dans le cas d'une association « is-a », il est possible de voir la solution avec un point de vue orienté objet (duplication des attributs de la super-classe dans la sous-classe) ou bien entité-association (duplication de l'indentifiant de la super-classe dans la sous-classe). 53 Personne(id_pers,nom) Vision OO : joueur(id_pers, club) arbitre(id_pers, niveau) Vision EA : joueur(id_pers, nom, club) arbitre(id_pers, nom, niveau) OlivierCuré [[email protected]] Transformation des associations en relations (5) Dans le cas d'une association récursive, l'attribut clé primaire de la relation est dupliquée sous la forme d'une clé étrangère. Employe (id_emp, nom_emp, #id_emp_manager) 54 OlivierCuré [[email protected]] Exemple Bibliothèque 55 OlivierCuré [[email protected]] Schémas de la bibliothèque Schéma relationnel Mot_cle (numMC , valeurMC) Ouvrage (numOuv, titreOuv, nomAuteurOuv, editeurOuv) Exemplaire (numEx, dateAchat, #numEmp, #numOuv) Emprunteur (numEmp, nomEmp, adrEmp) MotCle_Ouvrage (numMC, numOuv) Schéma de la base de données Mot_cle, Ouvrage, Exemplaire, Emprunteur, MotCle_Ouvrage 56 OlivierCuré [[email protected]] 5. SQL OlivierCuré [[email protected]] SQL SQL = Structured Query Language Une des raisons du succès des BD relationnelles. SQL est basé sur l'algèbre et le calcul relationnels. 3 versions : SQL86 ou SQL 1 SQL92 ou SQL2 SQL99 ou SQL3 OlivierCuré [[email protected]] Les langages LDD ou Langage pour la Définition des Données (Data Definition Language - DDL) définition de l'ensemble du schéma de la base de données. (create, alter, rename, drop, etc.) LMD ou Langage pour la Manipulation des Données ( Data Manipulation Language - DML) consultation, modification, suppression et ajout des données. (select, insert, update, delete) LCD ou Langage pour le Contrôle des Données (Data Control Language - DCL) définition des permissions d'accès, administration (grant , revoke, commit, rollback, etc..). OlivierCuré [[email protected]] Schéma Les termes changent : table = relation; row = tuple; column = attribute A partir de SQL2, on trouve la notion de schema. La création d'un schema retourne du privilège du DBA. create schema test2 authorization ocure; Un schema regroupe les tables, contraintes, vues, etc.. OlivierCuré [[email protected]] Catalog Une catalogue est une collection nommée de schémas dans un SGBDR. Un catalogue regroupe les schémas de la base de données. OlivierCuré [[email protected]] LDD - Création de table Une table permet de spécifier une relation. En général, la déclaration d'un table regroupe: le nom de la table des attributs des contraintes la définition d'une clé primaire CREATE TABLE table_name ({column_name data_type[DEFAULT default_exp] [column_constraint [,..] ] | table_constraint } [,..] ); OlivierCuré [[email protected]] LDD - Création de table(2) Exemple create table personne (idPers int, nomPers varchar(20) not null, primary key(idPers)); Les types de PostgreSQL : Entier : integer Numeric : decimal(p,s) Réel : real Booléen : bool Chaines de caractères : char(n) et varchar(n) Incrémentation automatique : serial Date et heure : timestamp Date : date Il est possible de créer des types. OlivierCuré [[email protected]] Création de table avec contraintes sur les attributs Contraintes sur les attributs [CONSTRAINT constraint_name ] {NOT NULL | NULL | UNIQUE | PRIMARY KEY | CHECK (expression) | REFERENCES reftable [(refcolumn)] [ON DELETE action] [ON UPDATE action]} Valeurs de 'action' : No action Cascade Set null Set default OlivierCuré [[email protected]] Création de table avec contraintes sur la table Contraintes sur la table [CONSTRAINT constraint_name ] { UNIQUE (column_name [,..]| PRIMARY KEY (column_name[,..]) | CHECK (expression) | FOREIGN KEY (column_name[,..]) REFERENCES reftable [(refcolumn)] [ON DELETE action] [ON UPDATE action]} OlivierCuré [[email protected]] Exemple CREATE TABLE realisateur(idreal INTEGER, nomreal VARCHAR(30),prenomreal VARCHAR(30), annaisreal INTEGER, PRIMARY KEY(idreal)); CREATE TABLE film (idfilm INTEGER PRIMARY KEY, titre VARCHAR(30),annee INTEGER, idreal INTEGER, FOREIGN KEY (idreal) REFERENCES realisateur (idreal)); OlivierCuré [[email protected]] LDD - Supprimer un schéma, une table Suppression d'un schéma : DROP SCHEMA nomschema; Suppression d'une table du schéma à l'aide de l'instruction : DROP TABLE nomtable; OlivierCuré [[email protected]] LDD - Modifications Ajouter un attribut : ALTER TABLE table_name ADD COLUMN attribute_name data_type; Supprimer un attribut : ALTER TABLE table_name DROP COLUMN attribute_name; Ajouter une contrainte : ALTER TABLE table_name ADD CHECK (attribute_name condition); ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (attribute_name); ALTER TABLE table_name ADD FOREIGN KEY (attribute_name) REFERENCES table_name ( attribute_name); OlivierCuré [[email protected]] LDD – Modifications (2) Supprimer une contrainte : ALTER TABLE table_name DROP CONSTRAINT constraint_name; Modifier la valeur par défaut : ALTER TABLE table_name ALTER COLUMN attribute_name SET DEFAULT value; Renommer un attribut : ALTER TABLE table_name RENAME COLUMN old_attribute_name TO new_attribute_name; Renommer un attribut : ALTER TABLE old_table_name TO new_table_name; OlivierCuré [[email protected]] LMD – Sélection DISTINCT : ●Pas de duplicats dans la réponse. ●Optionnel et gourmand. Une liste des attributs présents dans les tables et le résultat. SELECT [DISTINCT] attribute FROM table WHERE condition ORDER BY attribute [asc|desc]; Des conditions combinées par AND, OR, NOT. Les conditions sotn de la forme att1 op att2, avec op ∈ {=,<=,>=,<,>, <>} Une liste des tables impliquées dans la requête. ●Définition d'alias (as nomalias) ● OlivierCuré [[email protected]] Exemple idfilm | titre | annee | idreal +++ 1 | Alien | 1979 | 1 2 | Reservoir Dogs | 1992 | 2 3 | The thing | 1982 | 3 4 | Volteface | 1997 | 4 5 | Pulp fiction | 1995 | 2 6 | Terminator | 1984 | 5 7 | Ghost of Mars | 2001 | 3 8 | Mad Max | 1979 | 6 9 | Mad Max2 | 1981 | 6 idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 SELECT titre, nomreal FROM realisateur r, film f WHERE prenomreal like 'John' AND r.idreal=f.idreal ; Résultat titre | nomreal + The thing | Carpenter Volteface | Woo Ghost of Mars | Carpenter OlivierCuré [[email protected]] Exemple (2) SELECT f.titre, f2.titre FROM film as f, film as f2, realisateur as r WHERE f.annee > f2.annee AND r.nomreal LIKE 'Carpenter' AND f.idreal=r.idreal; Résultat titre | titre + The thing | Alien The thing | Mad Max The thing | Mad Max2 Ghost of Mars | Alien Ghost of Mars | Reservoir Dogs Ghost of Mars | The thing Ghost of Mars | Volteface Ghost of Mars | Pulp fiction Ghost of Mars | Terminator Ghost of Mars | Mad Max Ghost of Mars | Mad Max2 OlivierCuré [[email protected]] LMD – Mise-à-jour Nom de la table modifiée Modification de(s) la valeur(s). Attributs séparés par des ",". UPDATE table SET attribute=value WHERE condition; Condition permettant d'identifier le(s) n-uplet(s). Le plus souvent, opération sur la clé primaire. OlivierCuré [[email protected]] Exemple -Mise-à-jour idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 Résultat UPDATE realisateur SET annaisreal = '1951', prenomreal = 'Jon' WHERE idreal=3; idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | Jon | 1951 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 OlivierCuré [[email protected]] LMD – Insertion Nom de la table où l'on ajoute les n-uplets. Liste des attributs à renseigner. INSERT INTO table (att1, att2, .., attn) VALUES (val1, val2, ..., valn); INSERT INTO table VALUES (val1, val2, ..., valm); Les valeurs du nouveau n-uplet. Il faut respecter l'ordre de la définition ou de la description de la table. OlivierCuré [[email protected]] Exemple - Insertion idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 Résultat idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 7 | Raimi | Sam | INSERT INTO realisateur(idreal,nom real,prenomreal) VALUES (7,'Raimi','Sam'); OU INSERT INTO realisateur VALUES (7,'Raimi','Sam',null) ; OlivierCuré [[email protected]] LMD – Suppression Nom de la table où l'on supprime le(s) n-uplet(s). DELETE FROM table WHERE condition; Identification du n-uplet à supprimer. Souvent une opération sur la clé primaire. OlivierCuré [[email protected]] Exemple - Insertion idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 7 | Raimi | Sam | DELETE FROM realisateur Résultat WHERE idreal = 7; idreal | nomreal | prenomreal | annaisreal +++ 1 | Scott | Ridley | 1943 2 | Tarantino | Quentin | 1963 3 | Carpenter | John | 1948 4 | Woo | John | 1946 5 | Cameron | James | 1954 6 | Miller | George | 1945 OlivierCuré [[email protected]] La valeur NULL Les valeurs sont parfois : Inconnues. Non applicables. SQL permet l'utilisation de la valeur "null". Celle-ci impose quelques nouvelles notions : Comparaison avec is [not] null. OlivierCuré [[email protected]] La valeur NULL (2) Apparition de nouveaux opérateurs (jointures externes). Une logique avec 3 valeurs (true, false et null). AND true true true false false null null false null false null false false false null OR true true true false true null true false null true true false null null null OlivierCuré [[email protected]] Aggrégation 5 fonctions permettent une aggrégation sur des ensembles de valeurs : count, sum, avg, min, max. Grouper les n-uplets par valeurs et appliquer la fonction d'aggrégation à chaque groupe de n-uplets. Exemple : SELECT avg(annee) ,max(annee), min(annee) FROM film; OlivierCuré [[email protected]] Aggrégation - count Utilisation de "*" dans count permet de compter toutes les lignes, null compris. Exemple : SELECT count(*) FROM film; // = 9 SELECT count(*) FROM client; // =5 SELECT count(*) FROM client WHERE nomcli is not NULL; // = 4 OlivierCuré [[email protected]] Group by Nécessité d'appliquer une fonction d'aggrégation sur un sous-ensemble de n-uplets d'une relation. Il faut alors créer des groupes parmi les n-uplets en fonction d'un attribut (attribut de regroupement). La clause group by permet cette opération : SELECT anneeNaisDir FROM relaisateur GROUP BY anneeNaisDir; OlivierCuré [[email protected]] Group by (2) L'attribut de regroupement doit apparaître dans les clauses group by et select. Si des valeurs null se trouvent dans l'attribut de regroupement, un groupe est créé pour celles-ci. OlivierCuré [[email protected]] Exemple GROUP BY Pour chaque département, fournir le numéro du département, le nombre d'employés et le salaire moyen : SELECT dno, count(*), avg(salary) FROM employee GROUP BY dno; OlivierCuré [[email protected]] Group by avec Having La clause having permet la spécification d'une condition sur les groupes. Seulement les groupements qui satisfont cette condition apparaissent dans le résultat. Exemple : SELECT dno, count(*), avg(salary) FROM employee GROUP BY dno HAVING dno=4; OlivierCuré [[email protected]] Group by avec jointures On peut utiliser des jointures en conjonction avec un group by. L'exécution du group by et autres fonctions est réalisée après la jointure des relations. Exemple : SELECT annee FROM film as f, realisateur as r WHERE f.idDir = r.idDir GROUP BY annee HAVING annee=1979 // 1979 2 OlivierCuré [[email protected]] Union dans SQL Contrainte : les ensembles des n-uplets doivent être compatibles dans l'union. Syntaxe : les films de 'Carpenter' ou 'Miller'. SELECT nomFilm FROM film f, realisateur r WHERE r.nom LIKE 'Miller' and r.idreal=f.idreal UNION SELECT nomFilm FROM film f, realisateur r WHERE r.nom LIKE 'Carpenter' and r.idreal=f.idreal OlivierCuré [[email protected]] Union, Intersect et except dans SQL On pouvait aussi écrire : SELECT nomFilm FROM film f, realisateur r WHERE (r.nom LIKE 'Carpenter' or r.nom LIKE 'Miller' and r.idreal=f.idreal); Même contrainte pour l'intersection. Instruction : INTERSECT. Et la différence avec la syntaxe EXCEPT ou MINUS suivant le SGBDR. OlivierCuré [[email protected]] Union, Intersect et except dans SQL (2) Par défaut, suppression des duplicats, comme dans l'algèbre relationnel. UNION ALL, INTERSECT ALL et EXCEPT ALL permettent de garder les duplicats. OlivierCuré [[email protected]] Création de la BD Company create table department (dnum int primary key, lib varchar(30)); create table project(pnum int primary key, pnom varchar(20), dno int, foreign key (dno) references department (dnum)); create table employee (nss int primary key, nom varchar(20), dno int, foreign key (dno) references department (dnum)); create table works_on (enss int , pno int, heures decimal(3,1), primary key(enss,pno), foreign key (enss) references employee (nss), foreign key (pno) references project (pnum)); OlivierCuré [[email protected]] Enrichissements de la BD Company /* Valeurs de departement */ insert into department values(5,'research'); insert into department values(4,'Administration'); insert into department values(1,'HeadQuarters'); /* Instances de project */ insert into project values(1,'ProductX',5); insert into project values(2,'ProductY',5); insert into project values(3,'ProductZ',5); insert into project values(10,'Computerization',4); insert into project values(20,'Reorganization',1); insert into project values(30,'NewBenefits',4); OlivierCuré [[email protected]] Enrichissements de la BD Company (2) insert into employee values(1,'Smith',5); insert into employee values(2,'Wong',5); insert into employee values(3,'Zelaya',4); insert into employee values(4,'Wallace',4); insert into employee values(5,'Narayan',5); insert into employee values(6,'Borg',1); insert into works_on values(2,3,10); insert into works_on values(2,10,10); insert into works_on values(2,20,10); insert into works_on values(3,10,30); insert into works_on values(3,30,10); OlivierCuré [[email protected]] Données de Company OlivierCuré [[email protected]] Requêtes imbriquées Une requête où la clause WHERE contient une sous-requête SELECT. Utilité : lorsqu'il faut chercher une valeur dans la bd et l'utiliser dans une condition. On utilise parfois l'opérateur IN qui compare une valeur avec un ensemble de valeurs du même type. OlivierCuré [[email protected]] Requêtes imbriquées (2) SELECT .. FROM .. WHERE attx IN (SELECT attx FROM ..); L'opérateur IN compare une valeur v à un ensemble de valeurs V. Evaluation à TRUE s'il y a une correspondance. (NOT IN). Exemple : SELECT pnum FROM project WHERE pnum IN (SELECT pnum FROM works_on WHERE enss=1 AND heures>20); // réponse : 1 OlivierCuré [[email protected]] Requêtes imbriquées (3) SELECT .. FROM .. WHERE attx = (SELECT attx FROM ..); L'opérateur = compare une valeur v à une autre valeur, et non un ensemble. Exemple : SELECT pnum FROM project WHERE pnum = (SELECT pnum FROM works_on WHERE enss=1 AND heures>20); // réponse : 1 SELECT pnum FROM project WHERE pnum = (SELECT pnum FROM works_on WHERE enss=1 AND heures>3); // Pas de réponse OlivierCuré [[email protected]] Requêtes imbriquées (4) SELECT .. FROM .. WHERE attx = (SELECT attx FROM ..); L'opérateur de comparaison IN est identique à =ANY et =SOME. Soit op ∈ {>,>=,<,<=,<>}. On peut écrire : WHERE att1 op ALL|ANY (SELECT ..). v > ALL V retourne TRUE si la valeur de v est supérieure à toutes les valeurs de l'ensemble V. SELECT pnum FROM project WHERE pnum > ALL (SELECT pnum FROM works_on); OlivierCuré [[email protected]] EXIST, NOT EXISTS Un autre opérateur de comparaison sur les ensembles. Contrôle si le résultat d'une requête imbriquée est vide (ne contient pas de n-uplets) ou non vide. Exemple: SELECT nom FROM employee e WHERE EXISTS (SELECT enss FROM works_on w WHERE e.nss=w.enss); OlivierCuré [[email protected]] Jointure, format général SELECT (column_list) FROM table_name [INNER | {LEFT | RIGHT | FULL } OUTER ] JOIN table_name ON qualification_list WHERE ... Par défaut, une jointure interne (inner join). OlivierCuré [[email protected]] Jointures SELECT * FROM employee e, works_on w WHERE e.nss = w.enss; SELECT * FROM employee e JOIN works_on w ON e.nss=w.enns; nss | nom | dno | enss | pno | heures +++++ 1 | Smith | 5 | 1 | 1 | 32.5 1 | Smith | 5 | 1 | 2 | 7.5 2 | Wong | 5 | 2 | 2 | 10.0 2 | Wong | 5 | 2 | 3 | 10.0 2 | Wong | 5 | 2 | 10 | 10.0 2 | Wong | 5 | 2 | 20 | 10.0 3 | Zelaya | 4 | 3 | 10 | 30.0 3 | Zelaya | 4 | 3 | 30 | 10.0 4 | Wallace | 4 | 4 | 3 | 40.0 OlivierCuré [[email protected]] Jointures externes SELECT nss, nom FROM employee e JOIN works_on w ON e.nss=w.enns; nss 1 2 3 4 nom Smith Wong Zelaya Wallace SELECT DISTINCT nss, nom FROM employee e LEFT OUTER JOIN works_on ON e.nss=w.enss; nss 1 2 3 4 5 6 nom Smith Wong Zelaya Wallace Narayan Borg OlivierCuré [[email protected]] Contraintes d'intégrités DROP TABLE works_on; DROP TABLE employee; DROP TABLE project; DROP TABLE department; CREATE TABLE department (dnum INT PRIMARY KEY, lib VARCHAR(30)); CREATE TABLE project (pnum INT PRIMARY KEY, pnom VARCHAR(20), dno INT, FOREIGN KEY (dno) REFERENCES department (dnum) ON DELETE CASCADE); CREATE TABLE employee (nss INT PRIMARY KEY, nom VARCHAR(20), dno INT, FOREIGN KEY (dno) REFERENCES department (dnum) ON DELETE CASCADE); CREATE TABLE works_on (enss INT, pno INT, heures DECIMAL(3,1), PRIMARY KEY(enss,pno) FOREIGN KEY (enss) REFERENCES employee (nss) ON DELETE CASCADE, FOREIGN KEY (pno) REFERENCES project (pnum) ON DELETE OlivierCuré [ocure@univCASCADE); mlv.fr] Contraintes d'intégrités (2) DELETE FROM department WHERE lib ILIKE 'res%'; OlivierCuré [[email protected]] Contraintes d'intégrités (3) DROP TABLE works_on; DROP TABLE employee; DROP TABLE project; DROP TABLE department; CREATE TABLE department (dnum INT PRIMARY KEY, lib VARCHAR(30)); CREATE TABLE project (pnum INT PRIMARY KEY, pnom VARCHAR(20), dno INT, FOREIGN KEY (dno) REFERENCES department (dnum) ON DELETE SET NULL on UPDATE SET NULL); CREATE TABLE employee (nss INT PRIMARY KEY, nom VARCHAR(20), dno INT, FOREIGN KEY (dno) REFERENCES department (dnum) ON DELETE SET NULL on UPDATE SET NULL); CREATE TABLE works_on (enss INT, pno INT, heures DECIMAL(3,1), PRIMARY KEY(enss,pno) FOREIGN KEY (enss) REFERENCES employee (nss) ON DELETE CASCADE, FOREIGN KEY (pno) REFERENCES project (pnum) ON DELETE CASCADE); OlivierCuré [[email protected]] Contraintes d'intégrités (4) DELETE FROM department WHERE lib ILIKE 'res%'; OlivierCuré [[email protected]] Contraintes d'intégrités (6) UPDATE department SET dnum=6 WHERE dnum=5; OlivierCuré [[email protected]] Quelques requêtes insert into employee values (8,'Toto',null); update employee set dno = (select dnum from department where lib like 'res%'); insert into employee select 7,'toto', dnum from department where lib like 'res%'; DELETE FROM project WHERE pnum = (SELECT pno FROM works_on WHERE enss=1); OlivierCuré [[email protected]]