Bases de Données Avancées

Dimension: px
Commencer à balayer dès la page:

Download "Bases de Données Avancées"

Transcription

1 1/93 Bases de Données Avancées Thierry Hamon Bureau H202 - Institut Galilée Tél. : Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F Bobigny cedex Tél. : , Fax. : thierry.hamon@univ-paris13.fr INFO2 BDA

2 2/93 Sources des transparents M.P. Dorville/F. Goasdoué, LRI, Université Paris Sud V. Mogbil, LIPN, Université Paris Nord J. Ullman C. Rouveirol, LIPN, Université Paris Nord F. Boufares, LIPN, Université Paris Nord

3 3/93 Présentation du cours Présentation du cours Objectif du cours (12 séances de 1h30) : Des Bases de Données aux Entrepôts de Données Exploitation Intelligente des Données Travaux Pratiques (12 séances de 1h30) : Mise en œuvre de concepts vus en cours (PL/SQL, UML SQL2/3, intégrité des données, etc.)

4 4/93 Programme des enseignements Rappels de SQL Conception & Modélisation de Bases de Données Présentation du cours Méta-Modélisation, Formalismes utilisés (ER, EER, UML,...) Expression & Cohérence des contraintes (SQL2/3, PL/SQL, OCL,...) Implantation de Bases de Données Relationnel-étendu, Orienté Objet (de UML à SQL2/3, JDBC, Java, PL/SQL J...) Optimisation de Requêtes, Evaluation de Requêtes Architecture de SGBD, Administration de BD Autres (Bases de Données, Entrepôts de données, XML) Gros volumes de données / Entrepôts de données / Données MultiDimensionnelles Données Homogènes & Hétérogènes, Données Réparties/Web, Données de type documents,...

5 5/93 Historique Générations de SGBD Historique Volume de données Type de données Indépendance physique Portabilité SGBD 3 Avancés SGBD4/5 Avancés 2004/ SGBD 2 Relationnels SGBD 1 Hiérarchies, Réseaux Puissance Performance Cohérence

6 6/93 Historique Exemples de SGBD Historique SGBD4/5 Volume de données Type de données Indépendance physique Portabilité SGBD 1 COADSYL, SOCRATE,... SGBD 2 ORACLE 5/6 INGRES, DB2,... SGBD 3 ORACLE 7/8, INGRES, DB2, Sybase, Verssant Enjin (O2), ObjectStore, Orlent, MySQL, PostGreSQL, SQLServer, ACCESS,... Puissance ORACLE 9i, 10g, 11 DB2,... XML,... Bases de données Entrepôts de données Intégration de Données Performances Cohérence

7 7/93 Historique Applications BD, ED, FD Historique Volume de données Type de données Fouille de données (Analyse du comportement des clients, etc.) Entrepôts de données (grosses masses de données) Intégration de plusieurs systèmes d information nationaux et internationnaux) (milliers de tables de quelques millions de lignes) > 100 Go Applications : Gestion des risques, Analyse des ventes (100 tables de quelques millions de lignes) 2 Go Applications : Paie, Marketing, Financière (50 tables de quelques milliers de lignes) 50 Mo Bases de Données Entrepôts de Données Intégration de Données Performance

8 8/93 Historique Applications BD, ED, FD Historique Volume de données Type de données Entrepôts de données (OLTP : < 10 secondes) (OLAP < 1 heure) ( MV : agrégation,...) (Batch : Quotidien ou mensuel < 1h) Grosse volumétrie : travail d optimisation et suivi des activités du DWh nécéssaire Par expérience, certains traitements ne se terminent pas au bout de quelques jours Nécessité de modifications techniques et fonctionnelles Applications : Gestion des risques, Analyse des ventes (Batch : < 1 heure) Applications : Paie, Marketing, Financière (OLTP: quelques secondes) (Batch : < 1 heure) Bases de Données Entrepôts de Données Intégration de Données Performance

9 9/93 Historique Structure et type de données Historique Volume de données Type de données Indépendance physique Portabilité Relations Relationnelle & objet Structure de données TABULAIRE Type de données COMPLEXE Hiérarchique & Réseau Structure de données en RESEAU Structure HIERARCHIQUE des données Puissance Performance Cohérence

10 10/93 Commandes SQL Plusieurs sortes de commandes SQL parmi lesquelles : LDD (langage de définition de données), LMD (langage de manipulation des données) c est-à-dire du LMJ (langage de mise à jour) et du LID (langage d interrogation des données), LCD (langage de contrôle des données).

11 11/93 Le Langage de Définition de Données (LDD) Ensemble de commandes qui définit une base de données et les objets qui la composent la définition d un objet inclut sa création: CREATE sa modification ALTER sa suppression DROP

12 12/93 CREATE TABLE La forme générale d une création de table est : CREATE TABLE n o m d e t a b l e ( d é c l a r a t i o n a t t r i b u t [,..., d é c l a r a t i o n a t t r i b u t ], [ c o n t r a i n t e d e t a b l e,..., c o n t r a i n t e d e t a b l e ] ) ; d é c l a r a t i o n a t t r i b u t ::= nom de colonne t y p e d e d o n n e e s [DEFAULT e x p r e s s i o n ] [< l i s t e c o n t r a i n t e d e c o l o n n e >]

