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 | Volte­face | 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
Volte­face | 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 | Volte­face
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]]

Documents pareils