13 13/93 Types Types et contraintes en SQL BOOLEAN booléens INTEGER, SMALLINT, NUMBER numériques entiers FLOAT, REAL, DECIMAL(n,d), NUMBER(n,d) numériques réels CHAR(n), VARCHAR(n), VARCHAR2(n) caractères et chaînes DATE, TIME, DATETIME dates Contraintes d intégrité PRIMARY KEY clef primaire FOREIGN KEY clef étrangère REFERENCES contrainte d inclusion CHECK contrainte générale UNIQUE valeur unique et clefs candidates NOT NULL obligation de valeur CONSTRAINT nom d une contrainte

14 14/93 CREATE TABLE: contrainte de colonne c o n t r a i n t e d e c o l o n n e ::= [ CONSTRAINT n o m d e c o n t r a i n t e ] { NOT NULL NULL UNIQUE PRIMARY KEY CHECK ( c o n d i t i o n ) REFERENCES t a b l e d e r e f e r e n c e [ ( c o l o n n e d e r e f e r e n c e ) ] [ ON [ DELETE UPDATE] [CASCADE SET NULL ] ] }

15 15/93 CREATE TABLE: contrainte de table c o n t r a i n t e d e t a b l e ::= [ CONSTRAINT n o m d e c o n t r a i n t e ] { UNIQUE ( l i s t e d e c o l o n n e ) PRIMARY KEY ( l i s t e d e c o l o n n e ) CHECK ( c o n d i t i o n ) FOREIGN KEY ( l i s t e d e c o l ) REFERENCES t a b l e d e r e f [ ( l i s t e d e c o l d e r e f ) ] [ ON [ DELETE UPDATE] [CASCADE SET NULL ] ] }

16 16/93 CREATE TABLE Création d une nouvelle table, initialement vide, dans la base de données courante Propriétaire : l utilisateur lançant la commande Si spécification d un schéma (par exemple, CREATE TABLE monschema.matable...) : création de la table dans le schéma spécifié. Sinon, création dans le schéma actuel. NB: Le nom de la table doit être distinct des noms des autres tables, séquences, index ou vues dans le même schéma.

17 17/93 CREATE TABLE Contraintes Contrainte : objet SQL qui aide à définir l ensemble de valeurs valides de plusieurs façons. Clauses de contrainte optionnelle : spécification des contraintes que les nouvelles lignes ou les lignes mises à jour doivent satisfaire pour qu une opération d insertion ou de mise à jour réussisse.

18 18/93 Create table: exemple Soit le schéma suivant Compagnie(comp : chaine, nomcomp : chaine) Pilote(brevet : chaine, nom : chaine, age : entier, compa : chaine) Pilote[compa] Compagnie(comp)

19 19/93 Create table: exemple Les commandes de création sont : Create table Compagnie ( com varchar2 ( 3 0 ), nomcomp varchar2 (50) not n u l l, primary key ( comp ) ) ; Create table P i l o t e ( b r e v e t varchar2 ( 2 0 ), nom varchar2 (30) not n u l l, age smallint, compa varchar2 ( 3 0 ), primary key ( b r e v e t ), f o r e i g n key ( compa ) r e f e r e n c e s Compagnie ( comp ), c o n s t r a i n t agechk check ( age >=0));

20 20/93 CREATE TABLE: contrainte de clé Contrainte de clé primaire PRIMARY KEY : Spécification d une ou plusieurs colonnes d une table pouvant contenir seulement des valeurs uniques et non nulles PRIMARY KEY : simple combinaison de UNIQUE et NOT NULL, mais aussi identification d un ensemble de colonnes comme clé primaire fournissant des métadonnées sur le concept du schéma une clé primaire implique que d autres tables peuvent se lier à cet ensemble de colonnes comme un unique identifiant pour les lignes. Une seule clé primaire peut être spécifiée pour une table, qu il s agisse d une contrainte de colonne ou de table.

21 21/93 CREATE TABLE, contrainte de clé étrangère Exemple Soit la relation Vend(bar, biere, prix) et la relation Biere(nom, couleur, origine). On peut imposer qu une bière vendue dans un bar soit une vraie bière, i.e., qu elle soit effectivement décrite dans la relation Biere. La contrainte qui impose qu une bière de la relation Vend soit décrite dans la relation Biere est une contrainte de clé étrangère ou foreign key en anglais.

22 22/93 CREATE TABLE, contrainte de clé étrangère Deux manières de préciser une contrainte de clé étrangère : utiliser le mot-clé REFERENCES dans la déclaration d un attribut (pour les clés mono-attribut) comme une contrainte de table: FOREIGN KEY ( a t t r i b u t e 1,..., a t t r i b u t e n ) ) REFERENCES <r e l a t i o n > ( a t t r i b u t e 1,..., a t t r i b u t e n )} attention, les attributs référencés doivent être déclarés comme des PRIMARY KEY ou UNIQUE.

23 23/93 Contrainte de clé étrangère, exemple CREATE TABLE B i è r e ( nom CHAR(20) PRIMARY KEY, c o u l e u r CHAR( 2 0 ), o r i g i n e CHAR( 2 0 ) ) ; CREATE TABLE Vend ( bar CHAR( 2 0 ), b i e r e CHAR(20) REFERENCES B i è r e (nom ), p r i x REAL ) ;

24 24/93 Contrainte de clé étrangère, autre syntaxe CREATE TABLE B i è r e ( nom CHAR(20) PRIMARY KEY, c o u l e u r CHAR( 2 0 ), o r i g i n e CHAR( 2 0 ) ) ; CREATE TABLE Vend ( bar CHAR( 2 0 ), b i e r e CHAR( 2 0 ), p r i x REAL, FOREIGN KEY( b i e r e ) REFERENCES B i è r e (nom ) ) ;

25 25/93 Clé étrangère, pourquoi? S il existe une contrainte de clé étrangère d un ensemble d attributs d une relation R à une clé de la relation S, deux violations sont possibles : Une insertion ou une maj de R introduit des valeurs qui n existent pas dans S Un effacement ou une maj de S fait que certains nuplets de R pointent dans le vide

26 26/93 Clé étrangère, pourquoi? Exemple Soit R = Vend et S = Biere. une insertion ou maj dans Vend qui introduit une bière qui n existe pas doit être rejetée Un effacement ou une maj de Biere qui supprime une bière qui est référencée par des nuplets de Vend peut être traité de 3 manières différentes.

27 27/93 Stratégie de propagation de modification 1 Default : rejet de la modification 2 Cascade : réalisation des mêmes changements dans Vend, i.e.. si effacement/maj d un nplet dans Biere, alors effacement/maj des nplets de Vend référençant cette bière 3 Set NULL : les nuplets référençant une bière supprimée dans Biere sont mis à NULL pour l attribut biere dans Vend. Lors de la déclaration d une clé étrangère, il est possible de choisir les stratégies SET NULL ou CASCADE indépendamment pour l effacement ou la maj. Après la déclaration de foreign-key : ON [UPDATE DELETE ] [ SET NULL CASCADE] La stratégie par défaut est de rejeter l effacement et la mise à jour.

28 28/93 CREATE TABLE: propagation de modification Exemple CREATE TABLE Vend ( bar CHAR( 2 0 ), b i e r e CHAR( 2 0 ), p r i x REAL, FOREIGN KEY( b i e r e ) REFERENCES B i è r e (nom) ON DELETE SET NULL ON UPDATE CASCADE ) ;

29 29/93 CREATE TABLE: contrainte de colonne La distinction entre contrainte de colonne et contrainte de table est que celle de colonne ne s applique qu à une colonne à la fois. La clause NOT NULL impose de renseigner le champ par une valeur valide.

30 30/93 CREATE TABLE: contrainte CHECK Les contraintes de la forme CHECK (condition) sont des contraintes de domaine. Elles utilisent les opérateurs suivants (cf SELECT): A BETWEEN a AND b: équivalent à A>=a AND A<=b A IN (a1,a2,...,an) équivalent à A=a1 OR A=a2 OR... OR A=an A LIKE motif où le motif est une expression telle que le caractère % remplace toute suite (même vide) de caractères et le caractère remplace exactement un caractère. La condition peut utiliser le nom de l attribut, mais tout autre nom de relation ou d attribut doit apparaître dans une sous requête

31 31/93 Contrainte de domaine, exemple CREATE TABLE Vend ( bar CHAR( 2 0 ), b i e r e CHAR(20) CHECK ( b i e r e IN \ (SELECT nom FROM B i è r e ) ), p r i x REAL CHECK ( p r i x <= 5.00 ) ) ; Les contrainte de domaine ne sont vérifiées que quand une valeur de la table courante est ajoutée ou mise à jour. CHECK (prix <= 5.00) vérifie chaque nouveau prix et refuse la mise à jour si le prix est supérieur à 5 (euros). Par contre CHECK (biere IN (SELECT nom FROM Bière)) n est pas vérifiée lors d une suppression de Biere (par opposition à la contrainte foreign-key).

32 32/93 Contrainte au niveau nuplet CHECK ( <condition> ) peut apparaître comme élément d un schéma de relation. La condition peut référencer n importe lequel des attributs de la relation Tout autre attribut ou relation doit apparaître dans une sous-requête Ces contraintes sont vérifiées lors de l ajout (INSERT), de l insertion ou de la mise à jour (UPDATE) de nuplets

33 33/93 Contrainte au niveau nuplet, exemple CREATE TABLE Vend ( bar CHAR( 2 0 ), b i e r e CHAR( 2 0 ), p r i x REAL, CHECK ( bar = Joe s p r i x <= ) ) ; Bar OR

34 34/93 Modification de la structure d une table Il faut préciser la nature de la modification. Plusieurs syntaxes : ALTER TABLE n o m t a b l e ADD champ t y p e CONSTRAINT nom c t r ; ALTER TABLE n o m t a b l e ADD champ t y p e CONSTRAINT nom c t r ; ALTER TABLE n o m t a b l e MODIFY champ t y p e [ o p t i o n s ] ; ALTER TABLE n o m t a b l e DROP champ CONSTRAINT nom ; C est pour cela qu il est bon de nommer les contraintes!!!

35 35/93 Modification de la structure d une table Exemples ALTER TABLE P i l o t e ADD i n d i c e i n t e g e r ; ALTER TABLE P i l o t e DROP CONSTRAINT agechk ; ALTER TABLE p r o d u c t i n f o r m a t i o n MODIFY ( m i n p r i c e DEFAULT 1 0 ) ;

36 36/93 ALTER TABLE (1) ALTER TABLE change la définition d une table existante. Il y a plusieurs variantes: ADD nom de colonne domaine et ADD (liste de colonnes) ajoutent une nouvelle colonne à la table en utilisant la même syntaxe que CREATE TABLE. Une nouvelle colonne ne peut avoir la contrainte NOT NULL que si la table est vide. ADD contrainte de table ajoute une nouvelle contrainte à une table en utilisant la même syntaxe que CREATE TABLE.

37 37/93 ALTER TABLE (2) DROP COLUMN nom de colonne : suppression d une colonne d une table. Les indexes et les contraintes de table référençant cette colonne sont automatiquement supprimés. Il faut utiliser l option CASCADE si certains objets hors de la table dépendent de cette colonne (clés étrangères,...). DEFAULT expression : Pas de modification des lignes déja présentes dans la table. Les valeurs par défaut ne s appliquent qu aux prochaines commandes INSERT.

38 38/93 ALTER TABLE (3) RENAME TO : changement de nom d une table ou le nom d une colonne de la table. Elle est sans effet sur les données stockées. DROP CONSTRAINT : suppression des contraintes d une table. Plusieurs contraintes peuvent avoir le même nom, toutes ces contraintes sont supprimées.

39 39/93 ALTER TABLE (4) ALTER TABLE : copie temporaire de la table originale. 1 Les modifications sont faites sur cette copie, 2 puis la table originale est effacée, 3 et enfin la copie est renommée pour remplacer l originale. Cette méthode permet de rediriger toutes les commandes automatiquement vers la nouvelle table sans pertes. Durant l exécution de ALTER TABLE, la table originale est lisible par d autres clients. Les modifications et insertions sont reportées jusqu à ce que la nouvelle table soit prête.

40 40/93 Suppression d une table DROP TABLE nom table: efface toutes les données et le schéma d une table Exemple : DROP TABLE P i l o t e ;

41 41/93 DROP TABLE DROP TABLE n o m d e t a b l e [,... ] [ AS ( c l a u s e s e l e c t ) ] [ CASCADE ] ; } DROP TABLE : suppression des tables de la base de données. Seul son propriétaire peut détruire une table. DROP TABLE : suppresion de tout index, règle, déclencheur et contrainte existant sur la table cible. Néanmoins, pour supprimer une table qui est référencée par une contrainte de clé étrangère d une autre table, CASCADE doit être spécifié (CASCADE supprimera la contrainte de clé étrangère, pas l autre table elle-même)

42 42/93 Dictionnaire des Données Une des parties les plus importantes d une BD Un ensemble de tables qui stockent toute l information de la base de données. Un dictionnaire des données contient: la définition de tous les schémas d objets de la base de données (tables, vues, indexes, functions, triggers,... ) l espace mémoire alloué et utilisé par ces objets les valeurs par défaut pour les attributs toute information sur les contraintes d intégrité le nom des utilisateurs, le rôle et les droits de chaque utilisateur...

43 43/93 Dictionnaire des Données Le dictionnaire est structuré en tables et vues Toutes ces tables et vues sont stockées dans le tablespace SYSTEM de cette BD Ces tables sont en read only et peuvent uniquement être requêtées (SELECT...)

44 44/93 Organisation du dictionnaire Vues avec préfixe USER Description de l environnement de l utilisateur dans la BD, informations à propos du schéma des objets créés par l utilisateur, les droits accordés par l utilisateur,... Ne décrit que ce qui est pertinent pour l utilisateur SELECT object name, o b j e c t t y p e FROM USER OBJECTS ;

45 45/93 Organisation du dictionnaire Vues avec préfixe ALL Vues qui décrivent la perspective de l utilisateur sur tout le SGBD. Ces vues donnent les informations sur les objets auxquels l utilisateur a accès en dehors des objets dont l utilisateur est propriétaire. SELECT owner, object name, o b j e c t t y p e FROM ALL TABLES ; spécifie toutes les tables auxquelles un utilisateur accès et leurs propriétaires

46 46/93 Organisation du dictionnaire Les vues avec le préfixe DBA ne peuvent être requêtées que par l administrateur oracle.

47 47/93 Quelques tables ou vues du dictionnaire DICTIONARY (DICT): vue du dictionnaire USER TABLES: tables et vues créées par l utilisateur USER CATALOG: tables et vues sur lequel l utilisateur a des droits, sauf celles du dictionnaires des données USER TAB COLUMNS: attributs des colonnes des tables ou vues créées par l utilisateur USER INDEXES: index créés par l utilisateur...

48 48/93 Exemples d utilisation Par exemple, recherche d information sur les contraintes On recherche les noms des tables et vues contenant le mot CONSTRAINTS : s e l e c t table name from d i c t where table name l i k e %CONSTRAINTS% On affiche le nom des colonnes de la table USER CONSTRAINTS: describe USER CONSTRAINTS ; On cherche les informations que l on veut : s e l e c t c o n s t r a i n t n a m e, c o n s t r a i n t t y p e, table name from u s e r s c o n s t r a i n t s

49 49/93 Exemples d utilisation s e l e c t from u s e r t a b l e s ; s e l e c t table name from u s e r t a b l e s ; s e l e c t from u s e r i n d e x e s where table name = TOTO ;

50 50/93 Le langage de manipulation de données Le langage de manipulation : LMDde données : LMD Ensemble de commandes qui permet la consultation et la mise à jour des objets créés par le langage de définition de données La mise à jour inclut : l insertion de nouvelles données la modification de données existantes la suppression de données existantes

51 51/93 Le langage de manipulation de données Le langage de manipulation : LMDde données : LMD Exemple SELECT < l i s t e champ ( s)> FROM < l i s t e n o m t a b l e ( s)> [WHERE c o n d i t i o n ( s ) ] [ o p t i o n s ] ; INSERT INTO <nom table > [( < l i s t e champ ( s ) >)] VALUES (< l i s t e v a l e u r s >); UPDATE <nom table > SET <champ> = <e x p r e s s i o n > [WHERE < l i s t e c o n d i t i o n ( s)> ] ; DELETE FROM <nom table > [WHERE < l i s t e c o n d i t i o n ( s)> ] ;

52 52/93 Exemples INSERT - UPDATE Le -langage DELETE de manipulation de données : LMD Ajout d un tuple INSERT INTO PRODUIT VALUES (400, Nouveau p r o d u i t, ) ; Mise à jour d un attribut UPDATE CLIENT SET Nom= Dudule WHERE NumCli = 3 ; Suppression de tuples DELETE FROM CLIENT WHERE V i l l e = Lyon ;

53 53/93 Insertion dans une table Le langage de manipulation de données : LMD Pour insérer un nuplet dans une relation: INSERT INTO <r e l a t i o n > VALUES ( < l i s t o f values> ) ; Exemple : On veut ajouter à la table de schéma Apprécie(Client, Bière) le fait que Jean aime la INSERT INTO A p p r é c i e VALUES( Jean, 1664 ) ;

54 54/93 Spécifier des attributs dans unle langage INSERT de manipulation de données : LMD On peut ajouter à la relation une liste de noms d attributs, si: on a oublié l ordre des attributs de la relation certains attributs ont des valeurs manquantes (le système complètera les valeurs manquantes à NULL ou à une valeur par défaut spécifiée) Exemple : On veut ajouter à la table de schéma Apprécie(Client, Bière) le fait que Jean aime la INSERT INTO A p p r é c i e ( Bière, C l i e n t ) VALUES( 1664, Jean ) ;

55 55/93 Insérer plusieurs tuples à Le lalangage foisde manipulation de données : LMD Il est possible d ajouter à une table le résultat d une sous-requête : INSERT INTO <r e l a t i o n > <subquery > ) ; Exemple : Si on suppose que la table Fréquente(Client, Bar) stocke la liste des clients d un bar, on peut créer une relation ConnaissancesJean(Nom) qui stocke tous les clients qui fréquentent les mêmes bars que Jean. INSERT INTO C o n n a i s s a n c e s J e a n (SELECT f 2. C l i e n t FROM Fréquente f1, F réquente f 2 WHERE f 1. C l i e n t = Jean AND f 2. C l i e n t <> Jean AND f 1. bar = f 2. bar ) ;

56 56/93 Mise à jour des données Le langage de manipulation de données : LMD UPDATE : mise à jour des données d une table La modification est effectuée sur toutes les lignes de la table ou sur les seules lignes qui vérifient une condition de sélection UPDATE <nom table > SET <colonne1 > = <e x p r e s s i o n 1 > [,..., <colonnen> = <e x p r e s s i o n N > ] [WHERE < l i s t e c o n d i t i o n s > ] UPDATE <nom table > SET ( colonne1,..., c o lonnen ) = SELECT... [WHERE c o n d i t i o n s ] DELETE: suppression des lignes d une table DELETE FROM <nom table > [WHERE < l i s t e c o n d i t i o n s >]

57 57/93 Extraction de données: commande Le langage SELECT de manipulation de données : LMD Extraction des données d une ou plusieurs tables, selon certains critères, et range le résultat de la sélection dans une nouvelle table une requête SQL s exprime au moyen de la commande SELECT de la façon suivante: SELECT <cible> : ce que l on veut FROM <liste table(s)> : dans quelles tables [WHERE <liste condition(s)>] : selon des critères d extraction, éventuellement

58 58/93 Select-From-Where: Exemple Le langage de manipulation de données : LMD SELECT nom FROM B i è r e WHERE o r i g i n e = Belge ; } SELECT nom FROM B i è r e WHERE o r i g i n e = Belge AND c o u l e u r = ambrée ;

59 59/93 Syntaxe commande SELECT Le langage de manipulation de données : LMD Version simplifiée de SELECT SELECT [ ALL DISTINCT ] nom de colonne [, l i s t e ] FROM n o m d e t a b l e [ a l i a s ] [, l i s t e ] [ WHERE { c o n d i t i o n [ NOT ] EXISTS ( c l a u s e s e l e c t ) nom de colonne IN ( c l a u s e s e l e c t ) nom de colonne o p e r a t e u r [ ALL ANY] ( c l a u s e s e l e c t ) ] } [ GROUP BY nom de colonne [, l i s t e n o m d e c o l o n n e ] ] [ HAVING c o n d i t i o n ] [ ORDER BY nom de colonne [ASC DESC] [, l i s t e ] ] } On considère l algébre relationnelle étendue au cas multi-ensembliste. On précise DISTINCT dans le champs SELECT pour retrouver un resultat ensembliste. ALL est la valeur par défaut.

60 60/93 Exemples Opérateur DISTINCT Le langage de manipulation de données : LMD Nombre total de commandes SELECT COUNT( ) FROM COMMANDE; SELECT COUNT( NumCli ) FROM COMMANDE; Nombre de clients ayant passé commande SELECT COUNT( DISTINCT NumCli ) FROM COMMANDE; COMMANDE NumCli Date Quantite 1 22/09/ /09/ /09/05 2 COUNT(NumCli) donne pour résultat : 3 COUNT(DISTINCT NumCli) donne pour résultat : 2

61 61/93 Expressions dans les clauses Le SELECT langage de manipulation de données : LMD Une expression bien formée peut apparaître comme un élément de la clause SELECT. Exemple : En utilisant la table Vend(Bar, Bière, Prix) : SELECT Bar, Bière, P r i x 1.28 AS P r i x D o l l a r FROM Vend ; D autres opérations arithmétiques et fonctions mathématiques : SELECT s a l a i r e + prime FROM f i n a n c e s ; SELECT age annee FROM employe ; SELECT base taux FROM f i n a n c e s ; SELECT s o r t i e / q u a n t i t e FROM f i n a n c e s ; utilisation de abs(valeur), ceil(valeur), cos(valeur),...

62 62/93 Exemples Fonctions d agrégat Le langage de manipulation de données : LMD Elles opèrent sur un ensemble de valeurs. AVG() : moyenne des valeurs SUM() : somme des valeurs MIN(), MAX() : valeur minimum, valeur maximum COUNT() : nombre de valeurs Moyenne des prix des produits SELECT AVG(PrixUni) FROM PRODUIT;

63 63/93 Eliminer les duplicats dans un groupement Le langage de manipulation de données : LMD Utiliser DISTINCT dans un groupement Le nombre de prix différents pour la 1664 SELECT COUNT(DISTINCT p r i x ) FROM Vend WHERE b i è r e = 1664 ; Les nuplets qui ont la valeur NULL pour l attribut d agrégat ne contribuent jamais au groupement (sum, average, count, min ou max) SELECT count ( ) FROM Vend WHERE b i è r e = 1664 ; compte le nombre de bars qui vendent de la 1664 SELECT count ( p r i x ) FROM Vend WHERE b i è r e = 1664 ; compte le nombre de bars qui vendent de la 1664 à un prix connu

64 64/93 La clause FROM Le langage de manipulation de données : LMD spécification du nom de la ou des tables dans lesquelles les données seront sélectionnées lorsque plusieurs tables figurent dans cette clause, le système effectue une opération de produit cartésien ou de jointure entre les tables jointure : qualification sur les attributs de jointure dans la clause WHERE produit cartésien : pas de qualification les lignes des tables sélectionnées par les opérations de jointure sont celles qui vérifient les conditions entre les attributs de jointure (comparaison entre les valeurs des champs clés des différentes tables) plus les critères d extraction.

65 65/93 La clause Where Le langage de manipulation de données : LMD spécification des critères ou conditions d extraction portant sur les valeurs des champs sélectionnés les conditions peuvent être combinées à l aide des opérateurs AND et OR les critères de recherche s expriment par des comparaisons entre valeurs de champs et/ou constantes des recherches par intervalle (BETWEEN) l appartenance ou non à un ensemble (IN) la recherche par motif - pattern matching - (LIKE) des tests de nullité (comparaison avec la valeur NULL : IS NULL)

66 66/93 Exemple Le langage de manipulation de données : LMD En utilisant les relations Apprécie(Client, Bière) et Fréquente(Client,Bar), trouver l ensemble des bières qui sont appréciées par au moins une personne qui fréquente le Joe s Bar. SELECT B i è r e FROM Apprécie, F réquente WHERE Bar = Joe s Bar AND Fréquente. C l i e n t = A p p r é c i e. C l i e n t ;

67 67/93 Syntaxe de la commande SELECT Le langage de manipulation de données : LMD * : sélectionne tous les champs liste champs: sélectionne les champs de liste tables expressions: combinaison d attributs et/ou d opérateurs et/ou de fonctions dont l évaluation correspond à une valeur agrégats: fonctions de calcul sur des groupes de lignes sélectionnées count(expression) avg(expression) min(expression) max(expression) sum(expression)

68 68/93 Lien AR - SQL Le langage de manipulation de données : LMD Soit (R, att, dom) un schéma de BD tel que R 1 R n R et A 1,..., A m att( i R i ) pour i 1,..., n.. L expression algébrique suivante π[a 1,..., A m ](σ[p](r 1 R n )) où p est un prédicat sur R 1 R n est équivalente à la requête SELECT A 1,..., A m FROM R 1,..., R n WHERE p ;

69 69/93 Exemples traduction AR -Le langage SQLde manipulation de données : LMD Projection: π[nom, Prenom](CLIENT), i.e. Noms et Prénoms des clients, uniquement SELECT Nom, Prenom FROM CLIENT ; Sélection : σ[ville = Lyon ](CLIENT), i.e. Clients qui habitent à Lyon SELECT FROM CLIENT WHERE V i l l e = Lyon ;

70 70/93 Exemples traduction AR -Le langage SQLde manipulation de données : LMD σ[quantite 3](COMMANDE), i.e. Commandes en quantité au moins égale à 3 SELECT FROM COMMANDE WHERE Q u a n t i t e >= 3 ; σ[50 PrixUni 100](PRODUIT), i.e. Produits dont le prix est compris entre 50 et 100 euros SELECT FROM PRODUIT WHERE P r i x U n i BETWEEN 50 AND 100; σ[quantite IS NULL](COMMANDE), i.e. Commandes en quantité indéterminée SELECT FROM COMMANDE WHERE Q u a n t i t e IS NULL;

71 71/93 Variable nuplet Le langage de manipulation de données : LMD Parfois, on a besoin de deux copies de la même table pour faire une requête Il est possible de distinguer les deux copies en faisant suivre le nom de la même relation par un nom de variable nuplet, dans la clause FROM. Il est toujours possible d introduire des variables nuplet pour rendre la requête plus lisible. Exemple : Sélectionner les paires de bières différentes: SELECT b1. nom, b2. nom FROM B i è r e b1, B i è r e b2 WHERE b1. o r i g i n e = b2. o r i g i n e AND b1. nom < b2. nom ;

72 72/93 Jointure naturelle et Θ-jointure Le langage de manipulation de données : LMD R S, sachant que R et S partage les attributs A s exprime par SELECT FROM R, S WHERE R.A = S.A ; R Θ S = σ[θ](r S) où Θ est un prédicat sur R S se traduit par SELECT FROM R, S WHERE Θ ;

73 73/93 Exemples Jointures Le langage de manipulation de données : LMD On a CLIENT COMMANDE = σ[client.numcli=commande.numcli](client COMMANDE) (σ[client.numcli=commande.numcli](client COMMANDE)), i.e. liste des commandes avec le nom des clients SELECT Nom, Date, Q u a n t i t e FROM CLIENT, COMMANDE WHERE CLIENT. NumCli = COMMANDE. NumCli ; SELECT C l i e n t. nomclient, C l i e n t 2. nomclient FROM C l i e n t, C l i e n t AS C l i e n t 2 WHERE C l i e n t. notelephone = C l i e n t 2. notelephone and C l i e n t. nomclient <> C l i e n t 2. nomclient ; i.e., les Clients qui ont le même numéro de téléphone

74 74/93 Exemples Jointures Le langage de manipulation de données : LMD π[numcli, Nom, Date, Quantite](CLIENT COMMANDE) Idem avec le numéro de client en plus et le résultat trié SELECT C1. NumCli, Nom, Date, Q u a n t i t e FROM CLIENT C1, COMMANDE C2 WHERE C1. NumCli = C2. NumCli ORDER BY Nom; Utilisation d alias (C1 et C2) pour alléger l écriture + tri par nom.

75 75/93 Exemples Theta-Jointures Le langage de manipulation de données : LMD Définition d une relation entre des éléments respectant une condition sur les constituants de la jointure R JOIN S ON <c o n d i t i o n > On veut calculer la jointure de R(a, b) et S(b, c): s e l e c t FROM R JOIN S F r e q u e n t s ON R. b = S. b ; Résultat de schéma (a, b, b, c) avec R.b = S.b. s e l e c t from R JOIN S using ( b ) ;

76 76/93 Renommer des attributs Le langage de manipulation de données : LMD Si on veut que le résultat ait des noms d attributs différents, on peut utiliser AS <nouveau nom> pour renommer un attribut. Exemple : SELECT nom FROM B i è r e as NomBière WHERE o r i g i n e = Belge ;

77 77/93 Syntaxe clause SELECT : Requêtes Le langage multi-tables de manipulation de données : LMD Union, intersection, différence les opérateurs de l algèbre relationnelle (INTERSECT, UNION, MINUS) s appliquent sur des requêtes dont les résultats ont même arité (même nombre de colonnes et mêmes types d attributs) Exemple : rechercher les noms et numéros de téléphone des Employés qui sont aussi des Clients SELECT nomclient AS nompersonne, notelephone FROM C l i e n t INTERSECT SELECT nomemploye AS nompersonne, notelephone FROM Employe ;

78 78/93 Requêtes imbriquéesle langage de manipulation de données : LMD Les conditions exprimées dans la clause WHERE peuvent être des conditions sur des relations (et non plus sur des valeurs scalaires). En général ces conditions consistent en l existence d au moins un tuple dans la relation testée ou en l appartenance d un tuple particulier à la relation. La requête de la clause WHERE établit dynamiquement un critère de recherche pour l interrogation principale

79 79/93 Requêtes imbriquées, exemple Le langage de manipulation de données : LMD Quels sont les employés qui occupent la même fonction que MERCIER? SELECT nomemploye, f o n c t i o n FROM Employe WHERE f o n c t i o n = ( s e l e c t f o n c t i o n FROM Employe WHERE nomemploye= MERCIER ) ; Rechercher les employés qui ont un salaire supérieur à la moyenne des salaires de tous les employés en précisant le service où ils travaillent SELECT nomservice, nomemploye, s a l a i r e FROM Employe as E, S e r v i c e as S WHERE E. s e r v i c e = S. s e r v i c e AND s a l a i r e > ( s e l e c t AVG( s a l a i r e ) FROM Employe ) ;

80 80/93 Requêtes imbriquéesle langage de manipulation de données : LMD Les conditions que l on peut exprimer sur une relation R construite avec une requête imbriquée s utilisent avec les opérateurs suivants: EXISTS R; renvoie VRAI si R n est pas vide, FAUX sinon t IN R où t est un tuple dont le type est celui de R ; renvoie VRAI si t appartient à R, FAUX sinon v cmp ANY R où cmp est un opérateur de comparaison; renvoie VRAI si la comparaison avec au moins un des tuples de la relation R est vraie, FAUX sinon v cmp ALL R où cmp est un opérateur de comparaison; renvoie VRAI si la comparaison avec tous les tuples de la relation R est vraie, FAUX sinon

81 81/93 Exemples prédicats EXISTS et NOT Le langageexists de manipulation de données : LMD Clients qui ont passé au moins une commande SELECT FROM CLIENT C1 WHERE EXISTS ( SELECT FROM COMMANDE C2 WHERE C1. NumCli = C2. NumCli ) ; Clients qui n ont passé aucune commande SELECT FROM CLIENT C1 WHERE NOT EXISTS ( SELECT FROM COMMANDE C2 WHERE C1. NumCli = C2. NumCli ) ;

82 82/93 Exemples prédicats ALL / LeANY langage de manipulation de données : LMD Numéros des clients qui ont commandé au moins un produit en quantité supérieure à chacune (à au moins une) des quantités commandées par le client numéro 1 SELECT DISTINCT NumCli FROM COMMANDE WHERE QUANTITE > ALL [ANY] ( SELECT QUANTITE FROM COMMANDE WHERE NumCli = 1 ) ;

83 83/93 Exemples de jointure exprimée avecle langage le prédicat de manipulation de INdonnées : LMD Nom des clients qui ont commandé le 23/09/2006 SELECT Nom FROM CLIENT WHERE NumCli IN ( SELECT NumCli FROM COMMANDE WHERE Date = ) ;

84 84/93 Syntaxe clause SELECT Le langage de manipulation de données : LMD La clause ORDER BY trie le résultat d une requête selon l ordre des champs spécifiés dans la clause SELECT FROM CLIENT ORDER BY nom [ DESC ] ; La clause GROUP BY regroupe les enregistrements sélectionnés il est possible de spécifier une ou plusieurs conditions sur les enregistrements regroupés au moyen de la clause HAVING

85 85/93 Exemples Groupement Le langage de manipulation de données : LMD Quantité totale commandée par chaque client SELECT NumCli, SUM( Q u a n t i t e ) FROM COMMANDE GROUP BY NumCli ; Nombre de produits différents commandés SELECT NumCli, COUNT(DISTINCT NumProd ) FROM COMMANDE GROUP BY NumCli ;

86 86/93 Groupement Le langage de manipulation de données : LMD Une instruction SELECT-FROM-WHERE peut être suivie par un GROUP BY et une liste d attributs. La relation résultat du SELECT-FROM-WHERE est groupée selon les valeurs de tous les attributs et l opérateur d agrégation n est appliqué que dans chaque groupe A partir de Vend(bar, bière, prix) et de Fréquente(client, bar) SELECT c l i e n t, AVG( p r i x ) FROM Fréquente, Vend WHERE b i è r e = 1664 AND Fréquente. bar = Vend. bar GROUP BY c l i e n t ;

87 87/93 Groupement Le langage de manipulation de données : LMD Si un opérateur d agrégation est utilisé, alors chaque élément du SELECT doit être soit agrégé, soit un attribut de la liste GROUP BY. SELECT bar, MIN( p r i x ) FROM Vend WHERE b i è r e = 1664 ; est une requête illégale

88 88/93 HAVING Le langage de manipulation de données : LMD HAVING <condition> peut suivre une clause GROUP BY La condition s applique sur chaque groupe, les groupes qui ne satisfont pas la condition sont éliminés. Trouver le prix moyen des bières qui sont soit servies dans au moins 3 bars, soit qui sont ambrées. SELECT b i è r e, AVG( p r i x ) FROM Vend GROUP BY b i è r e HAVING COUNT( bar ) >= 3 OR b i è r e IN (SELECT nom FROM B i è r e WHERE c o u l e u r = ambrée ) ;

89 89/93 Conditions sur la clause HAVING Le langage de manipulation de données : LMD Ces conditions peuvent référencer des relations ou des variables nuplets quelconques mentionnées dans la clause FROM Elles peuvent référencer des attributs de ces relations, tant que ces attributs ont un sens dans le groupe, i.e., qu ils sont un attribut agrégé ou de groupement

90 90/93 Exemples groupement Le langage de manipulation de données : LMD Trouver le prix moyen de la bière 1664 SELECT AVG( p r i x ) FROM Vend WHERE b i è r e = 1664 ; Quantité moyenne commandée pour les produits faisant l objet de plus de 3 commandes: SELECT NumProd, AVG( Q u a n t i t e ) FROM Commande GROUP BY NumProd HAVING COUNT( ) >3; Attention : La clause HAVING ne s utilise qu avec GROUP BY.

91 91/93 La division en SQL Le langage de manipulation de données : LMD Les films qui sont projetés dans tous les cinémas, à partir des relations Projection(NumFilm,NumCinéma) et Cinéma(NumCinéma,Adresse,NuméroTél) SELECT NumFilm FROM (SELECT DISTINCT NumCinema, NumFilm FROM P r o j e c t i o n ) AS p r o j GROUP BY NumFilm HAVING count ( NumCinema)=(SELECT count ( ) FROM Cinema ) ;

92 92/93 La division en SQL Le langage de manipulation de données : LMD SELECT DISTINCT NumFilm FROM P r o j e c t i o n AS L e s F i l m s WHERE NOT EXISTS (SELECT DISTINCT NumCinema FROM Cinema EXCEPT (SELECT DISTINCT NumCinema FROM P r o j e c t i o n WHERE NumFilm=L e s F i l m s. NumFilm ) ) ; SELECT DISTINCT NumFilm FROM P r o j e c t i o n AS L e s F i l m s WHERE NOT EXISTS (SELECT NumCinema FROM cinema AS l e s C i n e m a s WHERE NOT EXISTS (SELECT FROM P r o j e c t i o n WHERE NumFilm=L e s F i l m s. NumFilm AND NumCinema=LesCinemas. NumCinema ) ) ;

93 93/93 Webographie Le langage de manipulation de données : LMD Oracle 9.2 http: //download.oracle.com/docs/cd/b10501_01/server.920/a96524/toc.htm Oracle 10.2 http: //download.oracle.com/docs/cd/b19306_01/server.102/b14220/toc.htm Références SQL http: //download.oracle.com/docs/cd/b19306_01/server.102/b14200/toc.htm PostgreSQL MySQL Manuel de référence SQL /fr/html/dbrffr9/dbrffr9.htm