Catégorie Technique Introduction aux Bases de Données

publicité
Catégorie Technique
Introduction aux Bases de Données Relationnelles
et au Modèle Entité-Association
Techniques Informatiques
Ludovic Kuty
Ingénieurs Industriels en Informatique
3èmes Bachelier
Groupe B38
Année Académique 2014–2015
12 février 2015 16 :27
Catégorie Technique
Introduction aux Bases de Données Relationnelles
et au Modèle Entité-Association
Techniques Informatiques
Ludovic Kuty
Ingénieurs Industriels en Informatique
3èmes Bachelier
Groupe B38
Année Académique 2014–2015
12 février 2015 16 :27
HEPL 2014–2015
Table des matières
Ludovic Kuty
Table des matières
1
Présentation
1.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
Introduction
2.1 Concepts généraux . . . . .
2.2 Définitions . . . . . . . . . .
2.3 Architecture à trois niveaux
2.4 Modélisation . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
10
11
13
Abstractions
3.1 Classifications .
3.2 Aggrégations .
3.3 Cardinalités . .
3.4 Généralisations
3
4
5
6
7
7
7
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
20
21
Modèle Entité-Association
4.1 Présentation . . . . . .
4.2 Entités . . . . . . . . .
4.3 Attributs . . . . . . . .
4.4 Associations . . . . . .
4.5 Rôle et cardinalité . . .
4.6 Identifiants . . . . . . .
4.7 Entité faible . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
25
26
26
27
28
29
30
Modèle Relationnel
5.1 Présentation . . . . . . . . . . . .
5.2 Définitions . . . . . . . . . . . . .
5.3 Clés . . . . . . . . . . . . . . . . .
5.4 Contraintes . . . . . . . . . . . . .
5.5 Algèbre relationnelle . . . . . . .
5.6 Autres méthodes d'interrogation
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
34
37
37
38
42
Modèle Entité-Association -> Modèle Relationnel
6.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Etape indépendante du modèle logique . . . . . . . . . .
6.3 Etape dépendante du modèle logique . . . . . . . . . . .
6.3.1 Elimination des identifiants externes . . . . . . . .
6.3.2 Elimination des attributs composés et multivalués
6.3.3 Entités . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.4 Associations . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
45
46
49
49
49
50
50
Installation Oracle
7.1 Clients et serveurs .
7.2 Installation . . . . .
7.3 Démarrage . . . . .
7.4 Arrêt . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
55
55
56
57
58
Techniques Informatiques
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
HEPL 2014–2015
7.5
8
Table des matières
Ludovic Kuty
Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
63
63
65
66
67
Langage de Définition de Données (LDD)
9.1 Présentation . . . . . . . . . . . . . . .
9.2 Types de donnée . . . . . . . . . . . .
9.2.1 Types numériques . . . . . . .
9.2.2 Type booléen . . . . . . . . . .
9.2.3 Types caractères . . . . . . . . .
9.2.4 Types binaires . . . . . . . . . .
9.2.5 Types temporels . . . . . . . . .
9.2.6 Types intervalles . . . . . . . .
9.3 Instructions du LDD . . . . . . . . . .
9.3.1 Types de table . . . . . . . . . .
9.3.2 CREATE TABLE . . . . . . . .
9.3.3 DROP TABLE . . . . . . . . . .
9.3.4 ALTER TABLE . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
69
69
70
71
72
73
74
75
78
79
80
81
86
88
10 Langage de Manipulation de Données (LMD)
10.1 Présentation . . . . . . . . . . . . . . . . .
10.2 SELECT . . . . . . . . . . . . . . . . . . . .
10.2.1 Liste de sélection . . . . . . . . . .
10.2.2 Clause FROM . . . . . . . . . . . .
10.2.3 Clause WHERE . . . . . . . . . . .
Les prédicats . . . . . . . . . . . .
Les expressions caractères . . . . .
Les expressions dates-temps . . .
Les expressions intervalles . . . .
Les fonctions ensemblistes . . . . .
10.3 INSERT . . . . . . . . . . . . . . . . . . . .
10.4 UPDATE . . . . . . . . . . . . . . . . . . .
10.5 DELETE . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
91
91
92
92
93
94
95
103
105
106
107
119
120
121
9
Langage SQL
8.1 Historique . . . . . . . . . . . .
8.2 Conformité et implémentations
8.3 Concepts du langage SQL . . .
8.4 Notation BNF . . . . . . . . . .
8.5 Interfaçage avec SQL . . . . . .
58
Références
Techniques Informatiques
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
121
6
HEPL 2014–2015
1. Présentation
Ludovic Kuty
Chapitre 1
Présentation
1.1 Objectifs
objectifs & ressources
Objectifs :
• Présenter l'architecture générale des SGBDR
• Présenter les différents niveaux de représentation dans une BD
• Présenter le modèle EA et le modèle relationnel
• Présenter le langage SQL
Support et ressources :
• Email : [email protected]
• Transparents du cours à https://cours.khi.be/techinf/
1.2 Evaluation
évaluation
• Théorie : examen écrit à livre fermé
– Matière du cours
– Exercices relatifs au cours et au laboratoire
• Laboratoire : évaluation continue
– Modélisation d'un problème avec le modèle EA
– Traduction de la modélisation dans le modèle relationnel
– Implémentation dans une BD Oracle
– Spécification de différentes contraintes
– Utilisation de SQL pour accéder aux données et aux méta-données
Techniques Informatiques
7
HEPL 2014–2015
Techniques Informatiques
1. Présentation
Ludovic Kuty
8
HEPL 2014–2015
2. Introduction
Ludovic Kuty
Chapitre 2
Introduction
2.1 Concepts généraux
concepts généraux
• Base de données (BD). Conteneur de données informatiques persistentes concernant un sujet donné
• Système de gestion de bases de données (SGBD). Système informatisé de collecte de données. Le SGBD agit sur une BD grâce à des opérations aux opérations ci-dessous. En anglais
on parle de CRUD (Create, read, update and delete).
–
–
–
–
Recherche
Ajout
Modification
Effacement
• Utilisateurs
– Utilisateur final
– Programmeur (API)
– Administrateur (DBA)
• Programme
concepts généraux
database management
system
user
database
application
program
base de données
Database (DB).
Techniques Informatiques
9
HEPL 2014–2015
2. Introduction
Ludovic Kuty
• Ensemble intégré ‰ chacun possède sa collection de données
• Est une modélisation de la réalité
• Contient les données opérationnelles sur un sujet : entités + associations
Propriétés désirables :
• Etre utilisable concurremment càd par plusieurs utilisateurs en même temps
• Etre non-redondante càd pas de duplication d'information
• Gérer efficacement les ressources (temps, espace)
• Résister aux pannes du système
• Etre sécurisée càd filtrer les accès selon les utilisateurs
système de gestion de bases de données
Database management system (DBMS).
• Permet de mettre en oeuvre les propriétés désirables
• Est le garant de la cohérence de la modélisation
• Isole la BD du monde extérieur ñ point de passage obligé pour tout accès aux données
2.2 Définitions
définitions
• Modèle = langage/notation permettant de décrire des schémas
• Schéma = description structurelle de la réalité = modélisation
• Instance de schéma = ensemble des données correspondant à la réalité à l'instant t
• Parmi toutes les données possibles, seulement certaines d'entre elles sont valides par rapport
à un schéma donné. Ce sont des instances du schéma et elles décrivent la partie pertinente
de la réalité (celle qu'on a modélisé)
• Le schéma agit donc comme un filtre pour les instances de DB illégales.1
définitions
modèle
le modèle fournit les règles
pour structurer les données
perception de
la structure
de la réalité
schéma
le schéma fournit les règles
pour vérifier qu’une instance
est valide
description de
la réalité à un
moment donné
instance
1 Cette manière de voir est très importante car cela montre que les contraintes doivent se trouver le plus près possible
des données de la DB càd dans le schéma.
Techniques Informatiques
10
HEPL 2014–2015
2. Introduction
Ludovic Kuty
2.3 Architecture à trois niveaux
évolution du schéma
2 types d'évolution :
• Structure logique
– Par ex. on décide de stocker le num registre national en + de l'adresse de l'emprunteur
– Par ex. on décide de garder l'historique des emprunts
• Structure physique
– Utilisation d'index
– Utilisation d'enregistrements de taille variable
– Gestion différente des données effacées
architecture à 3 niveaux du SGBD
• Garantit l'indépendance entre les données et les programmes qui les utilisent
• Chaque niveau est représenté par un ou plusieurs schémas décrit avec un langage de définition de données propre (LDD, data definition language ou DDL). Dans notre cas, ce sera
toujours SQL
vue externe
(vue individuelle)
schéma
externe 1
schéma
externe 2
vue logique
(vue communautaire)
schéma
logique
vue physique
(vue orientée stockage)
schéma
physique
schéma
externe 3
SGBD
stockage
I/O
niveau logique
• Un schéma logique = description structurelle des données stockées
• Défini avec le modèle de données de la BD (data model). Par ex. modèle relationnel
• Les données de la BD à l'instant t constituent une instance du schéma logique
: Table students : niveau logique
create table students (
id integer,
Techniques Informatiques
11
HEPL 2014–2015
2. Introduction
Ludovic Kuty
name varchar2(30 byte),
login varchar2(30 byte),
age integer,
constraint students_pk primary key (id)
using index pctfree 10 initrans 2 maxtrans 255 nocompress logging
tablespace users enable
) segment creation deferred
pctfree 10 pctused 40 initrans 1 maxtrans 255 nocompress logging
tablespace users ;
niveau externe
• Défini en termes du schéma logique
• Ensemble de schémas définissant chacun une vue externe2 (external view)
– Personnalise la vision qu'à un utilisateur u des données
– Pour u, la vue externe est la BD
: Table students : niveau externe
create or replace view courseinfo as
select c.name as course, f.name as teacher, count(e.student) as Ðâ
enrollment
from courses c, faculty f, enrolled e, teaches t
where c.id = e.course and f.id = t.teacher and t.course = c.id
group by c.name, f.name;
niveau physique
• Format des données (structuré en bytes) et choix du stockage
• Création d'index pour accélérer l'accès aux données
• Espace d'adressage linéaire ‰ adressage physique sur disque. Pas de notions d'I/O, blocs,
pages, cylindres
: Table students : niveau physique
create table students (
id integer,
name varchar2(30 byte),
login varchar2(30 byte),
age integer,
constraint students_pk primary key (id)
using index pctfree 10 initrans 2 maxtrans 255 nocompress logging
tablespace users enable
) segment creation deferred
pctfree 10 pctused 40 initrans 1 maxtrans 255 nocompress logging
tablespace users ;
schéma externe (ex)
Schéma externe (vue). Permet aux étudiants de trouver pour chaque cours le nom du prof et
le nbre de personnes inscrites
2 Attention,
la vue externe sera elle-même constituée d'un ensemble de vues au sens SQL du terme.
Techniques Informatiques
12
HEPL 2014–2015
2. Introduction
Ludovic Kuty
courseinfo(course : string, teacher : string, enrollment : integer)
: Vue courseinfo
select * from courseinfo order by course;
COURSE
--------course 1
course 2
course 3
course 4
course 5
course 6
course 7
TEACHER
ENROLLMENT
---------- ---------teacher 8
10
teacher 7
19
teacher 7
14
teacher 7
16
teacher 9
15
teacher 3
14
teacher 4
12
schéma logique (ex)
Schéma logique (relationnel)
students(id : integer, name : string, login : string, age : integer)
faculty(id : integer, name : string, sal : real)
courses(id : integer, name : string, credits : integer)
rooms(id : integer, address : string, capacity : integer)
enrolled(student : integer, course : integer, grade : string)
teaches(teacher : integer, course : integer)
meets_in(course : integer, room : integer, time : date)
• Le schéma relationnel est défini dans intro/indep_logical_schema.sql
• Les données initiales sont ajoutées grâce à intro/indep_logical_data.sql
modification du schéma logique (ex)
• La relation faculty est remplacée par deux relations pour distinguer ce qui est confidentiel
de ce qui ne l'est pas. De plus de l'information a été ajoutée.
• Il suffit de redéfinir la vue courseinfo. Le code qui l'utilise ne doit pas être modifié.
• La couche supplémentaire qu'est le schéma externe permet de se rendre indépendant des
modifications intervenant au niveau du schéma logique.
: La relation faculty est modifiée en deux relations.
faculty_public(id : integer, name : string, office : string)
faculty_private(id : integer, sal : real)
2.4 Modélisation
modélisation
Comment créer les schémas externes, logique et physique ?
Deux méthodes :
• Réalité Ñ schéma conceptuel / vue Ñ schéma conceptuel global Ñ schéma logique Ñ schémas externes
Techniques Informatiques
13
HEPL 2014–2015
2. Introduction
Ludovic Kuty
• Réalité Ñ schéma conceptuel Ñ schéma logique Ñ schémas externe
Ensuite on s'occupe du schéma physique.
Dans tous les cas :
• On crée un schéma conceptuel à partir de la partie pertinente de la réalité
• Il est défini grâce à un modèle de données abstrait (semantic data model). Par ex. le modèle
entité-association (EA, entity-relationship ou ER)
• Il permet de créer un schéma logique par une étape de correspondance (mapping)
• Par ex. on passe du modèle EA au modèle relationnel
modélisation
monde
réel
design
conceptuel
schéma conceptuel
indépendant du
modèle de données
et du SGBD
design
logique
schéma logique
dépend du modèle de
données du SGBD
indépendant du SGBD
design
physique
schéma physique
dépend du SGBD
modélisation
Il existe des étapes additionnelles :
• Analyse des exigences. Ce que les utilisateurs veulent : type de données, contraintes, performance, …Par ex. use cases (Cockburn, UML). Permet de créer le schéma conceptuel
• Raffinement du schéma. Normalisation du schéma logique
• Design sécurité. Identification des rôles, accès limités à la BD (vues). Se fait en dernier lieu
intérêt de la modélisation conceptuelle
• Suffisamment simple que pour établir un pont entre utilisateur et concepteur
– Augmente la qualité du schéma
– Rend l'utilisateur plus enclin à utiliser le système développé
• Indépendante du type de DBMS utilisé
Techniques Informatiques
14
HEPL 2014–2015
2. Introduction
Ludovic Kuty
– Le choix du DBMS cible peut être postposé
– Si le DBMS ou les besoins applicatifs changent, on dispose du schéma comme nouveau
point de départ
• Le schéma conceptuel et sa documentation facilite grandement la compréhension des schémas logiques et des applications qui les utilisent ñ maintenance et mise à jour facilitées
Techniques Informatiques
15
HEPL 2014–2015
Techniques Informatiques
2. Introduction
Ludovic Kuty
16
HEPL 2014–2015
3. Abstractions
Ludovic Kuty
Chapitre 3
Abstractions
abstractions
Modélisation ñ abstraction.
Trois mécanismes disponibles dans le modèle de données :
1. La classification
2. L'aggrégation
3. La généralisation
3.1 Classifications
classification
• Un concept = une classe d'objets du monde réels avec des propriétés communes
• Un objet peut appartenir à plusieurs classes selon le choix de la classification
Classe
est membre de
Objet 1 Objet 2
Objet n
classification (exemples)
• Vélo = concept ou classe d'objets = { vélo de ludovic, vélo dans la cour, …}
vélo
vélo de
ludovic
vélo dans
la cour
vélo de
Eddy Merckx
• Mois = concept ou classe d'objets = { janvier, février, …}
Techniques Informatiques
17
HEPL 2014–2015
3. Abstractions
Ludovic Kuty
mois
janvier
février
décembre
3.2 Aggrégations
aggrégation
Une classe est définie comme un ensemble de classes composantes.
Classe
est une
partie de
Classe 1 Classe 2
Classe n
aggrégation (exemples)
• Vélo = aggrégation de { roue, pédale, guidon }
vélo
roue
guidon
pédale
• Personne = aggrégation de { nom, sexe, salaire }
personne
nom
sexe
salaire
aggrégation (exemples)
• Utilise = aggrégation de { personne, bâtiment }
• Aggrégation binaire.
Techniques Informatiques
18
HEPL 2014–2015
3. Abstractions
Ludovic Kuty
utilise
aggrégation
personne
bâtiment
classification
Jean Pol
Luc
maison
M1
bureaux
B1
et dans les langages de programmation ?
• Il existe des mécanismes semblables dans les langages de programmation
• La généralisation est représentée par l'héritage dans les langages OO
value
classification
aggregation
field types
record type
value
correspondances (aggrégation)
• Une aggrégation établit une correspondance (mapping) entre les éléments de deux ou plusieurs classes
• Deux classes ” binaire, plusieurs classes ” n-aire
• L'aggrégation est représentés graphiquement par un diagramme ensembliste
• Une classe peut participer à plusieurs aggrégations
• Utilise = aggrégation de { personne, bâtiment }
• Possède = aggrégation de { personne, bâtiment }
• La notion de cardinalité intervient
b1
p1
b1
p1
b2
p2
b2
p2
b3
p3
b4
utilise
Techniques Informatiques
b3
p3
b4
possède
19
HEPL 2014–2015
3. Abstractions
Ludovic Kuty
3.3 Cardinalités
cardinalité minimale
• Soit l'aggrégation A entre les classes C1 et C2
• La cardinalité minimale mincard(C1 , A) est le nombre mininum de correspondances auquel
un élément de C1 doit participer
• Dans l'exemple précédent :
– mincard(personne, utilise) = 1
– mincard(batiment, utilise) = 0
– mincard(personne, possede) = 0
– mincard(batiment, possede) = 1
Les deux valeurs importantes sont 0 et 1
• mincard(C1 , A) = 0 ñ participation optionnelle.
• mincard(C1 , A) ą 0 ñ participation obligatoire.
cardinalité maximale
• Soit l'aggrégation A entre les classes C1 et C2
• La cardinalité maximale maxcard(C1 , A) est le nombre maximum de correspondances auquel un élément de C1 peut participer
• Dans l'exemple précédent :
– maxcard(personne, utilise) = n
– maxcard(batiment, utilise) = n
– maxcard(personne, possede) = n
– maxcard(batiment, possede) = 1
Les deux valeurs importantes sont 1 et n (noté également 8).
cardinalité
• Soit A une aggrégation binaire des classes C1 et C2
• Si mincard(C1 , A) = m1 et maxcard(C1 , A) = M1
• Alors la cardinalité de la classe C1 dans A est la paire card(m1 , M1 )
• Idem pour C2
• Tout ceci peut-être généralisé aux aggrégations n-aires. Par exemple la relation "se donne"
dans laquelle participent les classes "cours", "jour" et "local" (sur une semaine)
types de correspondance
• one-to-one. maxcard(C1 , A) = 1 et maxcard(C2 , A) = 1
• one-to-many. Sens C1 vers C2 , maxcard(C1 , A) = n et maxcard(C2 , A) = 1
• many-to-one. Sens C1 vers C2 , maxcard(C1 , A) = 1 et maxcard(C2 , A) = n
• many-to-many. maxcard(C1 , A) = n et maxcard(C2 , A) = n
Techniques Informatiques
20
HEPL 2014–2015
3. Abstractions
one-to-one
one-to-many
Ludovic Kuty
many-to-one
many-to-many
3.4 Généralisations
généralisation
• Une classe est définie comme un sous-ensemble d'une autre
• Les abstractions définies pour la classe générique sont héritées par les sous-classes
Classe
est un /
est une
Classe 1 Classe 2
Classe n
généralisation (exemple)
• Un auteur est une personne.
• Un auteur écrit des livres d'un certain genre.
personne
nom
sexe
auteur
genre
correspondances (généralisation)
• Une généralisation établit une correspondance entre la classe générique et les sous-classes
• Chaque élément d'une sous-classe correspond à un seul élément de la classe générique
• Mais un élément de la classe générique peut correspondre à 0, 1 ou plusieurs éléments de
sous-classes ñ notion de couverture
Techniques Informatiques
21
HEPL 2014–2015
3. Abstractions
Ludovic Kuty
généralisation (couverture)
• Chaque élément de la classe auteur correspond à un élément de la classe personne
• Mais, un élément de personne ne correspond pas nécessairement à un élément de auteur
• On dira que la couverture est partielle
personne
auteur
généralisation (couverture)
Soit G la classe générique et C1 , . . . , Cn les sous-classes
• Totale ou partielle. Totale = chaque élément de G correspond à au moins un élément des Ci .
Partielle = D un élément de G qui n'a pas de correspondance dans un Ci
• Exclusive ou imbriquée1 . Exclusive = chaque élément de G correspond à au plus un élément
des Ci . Imbriquée = D un élément de G qui correspond à plusieurs Ci
homme
homme
femme
employé
totale
exclusive
partielle
imbriquée
véhicule
re
vélo
personne
voitu
personne
partielle
exclusive
joueur
tennis
football
totale
imbriquée
généralisation (exemple)
1 Overlapping.
Techniques Informatiques
22
HEPL 2014–2015
Techniques Informatiques
3. Abstractions
Ludovic Kuty
23
HEPL 2014–2015
Techniques Informatiques
3. Abstractions
Ludovic Kuty
24
HEPL 2014–2015
4. Modèle Entité-Association
Ludovic Kuty
Chapitre 4
Modèle Entité-Association
4.1 Présentation
outil de modélisation
• DB-Main 9.1.4 http ://www.db-main.be/.
DB-MAIN est un outil gratuit de modélisation et d'architecture de données. Il est conçu pour aider les développeurs et les analystes dans la plupart des processus d'ingénierie des données, dont :
• Les processus de conception : analyse des besoins, analyse conceptuelle, normalisation, intégration
de schémas, conception logique, conception physique, optimisation, génération de code.
• Les transformations : transformations de schémas, transformations de modèles, ETL.
• La rétro-ingénierie et la compréhension de programmes : analyse de schémas (COBOL, CODASYL,
IMS, IDMS, SQL, XML, ...), analyse de code, rétro-ingénierie des données et des flux de données.
• Maintenance, évolution et intégration : migration de données, évolution des bases de données, analyse
d'impacts, intégration et fédération de bases de données, conception et génération d'accesseurs de
données.
• Et beaucoup d'autres domaines comme les bases de données temporelles et actives, les entrepôts de
données, l'ingénierie XML, ...
présentation du modèle EA
Le modèle entité-association (entity-relationship) est un modèle de données conceptuel.
• Introduit par Peter Chen en 1976 dans l'article "The Entity-Relationship Model - Toward a
Unified View of Data", ACM Transactions on Database Systems
• Très populaire
• Définit un certain nombre de concepts qui sont l'expression des mécanismes d'abstraction
vu précédemment : entité, association, attribut, identifiant
qualité d'un modèle
Les qualités désirées sont :
• Expressivité. Disposer des concepts nécessaires pour avoir une modélisation proche de la
réalité
• Simplicité. Pour faciliter sa compréhension et son utilisation par les utilisateurs et les concepteurs du schéma
• Minimalité. Chaque concept est unique et ne peut être exprimée à l'aide d'autres concepts
du modèle. Ils sont orthogonaux
Techniques Informatiques
25
HEPL 2014–2015
4. Modèle Entité-Association
Ludovic Kuty
• Formalisation. Les concepts doivent être bien définis et mathématiquement manipulables
intérêt du modèle ER
Les qualités du modèle ER sont :
• Bonne expressivité. Les trois mécanismes d'abstractions sont présents
• Simplicité moyenne. Les notions de cardinalités et identifiants ne sont pas aisées à manipuler. Elles sont cependant très utiles
• Minimalité. Attention, cela ne veut pas dire qu'une seule modélisation de la réalité est
possible. Seuls les attributs composés peuvent être remplacés par un mélange d'entités et
d'associations
• Formellement défini. Chaque concept peut être représenté graphiquement et les diagrammes
sont faciles à lire
4.2 Entités
entité et instance d'entité
Entity.
• Entité. Une classe d'objets du monde réel avec des propriétés communes. Par ex. les livres
de ma collection, les personnes, les écoles de la province, les groupes de l'ISIL
• Instance d'entité. Un objet bien précis de la classe. Par ex. le livre The Pragmatic Programmer,
Alan Turing, la HEPL, le groupe B38
• Chaque entité est représentée par un rectangle
• Chaque entité contient un ensemble d'attributs
4.3 Attributs
attribut
Attribute.
• Attribut. Propriété, caractéristique d'une entité ou d'une association (nom / valeur)
• Domaine. Ensemble de valeurs que peut prendre un attribut. Par ex. ensemble des chaînes
de taille 20, nombres entre 1 et 20
• Les attributs contiennent l'information extensionnelle (les données)
• Les cardinalités s'appliquent également ñ optionnel (0), univalué (1) ou multivalué (n)
• Ils peuvent être composés d'autres attributs
Techniques Informatiques
26
HEPL 2014–2015
4. Modèle Entité-Association
Vue graphique
Ludovic Kuty
Vue textuelle
exemple 1 (entités + domaines)
entité (terminologie)
Attention, plusieurs terminologies existent.
• Entité = classe, instance d'entité = élément de la classe
• Ensemble d'entités = classe, entité = élément de la classe
• Type d'entité = classe, entité = élément de la classe
Il faut donc être conscient de la terminologie choisie. Nous prendrons la première.
4.4 Associations
association et instance d'association
Relationship.
• Association. Représente l'aggrégation de deux ou plusieurs entités. Il s'agit du type de liaison, de relation entre ces entités
• Instance d'association. Etablit une correspondance entre deux ou plusieurs instances d'entité.
• L'association peut avoir des attributs. Par ex. l'association Dirige entre l'entité Employé et
l'entité Département a un attribut depuis qui indique le début d'entrée en fct
• Le nom de l'association est en général un verbe conjugué. Par ex. Fait_partie, A_écrit, Dirige
• L'association est représentée par un losange
exemple 1 (associations)
Techniques Informatiques
27
HEPL 2014–2015
4. Modèle Entité-Association
Vue graphique
Ludovic Kuty
Vue textuelle
4.5 Rôle et cardinalité
rôle
• Participation d'une entité à une association
• Donne un sens à la présence de l'entité (nommé)
• Le rôle possède une cardinalité
• Par ex. l'entité Employé joue le rôle de Directeur dans l'association Dirige
• Par ex. l'entité Personne joue le rôle de Ecrivain dans l'association A_Ecrit
rôle
• Un manager est un Employé et Dirige d'autres employés
• Association réflexive
Techniques Informatiques
28
HEPL 2014–2015
4. Modèle Entité-Association
Ludovic Kuty
cardinalité
• Une cardinalité par rôle càd par couple association / entité
• Exprime le nombre de participations possibles d'une instance de l'entité dans l'association
• Constitue une contrainte que les données doivent respecter
Exemples :
• Toute personne peut avoir écrit zéro, un ou plusieurs livres (peut participer zéro, une ou
plusieurs fois à l'association A_écrit) ñ min = 0 et max = n
• Un livre a au moins été écrit par une personne (peut participer une ou plusieurs fois à
l'association A_écrit) ñ min = 1 et max = n
• Un employé ne peut diriger qu'un seul département (ne peut participer que zéro ou une fois
à l'association Dirige) ñ min = 0 et max = 1
cardinalité (exemple)
4.6 Identifiants
identifiant
Identifier.
• Détermine de manière unique les instances d'une entité E
• Est composé d'attributs de E et/ou d'entités en liaison avec E
• Egalement appelé clé (key) ou clé candidate (candidate key)
Formellement :
• Soit E une entité et A1 , . . . , An des attributs obligatoires univalués de E
• Soit E1 , . . . , Em des entités liées à E par des associations binaires obligatoires one-to-one ou
many-to-one R1 , . . . , Rm ñ mincard(E, Ri ) = maxcard(E, Ri ) = 1
• Si I = tA1 , . . . , An , E1 , . . . , Em u est un identifiant de E avec n ě 0, m ě 0, n + m ě 1
• La valeur de I pour un instance e de E est définie comme étant les valeurs des attributs Ai
et de toutes les instances des Ej
identifiant (exemple 1)
identifiant (propriétés)
Un identifiant I de E est :
Techniques Informatiques
29
HEPL 2014–2015
4. Modèle Entité-Association
Vue graphique
Ludovic Kuty
Vue textuelle
1. Unique. Il ne peut pas y avoir deux instances avec la même valeur pour I
2. Minimal. Si on laisse tomber un des Ai ou Ej , la propriété 1 n'est plus valable
C'est la notion de clé candidate ou de super-clé1 minimale
• Propriété des entités héritées lors d'une généralisation ñ l'identifiant de l'entité générique
est aussi identifiant de la sous-entité
• La sous-entité peut également avoir des identifiants propres
• Par ex. une personne est identifiée par son numéro de registre national et un employé (aussi
une personne) par son numéro d'employé au sein de la société pour laquelle il travaille
identifiant (classification)
• Un identifiant est simple si n + m = 1. Il est composé si n + m ą 1
• Un identifiant est interne si m = 0. Il est externe si n = 0
• Un identifiant est mixte if n ą 0 et m ą 0
Pour souci de simplicité, on préfère un identifiant
• Interne à un externe
• Simple à un composé
4.7 Entité faible
entité forte et faible
• Une entité forte (strong entity) est une entité qui peut être identifiée de manière interne
• Une entité faible (weak entity) est une entité qui ne peut pas être identifiée de manière interne
(externe ou mixte)
Exemple d'entité faible :
1 Une
super-clé est une clé respectant la propriété 1.
Techniques Informatiques
30
HEPL 2014–2015
4. Modèle Entité-Association
Ludovic Kuty
entité faible
Transaction
1
12/2/2015 t1
50 instance
d'entité
≠
1
12/2/2015 t2
50 instance
d'entité
Compte
valeurs de l'identifiant
instance
d'association
valeurs de l'identifiant
c1 100
50
instance
d'entité
instance
d'association
c2 200
50
instance
d'entité
entité faible
• L'entité Transaction comprend deux instances d'entités différentes t1 et t2 même si les valeurs
des trois attributs sont les mêmes
• Même sans aucun attribut dans une entité, on peut avoir des instances d'entité qui sont clairement identifiées et différentes. Il n'y aura simplement pas d'identifiant
• L'identifiant I est formé par l'attribut Numéro et l'entité Compte
• La valeurs des identifiants sont :
– Pour t1 , on a 1 et c1
– Pour t2 , on a 1 et c2
et les mécanismes d'abstraction ?
Classification.
• Une entité est une classe d'objets du monde réel avec des propriétés communes.
• Une association est une classe de faits élémentaires (atomiques) qui sont en rapport avec deux
ou plusieurs classes.
• Un attribut est une classe de valeurs représentant des propriétés atomiques d'entités ou
d'associations.
Aggrégation.
• Une entité est une aggrégation d'attributs.
• Une association est une aggrégation d'entités et d'attributs.
• Un attribut composé est une aggrégation d'attributs.
Généralisation.
• Capturée par les hiérarchies (super-types / sous-types).
• On peut avoir un sous-ensemble lorsqu'il n'y a qu'une seule sous-entité. C'est un cas particulier de couverture partielle et exclusive.
Techniques Informatiques
31
HEPL 2014–2015
Techniques Informatiques
4. Modèle Entité-Association
Ludovic Kuty
32
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
Chapitre 5
Modèle Relationnel
5.1 Présentation
généralités
Trois piliers :
• Structurel
– Relation
– Domaine / Attribut
– Clé primaire
– Clé étrangère
• Intégrité. Règles à satisfaire par les relations
– De domaine
– De relation
– De base de données (référentielle, …)
• Manipulation. Opérateurs de manipulation des relations
– Sémantiques (liés aux domaines)
– Ensemblistes : union, intersection, différence, produit cartésien
– Relationnels : restriction, projection, jointure, division
généralités
• E. F. Codd, A Relational Model of Data for Large Shared Data Banks, CACM 13, 1970.
• Bases théoriques solides : théorie des ensembles + logique des prédicats
• Concepts simples ñ facilité d'apprentissage + communicabilité accrue
• Pas impératif ou procédural (le comment) mais déclaratif (le quoi) ñ grande autonomie
généralités
Techniques Informatiques
33
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
présentation informelle
• Une relation est représentée par une table : structurel et extensionnel
• Une table comprend des lignes et des colonnes
• Une ligne = un tuple et un titre de colonne = un nom d'attribut
• Attention : ordre implicite
Soit la table Livres.
Titre
An Introduction to Database Systems
Database Management Systems
Editeur
Année
Addison-Wesley
2004
McGraw-Hill
2000
5.2 Définitions
tuple
• Soit des types Ti (ou domaines)
• Soit des noms d'attributs Ai distincts
• Soit des valeurs vi de type Ti
• Un tuple est un ensemble1 de triplets de la forme
xAi , Ti , vi y
Par exemple :
1 Ensemble
au sens mathématique càd pas d'ordre, pas de doublons.
Techniques Informatiques
34
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
• Le tuple de la 2ème ligne est l'ensemble des triplets
x"Année", Entiers, 2000y
x"Titre", Chaînes de taille 50, "Database Management Systems"y
x"Editeur", Chaînes de taille 30, "McGraw-Hill"y
tuple
• Un attribut est la paire xAi , Ti y. Ai identifie l'attribut de manière unique
• La valeur de l'attribut Ai est vi
• Le type de l'attribut Ai est Ti
• L'ensemble complet des attributs est l'en-tête (heading) du tuple. On dit aussi que c'est le type
du tuple
valeur vs variable
• Une valeur est
– Constante ñ ne peut pas être modifiée !
– Immatérielle (espace & temps)
– Nécessite un encodage particulier
– Possède un type
Par ex. le nombre 3, la chaîne "Bonjour".
• Une variable est
– Conteneur pour un encodage d'une valeur
– Matérielle (espace & temps)
– Peut être modifiée pour contenir une autre valeur
– Possède un type
Par ex. la variable a de type entier ayant la valeur 3.
relation vs relvar
• Relation ” valeur. La représentation extensionnelle en 2D de la table Livres est la représentation d'une relation
• Relvar ” variable. La table Livres est un relvar. Notion de type ou de structure
• Important pour comprendre les opérations et la nature déclarative du modèle relationnel.
relation
Une relation2 est composée de
• Un en-tête (heading) = en-tête de tuple (cfr. slide 71). C'est son type
• Un corps (body) = ensemble de tuples
Propriétés
• Chaque tuple contient une seule valeur pour chaque attribut. On dit que la relation est normalisée ou en première forme normale (1NF)
2 Càd
une valeur.
Techniques Informatiques
35
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
• Il n'y a pas d'ordre gauche-droit sur les attributs ‰ table
• Il n'y a pas d'ordre haut-bas sur les tuples ‰ table
• Il n'y a pas de tuples en double ‰ table
mathématiquement
• Un schéma de relation R est ensemble fini d'attributs Ai
• A chaque attribut Ai , on associe un domaine Di
dom(Ai ) = Di
• Le domaine d'un schéma de relation est
dom(R) =
ď
dom(Ai )
i
• Un tuple t est une fonction de R Ñ dom(R)
@A P R : t(A) P dom(A)
mathématiquement
• Une relation est un ensemble fini de tuples
• Un schéma de base de données est un ensemble fini de schémas de relation
• Une base de données est un ensemble fini de relations
Si on tient compte d'un ordre, on peut simplifier :
• Une relation r est un sous-ensemble du produit cartésien des domaines Di (i = 1, . . . , n)
r Ď D1 ˆ D2 ˆ . . . ˆ Dn
• Un tuple t est un élément de r
t = (a1 , a2 , . . . , an ) avec ai P Di
exemple (livres et auteurs)
Schéma Livres
Attribut
Type
Titre
Editeur
Année
Chaînes de taille 50.
Chaînes de taille 20.
Entiers compris entre 1500 et
2100.
Entiers compris entre 1 et 20.
Chaînes de taille 10.
Edition
ISBN
Techniques Informatiques
Schéma Auteurs
Attribut
Nom
Id
Type
Chaînes de taille 30.
Entiers positifs.
36
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
5.3 Clés
clés
Soit R un relvar et K un ensemble d'attributs de R
• K est une clé candidate3 ssi elle est :
1. Unique. Aucune valeur de R ne contient deux tuples ‰ dont les valeurs pour K sont =
2. Irréductible. Aucun sous-ensemble de K n'est unique
• Contraint les tuples des valeurs du relvar R. Cfr. slides suivants
• Fournit un mécanisme d'adressage des tuples càd permettant de désigner un tuple donné
• Une clé primaire (primary key ou PK) est une clé candidate particulière. Il en existe toujours
une
clés
Soit R1 un relvar et FK un ensemble d'attributs de R1
• FK est une clé étrangère (foreign key) ssi :
1. Il existe un relvar R2 avec une clé candidate FK4
2. A tout moment, chaque valeur de FK d'une valeur de R1 est identique aux valeurs de
FK d'un tuple de R2 5
• Elle permet aux tuples de R1 de référencer un tuple de R2
• Par ex. toute facture fait référence à un client qui doit exister
• En d'autres termes, la FK sert de "pointeur" vers un tuple d'une autre relation
5.4 Contraintes
contraintes d'intégrité
But : garantir la cohérence de la base de donnée.
• BD = modélisation de la réalité.
• BD correcte ô modélisation exacte de la réalité
• BD cohérente ô règles d'intégrité respectées
• Donc, cohérence ‰ correction6
En effet,
• BD correcte ñ BD cohérente, BD incohérente ñ BD incorrecte7
• Mais BD cohérente œ BD correcte
contraintes d'intégrité
Une contrainte d'intégrité
3 Par
rapport aux identificateurs du modèle EA, seuls les identificateurs internes sont acceptés ici.
une clé candidate possédant les même attributs que FK.
5 Plus exactement d'un tuple d'une valeur de R .
2
6 Conformité, exactitude
7 Contraposée de l'implication.
4 Avec
Techniques Informatiques
37
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
• Est une expression booléenne associée à une BD et devant toujours être vérifiée
• Sert à exprimer de manière formelle une règle liée au problème (business rule)
• Est contrôlée à chaque exécution d'une instruction sur la BD
Types de contraintes8
• De domaine
• De relation. Par ex. clé primaire
• De base de données. Par ex. clé étrangère
intégrité de domaine
Ou intégrité de type.
• Chaque type, par définition, contraint l'ensemble des valeurs permises. Il s'agit de la contrainte
de type
• Par exemple :
– Les nombres entiers positifs ă 10000
– Les nombres décimaux à 2 décimales
– Les chaînes de caractères de taille 20
• Chaque attribut sera contraint par son type. Sa valeur sera donc limitée aux valeurs permises
par le type. Il s'agit de la contrainte d'attribut
intégrité de relation et de référence
Intégrité de relation.
• Contrainte portant sur un seul relvar
• Par ex. la contrainte de clé primaire
Intégrité de base de données.
• Contrainte portant sur deux ou plusieurs relvars
• Par ex. la contrainte de clé étrangère (ou de référence) encore appelée contrainte d'intégrité
référentielle
5.5 Algèbre relationnelle
algèbre relationnelle
• "Méthode" pour interroger une base de données et en extraire des résultats
• Algèbre ñ valeurs d'un type donné + opérateurs. Par ex. Z et +, ´, ˚
– Type = un relvar R
– Valeur = une relation de relvar R
• Composée d'opérateurs ensemblistes et relationnels
– Ensemblistes : union, intersection, différence et produit cartésien
– Relationnels : sélection, projection, jointure et division
8 Elles
sont toutes déclaratives. On spécifie ce qu'on veut, pas comment on va l'obtenir.
Techniques Informatiques
38
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
• Respecte la propriété de fermeture (closure)
– Càd que le résultat d'une opération est toujours une relation
– Permet de construire des expressions imbriquées comme avec ((3 ˚ 2) + 7)/2 dans R
exemple (relvars)
• Domaines.
ID : entiers positifs.
TITLE : chaînes de caractères de taille 30.
PUBLISHER : chaînes de caractères de taille 20.
YEAR : entiers de 4 chiffres.
ISBN : chaînes de caractères de format DDDDDDDDDA.
NAME : chaînes de caractères de taille 20.
• Relvars.
Books(bid : ID, title : TITLE, publisher : PUBLISHER, year : YEAR, isbn : ISBN)
Authors(aid : ID, name : NAME)
Wrote(aid : ID, bid : ID)
exemple (relations)
bid
1
2
3
4
5
Relation B
title
publisher
year
isbn
AITDS
DMS
DID
TPP
PR
Addison-Wesley
McGraw-Hill
O'Reilly
Addison-Wesley
Pragmatic Bookshelf
2004
2000
2005
2000
2005
0321197844
0072465352
0596100124
020161622X
0974514055
Relation W
aid
bid
aid
1
2
3
1
4
5
4
5
6
1
2
2
3
4
4
5
5
5
1
2
3
4
5
6
Relation A
name
Date
Ramakrishnan
Gehrke
Hunt
Thomas
Fowler
union
bid
1
2
title
Relation R1
AITDS
DMS
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
Relation R2
title
DMS
PR
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
L'union R1 Y R2 de deux relations de même type R1 et R2 est une relation
• De même type
• Composée des tuples t tels que t P R1 _ t P R2
bid
1
2
5
title
AITDS
DMS
PR
R1 Y R2
publisher
year
Addison-Wesley
McGraw-Hill
Pragmatic Bookshelf
2004
2000
2005
intersection
Techniques Informatiques
39
HEPL 2014–2015
bid
5. Modèle Relationnel
title
1
2
Relation R1
AITDS
DMS
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
Ludovic Kuty
title
Relation R2
DMS
PR
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
L'intersection R1 X R2 de deux relations de même type R1 et R2 est une relation
• De même type
• Composée des tuples t tels que t P R1 ^ t P R2
bid
title
R1 X R2
publisher
year
DMS
McGraw-Hill
2000
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
2
différence
bid
title
1
2
Relation R1
AITDS
DMS
title
Relation R2
DMS
PR
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
La différence R1 zR2 de deux relations de même type R1 et R2 est une relation
• De même type
• Composée des tuples t tels que t P R1 ^ t R R2
R1 zR2
bid
1
title
publisher
year
AITDS
Addison-Wesley
2004
produit cartésien
bid
title
1
2
Relation R1
AITDS
DMS
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
title
DMS
PR
Relation R2
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
Le produit cartésien R1 ˆ R2 de deux relations R1 et R2 sans attributs communs est une relation
• Dont l'en-tête est l'union des en-têtes de R1 et R2
• Composée des tuples t tels que t = t1 Y t2 avec t1 P R1 ^ t2 P R2
• |R1 ˆ R2 | = |R1 ||R2 |
• Attributs communs ñ renommage
bid
1
1
2
2
R1 ˆ ρ(R2 , bid Ñ bid2, title Ñ title2, publisher Ñ publisher2, year Ñ year2)
title
publisher
year
bid2
title2
publisher2
year2
AITDS
AITDS
DMS
DMS
2000
2005
2000
2005
Addison-Wesley
Addison-Wesley
McGraw-Hill
McGraw-Hill
2004
2004
2000
2000
2
5
2
5
DMS
PR
DMS
PR
McGraw-Hill
Pragmatic Bookshelf
McGraw-Hill
Pragmatic Bookshelf
sélection
bid
1
2
title
Relation R1
AITDS
DMS
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
title
DMS
PR
Relation R2
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
La sélection σcondition (R) d'une relation R est une relation
Techniques Informatiques
40
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
• De même type
• Composée des tuples t satisfaisant la condition booléenne portant sur les valeurs des attributs
σyearě2001 (R1 Y R2 )
bid
1
5
title
publisher
year
AITDS
PR
Addison-Wesley
Pragmatic Bookshelf
2004
2005
projection
bid
1
2
title
Relation R1
AITDS
DMS
publisher
year
bid
Addison-Wesley
McGraw-Hill
2004
2000
2
5
title
DMS
PR
Relation R2
publisher
year
McGraw-Hill
Pragmatic Bookshelf
2000
2005
La projection πattributes (R) d'une relation R est une relation
• D'en-tête équivalent dont on a gardé les attributs présents dans la liste attributes
• Dont on a supprimé les doublons apparus après avoir retiré les attributs
πbid,title (R1 )
bid
1
2
title
AITDS
DMS
jointure
Il existe trois types de jointure9 :
• La jointure conditionnelle
R1 ’condition R2 = σcondition (R1 ˆ R2 )
• L'équijointure
R1 ’equalities R2 = σequalities (R1 ˆ R2 )
• La jointure naturelle10
R1 ’ R2 = équijointure sur tous les attributs de même nom
jointure
• Le couple PK / FK établit un "pointeur" entre tuples de relations différentes
• La jointure naturelle permet de suivre ce "pointeur" entre relations et de récupérer les informations
• C'est donc une opération très utilisée
bid
1
2
2
3
4
4
5
5
5
9 Il
B’W
title
publisher
AITDS
DMS
DMS
DID
TPP
TPP
PR
PR
PR
Addison-Wesley
McGraw-Hill
McGraw-Hill
O'Reilly
Addison-Wesley
Addison-Wesley
Pragmatic Bookshelf
Pragmatic Bookshelf
Pragmatic Bookshelf
year
isbn
aid
2004
2000
2000
2005
2000
2000
2005
2005
2005
0321197844
0072465352
0072465352
0596100124
020161622X
020161622X
0974514055
0974514055
0974514055
1
2
3
1
4
5
4
5
6
existe aussi les jointures externes.
les attributs ne sont présents qu'une seule fois dans la relation résultante. On fait donc aussi une projection.
10 Notez que
Techniques Informatiques
41
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
jointure
Quels sont les titres des livres écrits par l'auteur Date ?
1. Obtenir la liste de tous les livres avec leurs auteurs ñ jointure. Double jointure car l'information
se trouve dans 3 relations
2. Ne garder que les livres écrits par Date ñ sélection
3. Ne garder que le titre des livres ñ projection
πtitle (σname=Date (B ’ W ’ A))
division
R1 ˜R3 R2 est une relation
• De même type que R1
• Dont chaque tuple t est tel que le tuple t Y v P R3 , @v P R2 où t P R1 et v P R2
• En d'autres termes, on trouve tous les tuples de R1 dont les valeurs correspondantes dans
R3 comprennent toutes les valeurs de R2
• La division est un opérateur peu utilisé sans correspondance directe dans la plupart des
SGBDR
• Elle permet de disposer d'un opérateur semblable à @
division
Relation M
sid
pid
s1
s1
s1
s1
s2
s2
s3
s4
s4
p1
p2
p3
p4
p1
p2
p2
p2
p4
Relation S
sid
Relation P1
S ˜M P1
p2
p4
s1
s4
s1
s2
s3
s4
pid
sid
5.6 Autres méthodes d’interrogation
autres méthodes d'interrogation
Il existe 3 méthodes d'interrogation des données.
• L'algèbre relationnelle. Elle est procédurale (‰ déclarative) vis à vis des deux autres
• Le calcul relationnel tuple (TRC). On indique les conditions que doivent satisfaire les tuples.
Par ex. le langage QUEL
– Une variable tuple prend des tuples comme valeur
– Une requête a la forme tT | p(T )u où T est une variable tuple et p un prédicat de la
logique de premier ordre où T est libre
• Le calcul relationnel domaine (DRC). On indique les conditions que doivent satisfaire les
valeurs des attributs des tuples. Par ex. le langage QBE (Query-By-Example)
– Une variable domaine prend des valeurs dans le domaine d'un attribut
Techniques Informatiques
42
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
– Une requête a la forme t⟨x1 , x2 , . . . , xn ⟩ | p(⟨x1 , x2 , . . . , xn ⟩)u où xi est une variable domaine ou une constante et p un prédicat de la logique de premier ordre où les xi sont
libres
exemples (relations)
exemples (algèbre)
exemples (TRC)
Techniques Informatiques
43
HEPL 2014–2015
5. Modèle Relationnel
Ludovic Kuty
exemples (DRC)
Techniques Informatiques
44
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Ludovic Kuty
Chapitre 6
Modèle Entité-Association -> Modèle
Relationnel
6.1 Présentation
généralités
• Comment passer du modèle EA au modèle relationnel ?
• But : concevoir le modèle logique.
• Objets du modèle EA Ñ objets du modèle relationnel càd uniquement des relations.
– Entités.
– Associations (binaires, n-aires).
– Identifiants (internes, externes).
– Attributs (multivalués, composés).
– Rôles et cardinalités (0, 1 et n).
– Généralisations.
• On parle de correspondance (mapping).
processus de transformation
Le processus peut être décomposé en 2 phases successives :
1. Etape indépendante du modèle logique.
2. Etape dépendante du modèle logique càd relationnel ici.
Techniques Informatiques
45
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
conceptual
schema
Ludovic Kuty
database
load
information
HIGH-LEVEL LOGICAL
DESIGN
conceptual-to-logical
schema + design choices
description
of the
target logical
model
MODEL-DEPENDENT
LOGICAL DESIGN
designer
preferences
performance
criteria
logical schema in
the target model
6.2 Etape indépendante du modèle logique
étape indépendante du modèle logique
• Modélisation de la charge sur la BD : volume des données et accès.
• Modélisation des données dérivées : stockage ou calcul ?
• Simplification des généralisations en entités et associations.
• Constitution de groupes d'entités / associations et fusion de ces groupes : efficacité et sécurité.
• Choix de clé primaire.
élimination des généralisations
• Les modèles logiques ne savent pas représenter les généralisations.
• On doit donc les modéliser avec des entités et des associations uniquement.
• Deux choses implicites doivent être modélisées explicitement :
– L'héritage des attributs de la super-entité dans la sous-entité.
– La relation est un entre la sous-entité et la super-entité.
trois possibilités
Pour éliminer les généralisations, on peut :
• Modéliser la hiérarchie avec une seule entité en prenant l'union des attributs des sous-entités
et en les ajoutant aux attributs de la super-entité. Un attribut discriminant est ajouté.
• Ne garder que les sous-entités en propageant les attributs hérités dans les sous-entités.
• Garder toutes les entités et utiliser des associations pour modéliser les relations entre les
super- et les sous-entités.
Techniques Informatiques
46
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Ludovic Kuty
Après
Le but est de minimiser le nombre d'accès requis pour une opération donnée. Ce critère nous
permettra de choisir la bonne méthode.
une seule entité (exemple)
• Les attributs des sous-entités deviennent optionnels (Thèse et Durée_Stage).
• Un attribut discriminant est ajouté (Niveau) :
– Cardinalité (1, 1) si généralisation totale et exclusive.
– Cardinalité minimale est 0 si généralisation partielle.
– Cardinalité maximale est n si généralisation imbriquée.
une seule entité (+/-)
Désavantages :
• Peut générer un nombre important de valeurs NULL pour les attributs qui ne s'appliquent
qu'aux sous-entités.
• Les opérations qui n'accèdent qu'aux sous-entités doivent examiner la totalité des instances
de la super-entité.
Avantages :
• Solution la plus simple : aucune association n'est nécessaire.
• S'applique à tous les types de généralisation.
les sous-entités (exemple)
• La super-entité disparaît, ses attributs sont intégrés dans toutes les sous-entités.
• Remarquez la mincard(Manager, Supervise_Par) passe de 1 à 0. De même pour mincard(Projet_Caritatif, Contrib
les sous-entités (+/-)
Désavantages :
• Pas utilisable pour les généralisations partielles ou imbriquées.
• On ne voit plus que les entités Secrétaire, Ingénieur et Manager sont toutes des employés.
• Duplication des attributs de la super-entité dans chacune des sous-entités. Cela pose problème quand il y a beaucoup d'attributs.
Techniques Informatiques
47
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Après
Avant
Après
Ludovic Kuty
• Une opération qui n'accédait qu'à la super-entité doit maintenant accéder à chacune des
sous-entités1 .
• Certaines associations doivent être répétées.
Intéressant lorsque :
• Le concept commun représenté par la super-entité n'est pas nécessaire dans le schéma logique.
• Le nombre d'attributs de la super-entité est faible.
• Les opérations sont localisées dans les sous-entités.
toutes les entités (exemple)
• Toujours faisable.
• Chaque lien entre la super-entité et une sous-entité est représenté par une association.
• La participation de la super-entité est optionnelle et celle de la sous-entité obligatoire.
toutes les entités (+/-)
Désavantages :
• Le schéma résultant est complexe. Insérer une instance d'une sous-entité impose d'insérer
une instance pour la super-entité et une pour l'association.
• La représentation explicite des liens est redondante au niveau conceptuel.
Avantages :
• Cette technique fonctionne dans tous les cas de figure.
• Pratique si la plupart des opérations sont locales à la super-entité ou une des sous-entités.
1 Nouvelles
entités anciennement des sous-entités.
Techniques Informatiques
48
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Ludovic Kuty
Après
6.3 Etape dépendante du modèle logique
étape dépendante du modèle logique
1. Elimination des identifiants externes.
2. Elimination des attributs composés et multivalués.
3. Transformation des entités.
4. Transformation des associations one-to-one, one-to-many et many-to-many.
6.3.1 Elimination des identifiants externes
élimination des identifiants externes
Inutilisables dans modèle relationnel ñ identifiants internes.
• Soit entité E1 dont la clé primaire est externe ou mixte.
• Soit entité E2 fournit identification à E1 grâce à l'association R.
• Clé primaire de E2 est interne.
• Alors, on importe dans E1 la clé primaire de E2 . Ensuite on élimine R.
6.3.2 Elimination des attributs composés et multivalués
élimination des attributs composés et multivalués
Inutilisables dans modèle relationnel ñ attributs simples univalués.
• Pour attribut composé, 2 possibilités :
– Chaque composant devient un attribut. adresse Ñ rue, ville et code postal.
– Chaque composant est intégré dans le même attribut. adresse Ñ adresse (concaténation).
• Pour attribut multivalué (par ex. hobbies, sports, …), on crée une entité contenant :
– L'attribut lui-même.
– L'identifiant de l'entité de départ.
– La clé primaire est l'ensemble des attributs.
élimination des attributs composés et multivalués
Si attribut multivalué dans une association R entre E1 et E2 :
Techniques Informatiques
49
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Après
Avant
Après
Ludovic Kuty
1. On crée une nouvelle entité E .
2. On ajoute l'attribut multivalué.
3. On ajoute des attributs de E1 et/ou E2 .
• one-to-one ñ E inclut la clé primaire de E1 ou E2 .
• one-to-many ñ E inclut la clé primaire de l'entité du côté many.
• many-to-many ñ E inclut les clés primaires de E1 et E2 .
4. La clé primaire est l'ensemble des attributs.
élimination des attributs composés et multivalués
6.3.3 Entités
entités
• Une entité correspond à une relation.
• Les attributs et la clé primaire sont les mêmes.
• Celle-ci peut être transformée avant cette étape. Cfr. slide 106.
6.3.4 Associations
associations one-to-one
Soit l'association R one-to-one entre E1 et E2
• Participation totale de E1 et E2 ñ réduction à une relation.
– Les clés primaires sont identiques ñ on combine les attributs et on prend une seule fois
la clé primaire.
– Les clés primaires sont différentes ñ on combine les attributs et on choisit une des clés
primaires.
Techniques Informatiques
50
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Après
Avant
Après
Ludovic Kuty
associations one-to-one
• Participation partielle de E1 et/ou E2 ñ création, réduction ou incorporation.
– Une entité avec participation partielle soit E1 ñ on place la PK de E1 dans E2 .
– Les deux entités avec participation partielle ñ on crée une relation.
associations one-to-many
Soit l'association R one-to-many entre E1 et E2
• Entité E2 (many) avec participation totale.
– La clé primaire de E1 est incorporée dans E2 .
– Les attributs de R sont incorporés dans E2 .
associations one-to-many
• Entité E2 (many) avec participation partielle ñ création ou incorporation selon le traitement
désiré des valeurs nulles.
• Ex. de création ci-dessous.
associations many-to-many
Soit l'association R many-to-many entre E1 et E2
• On crée une nouvelle relation.
• La clé primaire est la clé de E1 + la clé de E2 .
• On incorpore les attributs de R.
• Idem pour les association N-aire avec N ą 2. La clé primaire doit être réduite si c'est une
super-clé.
associations récursives
Soit l'association récursive R sur E .
Avant
Techniques Informatiques
Après
51
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Après
Avant
Après
Ludovic Kuty
• Association one-to-many ñ incorporation des attributs.
• Attention aux valeurs nulles. On peut devoir créer une nouvelle relation.
associations récursives
• Association many-to-many ñ création d'une relation.
• La PK de E est présente 2x dans la relation.
Avant
Techniques Informatiques
Après
52
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Avant
Après
Avant
Après
Techniques Informatiques
Ludovic Kuty
53
HEPL 2014–2015
6. Modèle Entité-Association -> Modèle Relationnel
Techniques Informatiques
Ludovic Kuty
54
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
Chapitre 7
Installation Oracle
composante d'un système Oracle
• Le serveur Oracle comprenant le SGBD et la BD
• Le client Oracle comprenant des librairies pour pouvoir accéder à un serveur Oracle
• Toute une série d'applications clientes diverses comme SQLPlus, Toad, SQL Developer, TOra, …
• Si le serveur est local càd sur la même machine que les applications clientes, alors une installation séparée du client Oracle n'est pas nécessaire. La partie client est incluse dans la partie
serveur
Typiquement :
SQLPlus
Toad
SQL Dev
SGBD
Oracle
+ BD
client
Oracle
utilisation locale
d’une librairie
communication
locale ou distante
7.1 Clients et serveurs
serveurs Oracle
• Oracle Database 10g Express Edition
– Léger (small-footprint)
– Utile pour développement, tests divers, …
– Version Windows x86 et Linux x86
– Documentation pour l'installation
– Archive : entre 165 et 220 MB. SGBD + BD : 1.2GB
• Oracle Database 10g.
– Complète.
– Plusieurs OS supportés dont Windows x861 et Linux x86.
1 Pour
Windows Vista, cfr. Statement of Direction.
Techniques Informatiques
55
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
– Documentation pour tous les types d'installation.
– Archive : 650 MB. SGBD + BD : 3.8GB.
• Compatibilité OS, serveurs, clients : matrices de certification.
clients Oracle
Trois types de clients Oracle :
• Oracle Database 10g Express Client. Cfr. Express Edition
• Oracle Database 10g Client
– Gourmand en place disque : 500MB
– Plusieurs types d'installation possibles dont Instant Client
– Nécessaire pour faire du développement Pro*C par exemple
• Instant Client
– Utilise très peu de place disque
– Divisés en packages : client de base, JDBC, SQLPlus, …
7.2 Installation
installation SGBD Windows
• Documentation officielle pour installation Windows x86
• Attention à l'installation sur une machine configurée par DHCP. Cfr. sections 2.4.1 et 2.4.5
de la documentation2
installation SGBD Linux
• Gentoo. HOWTO Install Oracle 10g
• Ubuntu. Oracle su Ubuntu3
• Debian. Oracle : Database for Debian
• Documentation officielle pour installation Linux x86 et The Oracle-on-Linux Installation Menu
Dans chaque procédure, on retrouve dans l'ordre :
1. Installer les packages adéquats.
2. Dimensionner certains paramètres du kernel
3. Créer le groupe dba, un utilisateur oracle et dimensionner ses limites
4. Installer le SGBD
post-installation
Côté serveur.
1. Démarrer le SGBD, démarrer le listener et démarrer l'interface Web de maintenance (Enterprise Manager) Go To
2 Cela
3 En
ne concerne pas l'Express Edition.
italien mais c'est compréhensible.
Techniques Informatiques
56
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
2. Accès à la maintenance de la BD. Go To
3. Création d'un utilisateur. Go To
4. Connaître la version, l'endroit où sont les fichiers de données, …Go To
5. Arrêter le SGBD. Go To
Côté client
1. Configurer les fichiers sqlnet.ora et tnsnames.ora Go To
7.3 Démarrage
démarrage (Linux)
• Démarrage de la BD
oracle@linux /mnt/oracle $ sqlplus sys as sysdba
SQL*Plus : Release 10.2.0.1.0 - Production on Mar. Mars 20 11 :38 :55 2007
Enter password :
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size
1219904 bytes
Variable Size
134218432 bytes
Database Buffers
306184192 bytes
Redo Buffers
2973696 bytes
Database mounted.
Database opened.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
• Démarrage du listener
oracle@linux /mnt/oracle $ lsnrctl start
LSNRCTL for Linux : Version 10.2.0.1.0 - Production on 20-MARS -2007 11 :57 :06
...
Listening on : (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux)(PORT=1521)))
...
Listener Parameter File
/mnt/oracle/product/10.2.0.1/network/admin/listener.ora
Listener Log File
/mnt/oracle/product/10.2.0.1/network/log/listener.log
...
The command completed successfully
démarrage (Linux)
• Démarrage de l'Enterprise Manager
oracle@linux /mnt/oracle $ emctl start dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http ://linux :1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control ...................... started.
-----------------------------------------------------------------Logs are generated in directory /mnt/oracle/product/10.2.0.1/linux_db1/sysman/log
démarrage (Windows)
• Démarrage du SGBD ñ démarrage de services Windows. Commande services.msc. Par
ex. :
– Express Edition : OracleServiceXE et OracleXETNSListener
• Il est intéressant de changer le démarrage automatique en manuel pour éviter de tout démarrer à chaque boot de la machine
• On peut scripter le démarrage des services
net start OracleServiceXE
net start OracleXETNSListener
Techniques Informatiques
57
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
7.4 Arrêt
arrêt (Linux)
• Arrêt de l'Enterprise Manager
oracle@linux ~ $ emctl stop dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http ://linux :1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ...
... Stopped.
• Arrêt du listener
oracle@linux ~ $ lsnrctl stop
LSNRCTL for Linux : Version 10.2.0.1.0 - Production on 21-MARS -2007 11 :47 :23
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
The command completed successfully
arrêt (Linux)
• Arrêt de la BD.
oracle@linux ~ $ sqlplus sys as sysdba
...
SQL> shutdown transactional
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
• Par ordre de sévérité (du moins sévère ou plus sévère) :
1. SHUTDOWN NORMAL ou SHUTDOWN. On attend que tous les utlisateurs soient déconnectés
2. SHUTDOWN TRANSACTIONAL. On attend que toutes les transactions actives soient terminées
3. SHUTDOWN IMMEDIATE. Déconnecte les utilisateurs et fait un rollback des transactions
en cours
4. SHUTDOWN ABORT. Déconnexion immédiate des utilisateurs. Pas de rollback. La BD
peut se retrouver dans un état incohérent
arrêt (Windows)
• Arrêt SGBD ñ arrêt de services Windows. Commande services.msc. Par ex. :
– Express Edition : OracleServiceXE et OracleXETNSListener
• On peut scripter l'arrêt des services. Remarquez l'inversion de l'ordre par rapport au script
de démarrage
net stop OracleXETNSListener
net stop OracleServiceXE
7.5 Maintenance
accès à la maintenance de la BD
• Avec l'interface Web de l'Enterprise Manager à l'url http://linux:1158/em pour le serveur nommé linux
Techniques Informatiques
58
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
• Avec un programme applicatif quelconque comme SQLPlus, Toad, SQL Developer. Il est
nécessaire d'avoir configuré les fichiers tnsnames.ora et sqlnet.ora Go To
création utilisateur sous Oracle
1. Création de l'utilisateur et du schéma associé
CREATE USER nom_utilisateur IDENTIFIED BY mot_de_passe
DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK
2. Modification du quota disque de l'utilisateur. Etape facultative
ALTER USER nom_utilisateur QUOTA 15M ON USERS;
3. Attribution d'un ou plusieurs rôles à l'utilisateur ou de privilèges systèmes. Au minimum,
il faut les privilèges systèmes CREATE SESSION et CONNECT
GRANT nom_role TO nom_utilisateur;
GRANT nom_privilege TO nom_utilisateur;
création utilisateur sous Oracle (exemples)
• On crée l'utilisateur test4 avec le mdp testmdp. Initialement le compte n'est pas locked
create user test identified by testmdp account unlock;
• On donne à l'utilisateur la possibilité de se connecter
grant create session to test;
• On crée un autre utilisateur avec un nom composé de caractères spéciaux
create user "éâûô" identified by testmdp account unlock;
• Vérifions la liste des utilisateurs créés aujourd'hui
select username from all_users where trunc (created) = trunc
(sysdate);
TEST
éâûô
infos BD
• Connaître la version de la BD
select * from v$version
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux : Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
• Savoir où se trouvent les fichiers
select name from v$datafile;
/mnt/oracle/oradata/db1/system01.dbf
/mnt/oracle/oradata/db1/undotbs01.dbf
/mnt/oracle/oradata/db1/sysaux01.dbf
/mnt/oracle/oradata/db1/users01.dbf
/mnt/oracle/oradata/db1/example01.dbf
4 Notez
que l'utilisateur et le mdp seront conservés en majuscules dans la BD. Il s'agit d'identifiants réguliers.
Techniques Informatiques
59
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
• Trouver le nom de la BD et le nom du domaine.
select name , value from v$parameter where name = 'db_name' or name = 'db_domain' ;
db_domain khi.be
db_name db1
infos BD
• Connaître le nom global de la BD
select * from global_name;
select * from props$ where name='GLOBAL_DB_NAME' ;
DB1.KHI.BE
• Connaître le nom du service (celui devant être dans tnsnames.ora)
SELECT name,value FROM v$parameter WHERE name = 'service_names' ;
db1.khi.be
select count(*) from v$parameter;
258
les fichiers de configuration du client
• Les fichiers sqlnet.ora et tnsnames.ora indiquent comment accéder aux BDs et où elles
se trouvent
• Ils sont situés dans le sous-répertoire network/admin de l'installation d'Oracle5 .
Serveur : /mnt/oracle/product/10.2.0.1/network/admin
• Pour l'Instant Client, il s'agit de n'importe quel répertoire. Celui-ci est indiqué à l'aide de la
variable d'environnement TNS\_ADMIN
• sqlnet.ora définit les méthodes utilisées pour savoir où se trouve les BDs. Par ex. LDAP
ou le fichier tnsnames.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
• tnsnames.ora définit des alias pour se connecter aux BDs
le fichier tnsnames.ora
• Il comprend les informations nécessaires pour accéder aux BDs distantes
• Chaque nouvelle entrée doit commencer en colonne 1
• SERVICE_NAME est le nom de la BD6
DB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db1.khi.be)
)
)
accès distant à BD "à la maison"
Pour accéder à sa BD chez soi, il faut :
5 Cela
6 En
peut être dans l'arborescence de l'installation du serveur sur la machine locale.
réalité c'est plus général que cela.
Techniques Informatiques
60
HEPL 2014–2015
7. Installation Oracle
Ludovic Kuty
1. Indiquer au firewall de laisser passer le trafic à destination du port 1521. Ce trafic est redirigé
vers le port 1521 du serveur
2. Indiquer au serveur Oracle de toujours utiliser le même port pour servir les requêtes càd le
1521
• Document pdf firewalls and redirections
• Document pdf use shared socket on Windows
• Document pdf check use shared socket
• Cela revient à fixer la variable d'environnement USE_SHARED_SOCKET à TRUE
Techniques Informatiques
61
HEPL 2014–2015
Techniques Informatiques
7. Installation Oracle
Ludovic Kuty
62
HEPL 2014–2015
8. Langage SQL
Ludovic Kuty
Chapitre 8
Langage SQL
8.1 Historique
historique
• 1970. A Relational Model of Data for Large Shared Data Banks, E. F. Codd, CACM.
• 70s. IBM développe en interne le SGBD System R basé sur l'article de Codd et le langage
Structured English Query Language (SEQUEL) pour l'utiliser. TM ñ changement du nom en
SQL1 .
• fin 70s, début 80s. Des produits apparaissent sur le marché. SQL/DS puis DB2 (IBM), Oracle
V2 (Relational Software Ñ Oracle).
• 1986. SQL-86. Adopté par l'ANSI (American National Standards Institute).
• 1987. SQL-87. Accepté par l'ISO (International Organization for Standardization).
• 1989. SQL-89 ou SQL1. 100 pages.
• 1992. SQL-92 ou SQL2. Révision majeure. 600 pages.
historique
• 1999. SQL :19992 ou SQL3. Ajout des regex, triggers, types non-scalaires, PSMs, CLI, OLB,
…
• 2003. SQL :2003. 2000 pages. Par ex. ajout de XML.
• 2006. SQL :2006. Fonctionnalités liées à XML.
8.2 Conformité et implémentations
conformité
SQL-92.
• Niveau d'entrée (Entry). SQL-89 + extensions.
• Niveau intermédiaire (Intermediate).
1 Ce
2 La
n'est pas un sigle.
nouvelle notation règle des problèmes potentiels liés à Y2K. Les deux-points sont la norme à l'ISO.
Techniques Informatiques
63
HEPL 2014–2015
8. Langage SQL
Ludovic Kuty
• Niveau complet (Full).
SQL :1999.
• Core = Entry SQL-92 + une bonne partie de Intermediate SQL-92 + quelques fonctionnalités
de Full SQL-92 + quelques nouvelles fonctionnalités.
• De nombreuses fonctionnalités ne font pas partie de Core SQL :1999 mais sont implémentables séparément. Certaines sont regroupées en package. On parle alors de Enhanced SQL
:19993 ou Non-Core.
• Packages = groupes de fonctionnalités liées qui peuvent être implémentés séparément.
– Au nombre de neuf dans le standard.
– D'autres packages peuvent être définis.
implémentations
• Aucun produit ne supporte complètement le standard SQL. Cfr. Is SQL a real standard anymore ?
• On parle plutôt de superset of a subset.
• Consulter la doc de chaque implémentation : Oracle, MySQL, PostgreSQL.
• Oracle 10g, Oracle 10g XE.
• MySQL 5.0 (moteurs MyISAM, InnoDB).
• PostgreSQL.
• Firebird (Fyracle).
• SQLite.
• Ingres (supporte QUEL).
• SQL Server (MS), DB2 (IBM), Informix (IBM), Sybase, ….
utilisations
• Intégration verticale. Utilisé par :
– Utilisateur final.
– Le concepteur d'application : schémas logique et externe.
– DBA : schéma physique (optimisation stockage et accès).
– Développeur : programmes applicatifs.
• Intégration horizontale. Un seul langage composé de4 :
– LDD (Data Definition Language, DDL).
– LMD (Data Manipulation Language, DML).
– LCD (Data Control Language, DCL).
– Transactions, procédures, …
3 Il
semblerait que le terme Enhanced ne soit pas un terme officiel du standard.
établies dans SQL-92.
4 Catégories
Techniques Informatiques
64
HEPL 2014–2015
8. Langage SQL
Ludovic Kuty
8.3 Concepts du langage SQL
sous-langage de données vs langage hôte
Sous-langage de données (data sublanguage).
• Langage spécialisé dans l'accès aux données (SQL, QUEL, QBE, RDML, …).
• Utilisé conjointement avec un autre langage appelé le langage hôte.
• Permet d'exprimer de manière concise et précise ce que l'on veut.
Langage hôte (host language).
• Langage de programmation familier (Java, C, C++, Cobol, Fortran, …).
• Permet d'exprimer un grand nombre de tâches diverses.
• N'est pas spécialisé pour l'accès aux données.
catalogue (SQL)
Les différents concepts introduisent un système de nommage hiérarchique.
• Environnement SQL = ensemble de catalogues.
• Catalogue = ensemble nommé de schémas.
• Schéma = ensemble nommé d'objets de la BD (par ex. table, procédures).
• Information schema = méta-données sur les schémas du catalogue. Inclus dans le catalogue
et nommé INFORMATION_SCHEMA. On parle aussi de dictionnaire de données.
• Attention, il n'y pas de notion de base de données.
information
schema
object
catalog
table
c
o
l
c
o
l
object
schema
schema
schema
catalogue (Oracle)
• La notion de catalogue n'existe pas avec Oracle.
• La collection de schémas est contenue5 dans une base de données. On peut donc écrire catalogue = BD6 .
• Un schéma contient un ensemble d'objets appartenant à un utilisateur.
• Il y a une correspondance un-à-un7 entre les schémas et les utilisateurs. Les deux portent le
même nom mais ils sont différents.
connexions et sessions
5 Le
terme "contenir" n'a rien à voir avec un quelconque stockage physique.
réalité, on pourrait avoir plusieurs catalogues dans la même base de données.
7 Il existe une bijection entre l'ensemble des utilisateurs et l'ensemble des schémas.
6 En
Techniques Informatiques
65
HEPL 2014–2015
8. Langage SQL
Ludovic Kuty
• Une connexion est une association entre un client SQL et un serveur SQL.
• Une session est le contexte dans lequel un utilisateur (personne ou application) exécute une
séquences d'instructions SQL dans une connexion.
Attention, il s'agit de concepts logiques (pas nécessairement physiques) càd qu'un environnement
réseau n'est pas obligatoire.
8.4 Notation BNF
notation BNF
Backus-Naur Form.
• Syntaxe (méta-syntaxe) pour décrire la syntaxe des langages de programmation.
• Spécifie la grammaire d'un langage context-free.
• Ensemble de règles de dérivation (de production) de la forme
symbole : := expression
• symbole est un non-terminal ou classe syntaxique (parfois indiqué entre <>).
• expression est une expression composée de :
– Symboles non-terminaux.
– Symboles terminaux (mot-clés, ponctuation, espaces, …)
– Le méta-symbole | pour indiquer le choix.
– Les méta-symboles [ et ] pour indiquer l'optionnalité.
– Les méta-symboles { et } pour indiquer la répétition de 0 ou plusieurs fois.
• BNF peut être étendue en ABNF ou EBNF.
notation BNF (exemple)
postal-address : := name-part street-address zip-part
personal-part
: := first-name | initial "."
name-part
: := personal-part SP last-name [SP jr-part] EOL
| personal-part SP name-part
street-address : := street-name SP house-num [SP apt] EOL
zip-part
: := postal-code SP town-name EOL
Exemple de texte qui peut être généré à l'aide de la grammaire précédente :
John R. R. Tolkien
Rue Peetermans 80
4100 Seraing
grammaire BNF de SQL et complexité
La grammaire utilisée dans le cours est celle de SQL :1999.
• Les syntaxes du LDD et du LMD (plus spécifiquement du SELECT) sont particulièrement
riches.
• ñ utilisation d'une syntaxe simplifiée et approximative dans les slides.
– Certaines règles de production ne sont pas montrées (points de suspension).
– Certaines classes syntaxiques ont été supprimées.
• La syntaxe complète (doc et txt) de SQL :1999 est disponible en BNF sur le site du cours.
Techniques Informatiques
66
HEPL 2014–2015
8. Langage SQL
Ludovic Kuty
8.5 Interfaçage avec SQL
utilisation de SQL
Quatre manières d'utiliser ou d'interfacer SQL dans des applications :
1. Invocation directe d'instructions SQL (direct invocation). Cfr. évaluation dans Toad ou SQL
Developer.
2. Incorporation des instructions SQL dans le langage hôte (embedded SQL). Par exemple, Pro/C,
Pro/Cobol ou SQLJ.
3. Ecriture des instructions dans un module séparé et invocation à partir du langage hôte (module language). Cfr. par exemple PL/SQL de Oracle.
4. Invocation à travers une interface de haut-niveau (call-level interface).
• Ces quatre manière sont reflétées au niveau des règles de production de la grammaire SQL.
• Les méthodes 2 et 3 impliquent d'établir une correspondance entre types SQL et types hôtes.
Techniques Informatiques
67
HEPL 2014–2015
Techniques Informatiques
8. Langage SQL
Ludovic Kuty
68
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
Chapitre 9
Langage de Définition de Données
(LDD)
9.1 Présentation
présentation
Langage de définition de données ou LDD (Data Definition Language ou DDL).
Utilisé pour définir :
• La structure de chaque table1 .
• Le domaine de chaque attribut.
• Les contraintes d'intégrité.
• Les index, la structure physique de chaque table, …
la table DUAL (Oracle)
La table DUAL est très utile pour faire des tests.
• Automatiquement crée par Oracle en même temps que le dictionnaire de données.
• Présente dans le schéma de SYS mais accessible à tous les utilisateurs.
• Possède une seule colonne nommée DUMMY de type VARCHAR2(1).
• Contient un seul enregistrement de valeur X ñ un seul résultat renvoyé.
• Utile pour calculer des expressions avec SQL.
column dummy format A5
select * from dual;
DUMMY
----X
1 row selected.
les identifiants
Il existe 2 types d'identifiant SQL pour nommer les objets de la BD :
1 Le
schéma de chaque relation.
Techniques Informatiques
69
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
• Les identifiants réguliers.2
– Non sensibles à la casse. Par ex. TITRE, titre, Titre et TiTrE sont identiques.
– Le SGBD change toutes les minuscules en majuscules.
– Sont constitués par des caractères alphanumériques (dépend du jeu de caractères) et
l'underscore.
• Les identifiants délimités.
– L'identifiant est entouré de guillemets.
– Sensibles à la casse. Par ex. "TITRE" et "Titre" sont différents.
– Les guillemets ne sont pas stockés dans le dictionnaire de données.
– Peuvent contenir n'importe quel caractère à n'importe quelle position.
9.2 Types de donnée
types en bref (scalaires)
Principales catégories de types et types principaux.
Catégorie
Types de données
Binaire
Booléen
Caractère
Numérique entier
Numérique
fractionnaire
Numérique approximatif
Date/Heure
BIT, BIT VARYING, BINARY LARGE OBJECT
BOOLEAN
CHARACTER, CHARACTER VARYING, CHARACTER LARGE OBJECT
INTEGER, SMALLINT
Intervalle
DECIMAL, NUMERIC
REAL, FLOAT, DOUBLE PRECISION
DATE, TIME, TIMESTAMP, TIME WITH TIME ZONE, TIMESTAMP
WITH TIMEZONE
Year-month, Day-time
• Selon le SGBDR, les types supportés diffèrent.
types en bref (autres)
• Les collections ou tableaux définis à l'aide du mot-clé3 ARRAY.
• Le type représentant un tuple dont le constructeur est ROW, appelé anonymous row type.
• Les types définis par l'utilisateur : structured type et distinct type.
• Le type permettant de référencer ou pointer un tuple d'une table appelé reference type.
• Les locators qui permettent côté client d'éviter de manipuler directement de larges quantités
de données (par ex. BLOB ou CLOB). Ceux-ci ne sont pas stockés dans les tables.
type de données
2 Pour Oracle, certains objets ont obligatoirement un identifiant régulier. Certaines règles de nommage doivent être
respectées.
3 On le qualifie de constructeur de type ou type constructor.
Techniques Informatiques
70
HEPL 2014–2015
<data type> : :=
defined type>
9. Langage de Définition de Données (LDD)
Ludovic Kuty
<predefined type> | <row type> | <user-
| <reference type> | <collection type>
<predefined type> : :=
<character string type>73
| <national character string type>
| <binary large object string type>74
| <bit string type>74
| <numeric type>71
| <boolean type>72
| <datetime type>75
| <interval type>78
9.2.1 Types numériques
types numériques
<numeric type> : := <exact numeric type> | <approximate
numeric type>
<exact numeric type> : := NUMERIC [ ( <precision> [ , <scale>
] ) ]
| DECIMAL [ ( <precision> [ , <scale>
] ) ]
| DEC [ ( <precision> [ , <scale> ] )
]
| INTEGER | INT | SMALLINT
<precision> : := <unsigned integer>
<scale> : := <unsigned integer>
<approximate numeric type> : := FLOAT [ ( <precision> ) ]
| REAL | DOUBLE PRECISION
• Les types numériques exacts comprennent les numériques entiers et les fractionnaires.
types numériques entiers
Représentent les nombres entiers. Ensemble Z.
• INTEGER (abbrev. INT). La précision4 dépend de l'implémentation.
• SMALLINT. La précision dépend de l'implémentation mais n'est pas supérieure à celle de
INTEGER.
types numériques fractionnaires
Représentent les nombres fractionnaires. Ensemble Q.
• NUMERIC(p,s) où
– p est la précision càd le nombre de chiffres significatifs.
– s est l'échelle càd le nombre de chiffres après la virgule avec 0 ď s ď p.
– NUMERIC(p) ” NUMERIC(p,0) et NUMERIC utilise une précision par défaut dépendant
de l'implémentation.
– L'implémentation fournit exactement les p et s demandés.
• DECIMAL est comme NUMERIC mais la précision fournie par l'implémentation peut être supérieure à la précision demandée.
4 Le
nombre de chiffres qui peuvent être stockés.
Techniques Informatiques
71
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
types numériques approximatifs
Représentent les nombres pour lesquels la précision ne doit pas être absolue. Ensemble R.
• REAL représente un flottant en simple précision. Dépend de l'implémentation mais habituellement a un correspondant machine.
• DOUBLE PRECISION représente un flottant dont la précision doit être supérieure à celle de
REAL. Dépend de l'implémentation mais habituellement a un correspondant machine.
• FLOAT(p) permet d'indiquer la précision minimale voulue pour le flottant.
types numériques (Oracle)
• Un seul type numérique Oracle : NUMBER(p,s).
• p est la précision càd le nombre de chiffres significatifs. Au maximum 38 chiffres décimaux.
• s est l'échelle càd le nombre de chiffres à partir de la virgule jusqu'au chiffre le moins significatif avec ´84 ď s ď 127.
– Si s ě 0, il s'agit du nombre de chiffres significatifs après la virgule.
– Si s ă 0, il s'agit d'un arrondi à |s| chiffres à gauche de la virgule.
• NUMBER(p) représente un entier (s = 0) et NUMBER prend pour p et s les valeurs maximales
permises.
Type SQL
Type Oracle
INTEGER, INT et SMALLINT
NUMERIC(p,s) et DECIMAL(p,s)
REAL, DOUBLE PRECISION et FLOAT
NUMBER(38)
NUMBER(p,s)
NUMBER
types numériques (tests)
1. Arrondi avec une échelle négative de 2 (2 chiffres à gauche de la virgule).
select cast (125.67 as number (5, -2)) as RES from dual;
100
2. Arrondi avec une échelle positive de 2 (2 chiffres à droite de la virgule).
select cast (125.65532 as number (5, 2)) as RES from dual;
125.66
9.2.2 Type booléen
type booléen
<boolean type> : := BOOLEAN
• Les littéraux booléens sont TRUE, FALSE et NULL.
• Comme nous le verrons au slide 95, la logique est trivalente.
• Ce type n'existe pas dans Oracle.
Techniques Informatiques
72
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
9.2.3 Types caractères
types caractères
<character string type> : := CHARACTER [ ( <length> ) ]
| CHARACTER VARYING ( <length> )
| CHARACTER LARGE OBJECT [ ( <large object length> ) ]
• CHARACTER (abbrev. CHAR).
– CHARACTER(n) Représente les chaînes de caractères de taille fixe n.
– Les chaînes plus courtes que le type sont complétées par des espaces.
– CHARACTER seul ” CHARACTER(1).
• CHARACTER VARYING (abbrev. VARCHAR ou CHAR VARYING).
– CHARACTER VARYING(n) représente les chaînes de caractères de taille variable de taille
maximale n.
– Permet d'éviter les espaces inutiles en fin de chaîne.
– Pas de longueur par défaut.
• CHARACTER LARGE OBJECT (abbrev. CLOB ou CHAR LARGE OBJECT).
• Les litéraux sont indiqués entre apostrophes, ont une taille max. de 4000 bytes et sont considérés de type CHAR.
'La maison d''édition est "O''Reilly"'
types caractères (Oracle)
• Type CHAR :
– Taille maximale de 2000 bytes.
– CHAR(n) ou CHAR(n BYTE) crée une chaîne de n bytes.
– CHAR(n CHAR) crée une chaîne de n caractères. Différent si un caractère peut être codé
sur plus d'un byte.
• Type VARCHAR :
– Taille maximale de 4000 bytes.
– On peut aussi utiliser les mot-clés CHAR ou BYTE.
– Le type Oracle conseillé est VARCHAR2.
• Type CLOB :
– Taille maximale = (4GB5 - 1 byte) * (taille de bloc de BD). Entre 8 et 128 TB.
types caractères (tests)
1. Quel est le jeu de caractères de la BD ?
select value from nls_database_parameters where parameter = '
NLS_CHARACTERSET' ;
WE8MSWIN1252
5 GB
(gigabyte) ‰ Gb (gigabits)
Techniques Informatiques
73
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
2. Nombre de caractères d'une chaîne d'encodage WE8MSWIN1252.
select length ('bonjour') as res from dual;
7
3. Nombre de bytes d'une chaîne d'encodage WE8MSWIN1252.
select lengthb ('bonjour') as res from dual;
7
4. Quel est le jeu de caractères nationaux (Unicode) de la BD ?
select value from nls_database_parameters where parameter = '
NLS_NCHAR_CHARACTERSET' ;
AL16UTF16
5. Nombre de caractères d'une chaîne d'encodage AL16UTF16.
select length (N'bonjour') as res from dual;
7
6. Nombre de bytes d'une chaîne d'encodage AL16UTF16.
select lengthb (N'bonjour') as res from dual;
14
à propos de WE8MSWIN1252
• Jeu de caractères créé par Microsoft.
• Sur-ensemble du jeu de caractères ISO-8859-1 (nommé WE8ISO8859P1 chez Oracle).
• Définit certains code points non utilisés par ISO-8859-1. Par exemple le symbole Euro.
• Définit tous les caractères utilisés par ISO-8859-15 (nommé WE8ISO8859P15 chez Oracle)
mais pas de la même manière6 .
• Explications détaillées à propos des jeux de caractères sur Wikipedia.
9.2.4 Types binaires
types binaires
<bit string type> : := BIT [ ( <length> ) ]
| BIT VARYING ( <length> )
<binary large object string type> : :=
BINARY LARGE OBJECT [ ( <large object length> ) ]
• Type BIT.
– Représente les chaînes de bits de taille fixe.
– BIT ” BIT(1).
• Type BIT VARYING.
– Représente les chaînes de bits de taille variable.
6 Càd
pas dans le même ordre.
Techniques Informatiques
74
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
– Il n'y a pas de longueur par défaut.
• Type BINARY LARGE OBJECT (abbrev. BLOB).
– Représente les larges séquences de bytes.
– Il n'y a pas de longueur par défaut.
types binaires (Oracle)
• Les types BIT et BIT VARYING n'ont pas de correspondances chez Oracle.
• Le type BLOB. La taille est la même que pour le type CLOB.
9.2.5 Types temporels
types temporels
<datetime type> : := DATE
| TIME [ ( <time precision> ) ]
[ <with or without time zone> ]
| TIMESTAMP [ ( <timestamp precision> ) ]
[ <with or without time zone> ]
<time precision> : := <time fractional seconds precision>
<time fractional seconds precision> : := <unsigned integer>
<with or without time zone> : := WITH TIME ZONE |
WITHOUT TIME ZONE
<timestamp precision> : := <time fractional seconds precision>
• DATE pour représenter une date sous forme d'année, mois et jour. Il utilise 10 positions.
– Le jour est sur 2 chiffres de 01 à 31.
– Le mois est sur 2 chiffres de 01 à 12.
– L'année est sur 4 chiffres de 0001 à 9999.
• TIME pour représenter un temps sous forme d'heure, minute et seconde. Il utilise 8 positions
ou 9 + le nombre de chiffres de la partie fractionnaire.
– L'heure est sur 2 chiffres de 00 à 23.
– Les minutes sont sur 2 chiffres de 00 à 59.
– Les secondes sont sur 2 chiffres avec une partie fractionnaire optionnelle de 00 à 61.999....
• TIMESTAMP représente une date et une heure. Il utilise 19 positions ou 20 + le nombre de
chiffres de la partie fractionnaire.
– Par défaut, la précision est de 6.
– Avec TIMESTAMP(p) on indique la précision p.
• TIME WITH TIME ZONE équivaut au type TIME avec l'offset par rapport UTC (Universal
Coordinated Time, anc. GMT).
– L'offset est représenté avec un type intervalle INTERVAL HOUR TO MINUTE.
– L'offset varie de -12 :59 à +13 :00.
– Le nombre de positions est 8 + 6 = 14.
– Une partie fractionnaire peut être spécifiée.
• TIMESTAMP WITH TIME ZONE équivaut au type TIMESTAMP avec l'offset par rapport à UTC.
Techniques Informatiques
75
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
– Le nombre de positions est 19 + 6 = 25.
– Une partie fractionnaire peut être spécifiée.
types temporels (Oracle)
• Le type TIME n'existe pas.
• Le type DATE sert à représenter des dates du calendrier.
– On stocke aussi les heures, minutes et secondes en les fixant à 0 par défaut.
– En plus de l'année, le siècle est représenté.
– Les fonctions TO_DATE et TO_CHAR permettent resp. de passer d'un représentation textuelle à une date et d'une date à une représentation textuelle.
– Le paramètre de session NLS_DATE_FORMAT contrôle le format de la date.
– Ces fonctions utilisent un format de date précis.
• Le type TIMESTAMP sert à stocker des dates-heures précises.
– On stocke l'année, le mois, le jour, l'heure, les minutes et les secondes.
– Les secondes peuvent être fractionnaires. TIMESTAMP(n) stocke n chiffres pour la précision des secondes avec 0 ď n ď 9. Par défaut, c'est 6.
• Le type TIMESTAMP WITH TIME ZONE est comme TIMESTAMP avec un offset UTC en plus.
• Le type TIMESTAMP WITH LOCAL TIME ZONE est comme TIMESTAMP WITH TIME ZONE
mais l'heure est normalisée : l'offset UTC n'est pas stocké dans la BD.
les types temporels (fuseau horaire)
1. Fuseau de la BD.
select dbtimezone from dual;
+00 :00
2. Fuseau de la session.
select sessiontimezone from dual;
+00 :00
3. On examine la liste des fuseaux horaires.
select tzname, tzabbrev from v$timezone_names where tzname
like 'Europe/B%' ;
4. On altère le fuseau horaire de la session.
alter session set time_zone = 'Europe/Brussels' ;
Session altered.
5. On vérifie que la modification a bien été faite.
select sessiontimezone from dual;
Europe/Brussels
6. Date/Heure courante complète.
select systimestamp from dual;
10-MAR-07 10.41.57.343000 AM +01 :00
Techniques Informatiques
76
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
les types temporels (tests)
1. On utilise un littéral date. Celui-ci s'écrit toujours YYYY-MM-DD. Remarquez le format d'affichage
qui est différent du format du littéral.
select date '2007-01-31' from dual;
31-JAN-07
2. Examinons le format d'affichage du type DATE.
select * from nls_session_parameters where parameter like '
NLS_DATE_FORMAT' ;
DD-MON-RR
3. On peut altérer ce format pour la session en cours.
alter session set nls_date_format = 'DD MM YYYY HH24 :MI :SS' ;
Session altered.
4. Vérifions que l'altération a bien eu lieu en affichant une date.
select date '2007-01-31' from dual;
31 01 2007 00 :00 :00
5. En indiquant que la langue de la session est le français, on peut afficher les dates en utilisant
les jours et mois en français.
alter session set nls_date_language = 'FRENCH' ;
select to_char(date '2007-01-31','Day DD FMmonth YYYY') as
res from dual;
Mercredi 31 janvier 2007
1. On affiche un littéral TIMESTAMP.
select timestamp '2007-01-31 09 :30 :50.1234' from dual;
31-JAN-07 09.30.50.123400000 AM
2. On affiche un littéral TIMESTAMP WITH TIME ZONE.
select timestamp '2007-01-31 08 :00 :00 +01 :00' from dual;
31-JAN-07 08.00.00.000000000 AM +01 :00
3. La même heure en spécifiant le fuseau horaire de manière symbolique.
select timestamp '2007-01-31 08 :00 :00 Europe/Brussels' from
dual;
31-JAN-07 08.00.00.000000000 AM EUROPE/BRUSSELS
4. On "caste" le littéral en un TIMESTAMP WITH LOCAL TIME ZONE. Comme le fuseau du
littéral et de la session sont les mêmes, cela revient simplement à éliminer l'offset UTC.
select cast(timestamp '2007-01-31 08 :00 :00 Europe/Brussels'
as timestamp with local time zone) from dual;
31-JAN-07 08.00.00.000000 AM
5. On refait la même opération avec un littéral dont le fuseau horaire est celui de New-York.
Remarquez que l'heure de New-York est convertie en heure de Bruxelles en ajoutant 6h.
Techniques Informatiques
77
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
select cast(timestamp '2007-01-31 08 :00 :00 America/New_York'
as timestamp with local time zone) from dual;
31-JAN-07 02.00.00.000000 PM
6. On peut convertir des dates d'un fuseau horaire à un autre avec la notation AT TIME ZONE.
select timestamp '2007-01-31 08 :00 :00 Europe/Brussels' at
time zone 'America/New_York' from dual;
31-JAN-07 02.00.00.000000000 AM AMERICA/NEW_YORK
9.2.6 Types intervalles
les intervalles
Les intervalles représentent la différence entre deux dates ou deux heures.
• Les intervalles year-month contiennent une année, un mois ou les deux.
– INTERVAL YEAR, INTERVAL YEAR(p), INTERVAL MONTH, INTERVAL MONTH(p), INTERVAL YEAR TO MONTH, INTERVAL YEAR(p) TO MONTH.
– p indique le nombre de chiffres dans le seul champ présent ou dans le champ de tête.
– Par défaut p vaut 2.
• Les intervalles day-time contiennent un jour, une heure, des minutes et/ou des secondes.
– INTERVAL f1 ou INTERVAL f1 TO f2.
– f1 et f2 valent DAY, HOUR, MINUTE ou SECOND.
– Si f1 et f2 sont présents, une valeur de ce type doit contenir toutes les valeurs intermédiaires.
– On peut indiquer une précision pour f1 . Par défaut elle vaut 2.
– On peut indiquer une précision pour f2 s'il s'agit de SECONDS. Par défaut elle vaut 6.
les intervalles (Oracle)
• Les types intervalles Oracle sont quasiment les mêmes que ceux du SQL.
• Pour les intervalles mois-années, la précision porte uniquement sur le champ YEAR.
• Pour les intervalles jours-secondes, les précisions portent sur le champ DAY et sur le champ
SECONDS.
les intervalles (tests)
1. Remarquez l'utilisation d'un littéral intervalle.
select interval '45' month from dual;
+03-09
2. Si le nombre de mois excède 99 ans et 11 mois, on a une erreur car la précision par défaut est
de 2.
select interval '1200' month from dual;
ORA-01873 : the leading precision of the interval is too small
3. Remarquez que l'année est codée sur 4 chiffres.
Techniques Informatiques
78
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
select interval '10-5' year(4) to month from dual;
+0010-05
4. La précision 6 agit sur le nombre de jours et non le nombre d'heures comme on aurait pu le
penser.
select interval '480 :45 :10' hour(6) to second(0) from dual;
+000020 00 :45 :10
9.3 Instructions du LDD
les instructions LDD
<SQL schema statement> : := <SQL schema definition statement>
| <SQL schema manipulation
statement>
<SQL schema definition statement> : := <schema definition>
| <table definition>81
| <view definition>
| <domain definition>79
| <assertion definition>
| <trigger definition>
| ...
Pour tout ce qui concerne la définition des données, on utilise :
• CREATE pour créer quelque chose.
• ALTER pour modifier quelque chose.
• DROP pour se débarasser de quelque chose.
• SELECT pour obtenir des informations sur quelque chose.
• Les instructions de type DD (définition de données) ont pour effet de provoquer des actions
de type MD (manipulation de données) sur le dictionnaire de données (information schema).
• L'utilisateur n'a pas accès directement au dictionnaire de données.
création de domaine
<domain definition> : := CREATE DOMAIN <domain name> [ AS ] <
data type>
[ <default clause>80 ]
{ <domain constraint> }
<domain constraint> : := [ <constraint name definition>80 ]
<check constraint definition>80
[ <constraint characteristics>84 ]
• domain name est le nom du domaine défini.
• data type est le nom d'un type existant (cfr. slide 70).
• domain constraint représente une contrainte sur les valeurs du type.
CREATE DOMAIN nom_d AS VARCHAR(30) DEFAULT NULL
CREATE DOMAIN percent_d AS NUMERIC(5,2) CHECK (VALUE BETWEEN
0 AND 100)
Techniques Informatiques
79
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
• Notez que d'après [8], les domaines pourraient disparaître du standard car peu utilisés.
• L'implémentation de Oracle ne contient pas les domaines.
valeur par défaut
<default clause> : := DEFAULT <default option>
<default option> : := <literal>96 | <datetime value function>
105
| USER | CURRENT_USER | CURRENT_ROLE | SESSION_USER
| SYSTEM_USER | CURRENT_PATH
| <implicitly typed value specification>108
• Valeur donné à la colonne lorsque celle-ci n'est pas spécifiée explicitement.
• Notez que pour Oracle la valeur par défaut est simplement une expression SQL quelconque.
contraintes de domaine
<constraint name definition> : := CONSTRAINT <constraint name>
<constraint name> : := <schema qualified name>
<check constraint definition> : := CHECK ( <search condition>
94 )
• Le mot-clé VALUE représente la nouvelle valeur.
9.3.1 Types de table
types de tables
• Une table est un multiset7 de lignes (tuples ou enregistrements).
• Une ligne (row) est une séquence8 non vide de valeurs (dans des colonnes).
• Le degré d'une table est le nombre de colonnes et la cardinalité de la table est le nombre de
lignes.
Il existe 3 types de tables :
• Les tables de base (base tables). Elles se déclinent en 4 sous-types différents :
– Persistante.
– Temporaire globale.
– Temporaire locale créée.
– Temporaire locale déclarée.
• Les vues (viewed tables ou views).
• Les tables dérivées (derived tables).
les tables de base
Les données d'une table de base sont stockées sur disque ou en mémoire.
• Persistante.
7 Ensemble
8 Cela
non ordonné pouvant contenir plusieurs éléments identiques.
implique un ordre.
Techniques Informatiques
80
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
– La définition est stockée dans un schéma.
– Les données sont stockées sur disque.
– Visibilité inter-sessions.
• Temporaire globale et temporaire locale créée.9
– La définition est stockée dans un schéma.
– Les données sont stockée temporairement pendant la session.
– Le contenu de la table est détruit à la fin de chaque session.
– Visibilité intra-sessions.
• Temporaire locale déclarée.
– La définition est stockée dans un module SQL.
– Créée lorsqu'une procédure du module est exécutée.
– Pour le reste, idem que les deux précédentes.
les tables dérivées et les vues
• Une table dérivée :
– Est obtenue directement ou indirectement à partir d'une ou plusieurs autres tables grâce
à l'évaluation d'une requête.
– Contient les valeurs des autres tables au moment de l'évaluation.
• Une vue :
– Est une table dérivée nommée définie à l'aide de CREATE VIEW.
– Peut être modifiable ou non.
9.3.2 CREATE TABLE
création de table
<table definition> : := CREATE [ <table scope> ] TABLE <table
name>
<table contents source> ...
<table contents source> : := <table element list> | ...
<table element list> : := ( <table element> { , <table element
> } )
<table element> : :=
<column definition>81
| <table constraint definition>85
| <like clause>
| <self-referencing column specification>
| <column options>
• Les contraintes peuvent apparaître au niveau des colonnes (column definition) ou au
niveau de la table (table constraint definition).
• Documentation Oracle pour CREATE TABLE.
définition de colonne
9 La
différence entre les deux tient à la visibilité entre modules SQL.
Techniques Informatiques
81
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
<column definition> : := <column name>
( <data type>70 | <domain name> )
[ <default clause>80 ]
{ <column constraint definition>82 }
<column name> : := <identifier>
contrainte de colonne
<column constraint definition> : := [ <constraint name
definition> ]
<column constraint>
[ <constraint
characteristics> ]
<constraint name definition> : := CONSTRAINT <constraint name>
<constraint name> : := <schema qualified name>
<column constraint> : := NOT NULL | <unique specification>82
| <references specification>83 | <check constraint
definition>83
• constraint name permet de nommer explicitement la contrainte. Sinon, le SGBD s'en
charge mais les noms choisis n'ont aucune signification.
select constraint_name from user_constraints
where owner = 'LUDO' and table_name = 'LIVRE' ;
SYS_C005313
SYS_C005314
SYS_C005315
SYS_C005316
• Documentation Oracle sur les contraintes.
contraintes UNIQUE & PRIMARY KEY (col.)
<unique specification> : := UNIQUE | PRIMARY KEY
Contrainte de colonne PRIMARY KEY :
• Indique que la colonne est une clé primaire.
Contrainte de colonne UNIQUE :
• Indique que chaque valeur de la colonne doit être unique.
• Si la colonne n'est pas une PK, cela spécifie que c'est une clé secondaire.10
• Attention, plusieurs valeurs peuvent êtres nulles. Il est bon de spécifier également NOT NULL
sur les colonnes.
contrainte UNIQUE (exemple)
create table livre (
id number primary key,
isbn varchar2(10) unique,
auteur number references auteur(id),
année date,
unique (auteur, année));
10 Sauf
pour les valeurs nulles. Ce n'est donc le cas que si on spécifie aussi NOT NULL.
Techniques Informatiques
82
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
• Pour la contrainte de colonne, cfr. slide 82.
• Pour la contrainte de table, cfr. slide 85.
contrainte REFERENCES (col.)
<references specification> : := REFERENCES <referenced table
and columns> ...
<referenced table and columns> : := <table name> [ ( <
reference column list> ) ]
<reference column list> : := <column name list>
<column name list> : := <column name> { , <column name> }
• Indique que la colonne fait référence à la PK d'une autre table.
• Définit une clé étrangère (FK).
Exemple :
create table livre (
id number primary key,
isbn varchar2(10) unique,
auteur number references auteur(id),
année date,
unique (auteur, année));
contrainte CHECK (col. et table)
<check constraint definition> : := CHECK ( <search condition>
94 )
• Contrainte générale. Peuvent utiliser des sous-requêtes de sélection.
• Ne peut être fausse pour aucune ligne de la table.11
• Si la table est vide, elle est toujours vraie.
• Contrainte de colonne CHECK ne peut référencer que la colonne en cours.
• Contrainte de table CHECK peut référencer toutes les colonnes de la table en cours.
contrainte CHECK (tests)
create table livre (
titre varchar2(30) not null primary key constraint
livre_titre_check check (titre = UPPER(titre)),
cote number(1) constraint livre_cote_check
check (cote between 0 and 5),
etat varchar2(7) constraint livre_etat_check
check (etat in ('bon', 'mauvais')));
insert into livre values ('LA HUITEME COULEUR', 5, 'bon');
1 row created.
insert into livre values ('Le huitième sortilège', 4, 'bon');
ORA-02290 : check constraint (LUDO.LIVRE_TITRE_CHECK) violated
insert into livre values ('TROIS SOEURCIERES', 6, 'bon');
ORA-02290 : check constraint (LUDO.LIVRE_COTE_CHECK) violated
11 Pour
toutes les lignes, elle doit être vraie ou inconnue. Nous reviendrons sur cela.
Techniques Informatiques
83
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
caractéristiques de contrainte
<constraint characteristics> : :=
<constraint check time> [ [ NOT ] DEFERRABLE ]
| [ NOT ] DEFERRABLE [ <constraint check time> ]
<constraint check time> : := INITIALLY DEFERRED |
INITIALLY IMMEDIATE
• INITIALLY DEFERRED indique que les contraintes sur la table ou la colonne ne seront appliquées qu'à la fin de chaque transaction.
• INITIALLY IMMEDIATE indique que les contraintes sur la table ou la colonne seront appliquées à la fin de chaque instruction.
• DEFERRABLE et NOT DEFERRABLE indiquent si l'instruction SET CONSTRAINT peut être utilisée sur la contrainte.
• Documentation Oracle sur SET CONSTRAINT.
• Documentation Oracle sur les contraintes.
caractéristiques de contrainte (tests)
1. On crée la table auteur avec une contrainte NOT NULL sur le nom qui est testée à la fin de
l'instruction mais peut être différée.
create table auteur (
id number primary key,
nom varchar2(30) constraint auteur_nom_nn not null
initially immediate deferrable);
2. Choisissons de différer la verification de la contrainte.
set constraint auteur_nom_nn deferred;
3. On insère un tuple dont le num est NULL.
insert into auteur values(0, NULL);
4. On met à jour le nom pour qu'il ne soit plus NULL à l'aide d'une autre instruction.
update auteur set nom = 'Pratchett' where id = 0 ;
5. Enfin, on termine la transaction. La vérification de la contrainte a lieu à ce moment.
commit;
1. On crée la table auteur avec une contrainte NOT NULL sur le nom qui est testée à la fin de
la transaction.
create table auteur (
id number primary key,
nom varchar2(30) constraint auteur_nom_nn not null
initially deferred deferrable);
2. On insère un auteur dont le nom est NULL et on termine la transaction.
insert into auteur values(0, NULL);
commit;
Techniques Informatiques
84
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
3. La vérification en fin de transaction montre que la contrainte est violée.
ORA-02091 : transaction rolled back
ORA-02290 : check constraint (LUDO.AUTEUR_NOM_NN) violated
contrainte de table
<table constraint definition> : := [ <constraint name
definition>82 ]
<table constraint>
[ <constraint
characteristics> ]
<table constraint> : := <unique constraint definition>85
| <referential constraint definition>85
| <check constraint definition>83
contrainte UNIQUE (table)
<unique constraint definition> : := <unique specification>82
( <unique column list> ) | UNIQUE ( VALUE )
<unique column list> : := <column name list>83
• UNIQUE (VALUE) spécifie que la table ne peut contenir aucun doublon.
• Indiquer qu'une ou plusieurs colonnes forment une clé primaire.
create table auteur (
nom varchar2(30),
prénom varchar2(30),
constraint auteur_pk primary key (nom, prénom));
contrainte FOREIGN KEY (table)
<referential constraint definition> : :=
FOREIGN KEY ( <referencing columns> ) <references
specification>83
<referencing columns> : := <reference column list> ??
• Indiquer qu'une ou plusieurs colonnes forment une clé étrangère.
create table auteur (
id number primary key,
nom varchar2(30));
create table livre (
id number primary key,
isbn varchar2(10) unique,
auteur number,
constraint fk_auteur foreign key (auteur) references auteur(id))
;
accès aux contraintes
Techniques Informatiques
85
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
• A quelles colonnes a-t-on accès dans la table USER_CONSTRAINTS ?
select column_name, comments from dict_columns where
table_name = 'USER_CONSTRAINTS' ;
OWNER
Owner of the table
CONSTRAINT_NAME Name associated with constraint definition
CONSTRAINT_TYPE Type of constraint definition
TABLE_NAME
Name associated with table with constraint
definition
SEARCH_CONDITION Text of search condition for table check
...
• Soit la table livre :
create table livre (
id number constraint pk_livre primary key,
isbn varchar2(10) constraint unique_livre_isbn unique,
auteur number,
edition number constraint check_livre_edition
check (edition between 1 and 10),
constraint fk_livre_auteur foreign key (auteur) references
auteur(id));
• Les contraintes définies sur cette table sont :
select constraint_name, constraint_type, table_name
from user_constraints
where owner = 'LUDO' and table_name = 'LIVRE' ;
CHECK_LIVRE_EDITION C LIVRE
PK_LIVRE
P LIVRE
UNIQUE_LIVRE_ISBN
U LIVRE
FK_LIVRE_AUTEUR
R LIVRE
9.3.3 DROP TABLE
instruction DROP TABLE
<drop table statement> : := DROP TABLE <table name> <drop
behavior>
<drop behavior> : := CASCADE | RESTRICT
• Supprime la table du schéma.
• L'option RESTRICT empêche la suppression si :
– La table est utilisée dans une requête en cours.
– La table est utilisée dans une vue.
– La table est référencée par une autre table.
• L'option CASCADE force l'effacement de la table et de tout ce qui en dépend comme les vues
ou les contraintes.
instruction DROP TABLE (Oracle)
DROP TABLE nom_table [ CASCADE CONSTRAINTS ] [ PURGE ] ;
Techniques Informatiques
86
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
• Documentation Oracle pour DROP TABLE.
• CASCADE devient CASCADE CONSTRAINTS.
• RESTRICT ne peut pas être mentionnée explicitement.
• PURGE évite de placer la table dans la corbeille si celle-ci existe.
• La corbeille peut être purgée et désactivée en écrivant en tant que SYS :
purge tablespace users;
alter system set recyclebin = off;
l'instruction DROP TABLE (tests)
1. La colonne id_A de B fait référence à une ligne de A.
create table A (id number primary key);
create table B (id number primary key,
id_A number references A(id));
2. On a deux contraintes d'intégrité : une PK (lettre P) et une FK (lettre R).
select constraint_name, constraint_type from user_constraints
where owner = 'LUDO' and table_name = 'B' ;
SYS_C005347
P
SYS_C005348
R
3. On essaie d'effacer la table référencée A.
drop table A;
ORA-02449 : unique/primary keys in table referenced by foreign
keys
4. L'effacement a échoué, il y a toujours 2 tables.
select table_name from tabs;
A
B
5. Cette fois, on recommence avec l'option CASCADE CONSTRAINTS.
drop table A cascade constraints;
Table dropped.
6. La table a bien été effacée.
select table_name from tabs;
B
7. La contrainte correspondante de B aussi.
select constraint_name, constraint_type from user_constraints
where owner = 'LUDO' and table_name = 'B' ;
SYS_C005347
P
Techniques Informatiques
87
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
9.3.4 ALTER TABLE
instruction ALTER TABLE
<alter table statement> : := ALTER TABLE <table name> <alter
table action>
<alter table action> : := <add column definition>88
| <alter column definition>88
| <drop column definition>88
| <add table constraint definition>88
| <drop table constraint definition>88
• Permet d'altérer la structure d'une table càd sa définition. L'instruction agit donc sur le schéma.
• Avec Oracle, il y a des différences importantes par rapport au standard SQL.
• Documentation Oracle sur ALTER TABLE.
ajout de colonne
<add column definition> : := ADD [ COLUMN ] <column definition
>81
• column definition est la syntaxe utilisée lors du CREATE TABLE.
• Avec Oracle, le mot-clé COLUMN ne peut pas être présent.
modification & destruction de colonne
<alter column definition> : := ALTER [ COLUMN ] <column name>
<alter column action>
<alter column action> : := <set column default clause>
| <drop column default clause>
| ...
<set column default clause> : := SET <default clause>
<drop column default clause> : := DROP DEFAULT
<drop column definition> : := DROP [ COLUMN ] <column name> <
drop behavior>86
ajout & destruction de contrainte
<add table constraint definition> : := ADD <table constraint
definition>85
<drop table constraint definition> : := DROP CONSTRAINT <
constraint name> <drop behavior>86
instruction ALTER TABLE (tests)
1. On crée la table A sans PK.
create table A (id number);
Techniques Informatiques
88
HEPL 2014–2015
9. Langage de Définition de Données (LDD)
Ludovic Kuty
2. On ajoute ensuite la PK.
alter table A add constraint A_pk primary key (id);
Table altered.
3. Vérifions que la contrainte a bien été ajoutée.
select constraint_name, constraint_type from user_constraints
where owner = 'LUDO' and table_name = 'A' ;
A_PK
P
4. On ajoute également une colonne.
alter table A add (nom varchar2(30) not null);
5. De même, vérifions que la colonne a bien été ajoutée.
select column_name, data_type from user_tab_columns where
table_name = 'A' ;
ID
NUMBER
NOM
VARCHAR2
Techniques Informatiques
89
HEPL 2014–2015
Techniques Informatiques
9. Langage de Définition de Données (LDD)
Ludovic Kuty
90
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
Chapitre 10
Langage de Manipulation de
Données (LMD)
10.1 Présentation
présentation
Langage de manipulation de données ou LMD (Data Manipulation Language ou DML).
Utilisé pour agir sur les données des tables du schéma càd :
• Rechercher des informations
• Ajouter de nouvelles lignes dans une table
• Modifier la valeur de certains attributs d'une ligne
• Effacer certaines lignes d'une table
instructions du LMD
<direct SQL data statement> : :=
<delete statement : searched>121
| <direct select statement : multiple rows>116
| <insert statement>119
| <update statement : searched>120
| ...
Pour tout ce qui concerne la manipulation des données, on utilise :
• INSERT pour créer quelque chose
• UPDATE pour modifier quelque chose
• DELETE pour se débarasser de quelque chose
• SELECT pour obtenir des informations sur quelque chose
A mettre en correspondance avec les instructions LDD (cfr. slide 79).
origine des exemples
• Les exemples sont basés sur les tables définies aux pages 91 à 94 de [4]
• Certains exemples proviennent directement de la référence en question
• Le script de création des tables1 est disponible sur le site du cours
1 script_dml_tables_1.sql
Techniques Informatiques
91
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
10.2 SELECT
l'instruction SELECT
<query specification> : := SELECT [ ALL | DISTINCT ] <select
list>92
<from clause>93
[ <where clause>94 ]
[ <group by clause>117 ]
[ <having clause>118 ]
• L'instruction SELECT est aussi appelée SFW2 dans la littérature
• Les opérations effectuées par SELECT sont à mettre en correspondance avec les opérateurs
de l'algèbre relationnelle
– La liste de sélection réalise une projection
– La clause where réalise une sélection
– La jointure et les opérateurs ensemblistes ne sont pas représentés ici
• Le mot-clé DISTINCT permet d'éliminer les tuples en double
• Documentation Oracle sur l'instruction SELECT
10.2.1 Liste de sélection
SELECT (liste de sélection)
<select list> : := * | <select sublist> { , <select sublist> }
<select sublist> : := <derived column> | <qualified asterisk>
<derived column> : := <value expression>99
[ [ AS ] <column
name> ]
<qualified asterisk> : := <asterisked identifier chain> . *
| <all fields reference>
<asterisked identifier chain> : := <asterisked identifier>
{ . <asterisked identifier>
}
<asterisked identifier> : := <identifier>
La liste de sélection peut être :
• Un astérisque pour projeter sur toutes les colonnes de la table obtenue avec le from-where
• Ou une liste de sous-listes séparées par des virgules composées de :
– Colonne dérivée càd une expression quelconque éventuellement renommée
– Astérisque qualifiée
SELECT (projection 1)
• Obtenir la liste des nom, prénom et date de naissance de tous les élèves
2 Pour
select-from-where car il s'agit de la forme canonique d'un select.
Techniques Informatiques
92
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
select nom, prenom, date_naissance from eleves;
NOM
PRENOM
DATE_NAISSANCE
------------------------- ----------------------------------------Brisefer
Benoit
10/12/1978
Génial
Olivier
10/04/1978
Jourdan
Gil
28/06/1974
Spring
Jerry
16/02/1974
Tsuno
Yoko
29/10/1977
Lebut
Marc
29/04/1974
Lagaffe
Gaston
8/04/1975
Dubois
Robin
20/04/1976
Walthéry
Natacha
7/09/1977
Danny
Buck
15/02/1973
SELECT (projection 2)
• Obtenir la liste des spécialités des professeurs. On élimine les doublons avec DISTINCT
select distinct specialite from professeurs;
SPECIALITE
-------------------poésie
poo
réseau
sql
• Calculer 5 ˚ 2 + 4
select 5 * 2 + 4 as "Réponse" from dual;
Réponse
---------14
10.2.2 Clause FROM
SELECT (clause FROM)
<from clause> : :=
> }
<table reference>
<table primary> :
correlation name>
FROM <table reference> { , <table reference
: := <table primary> | <joined table>112
:=
<table or query name> [ [ AS ] <
]
Techniques Informatiques
93
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
| <derived table> [ AS ] <correlation
name>
| ( <joined table>112 )
| ...
<derived table> : := <table subquery>
<table subquery> : := <subquery>110
• Composée d'une liste de références à des tables séparées par des virgules
• correlation name est simplement un alias pour référencer la table. Utile comme raccourci
• derived table permet de spécifier des sous-requêtes et joined table de faire des jointures. Cfr. plus loin
• Oracle ne permet pas d'utiliser le mot-clé AS
SELECT (clause FROM, exemples)
• Utilisation d'un alias pour afficher le nom de tous les élèves
select e.nom from eleves e;
NOM
--------Brisefer
Génial
Jourdan
Spring
Tsuno
Lebut
Lagaffe
Dubois
Walthéry
Danny
10.2.3 Clause WHERE
SELECT (clause WHERE)
<where clause> : := WHERE <search condition>230
• La clause where permet de sélectionner des tuples sur base d'une condition. Il s'agit donc
d'un filtrage
• La notion de condition est très générale car elle est entre autre utilisée avec les instructions
UPDATE et DELETE
condition de recherche
<search condition> : := <boolean value expression>
<boolean value expression> : :=
<boolean term>
| <boolean value expression> OR <boolean term>
<boolean term> : :=
<boolean factor>
| <boolean term> AND <boolean factor>
<boolean factor> : := [ NOT ] <boolean test>
Techniques Informatiques
94
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
<boolean test> : := <boolean primary> [ IS [ NOT ] <truth
value> ]
<boolean primary> : := <predicate>95
| ( <boolean value expression> )
| <nonparenthesized value expression primary>100
<truth value> : := TRUE | FALSE | UNKNOWN
• Définit l'utilisation des opérateurs OR, AND et NOT et leurs règles d'associativité
• La richesse de la condition est cachée dans les classes predicate et nonparenthesized
value expression primary
• Documentation Oracle sur les conditions et plus particulièrement sur les conditions logiques
Les prédicats
prédicats
<predicate> : :=
predicate>97
<comparison predicate>96 | <between
| <in predicate>97 | <like predicate>98
| <null predicate>98 | <quantified comparison
predicate>116
| <exists predicate> | <unique predicate>
| <match predicate> | <overlaps predicate>
| <similar predicate> | <distinct predicate>
| ...
• Un prédicat est une expression qui affirme une relation entre des valeurs
• Le prédicat peut être vrai, faux ou inconnu (dû à la présence de la valeur NULL)
la valeur NULL
• NULL est un flag qui indique l'absence de valeur3 d'une colonne
• Utile si valeur de colonne inconnue ou sans signification. Par ex., retenir le numéro de GSM
des personnes alors que certaines n'ont pas de GSM
• NULL impose une logique trivalente ñ on dispose de la valeur booléenne UNKNOWN en plus
de TRUE et FALSE
• Attention, la valeur UNKNOWN se propage dans les comparaisons
• Oracle n'a pas de type booléen. NULL est utilisé pour représenter UNKNOWN
tables de vérité de AND, OR et NOT
AND
T
F
U
OR
T
F
U
3 Notez
T
T
F
U
T
T
T
T
F
F
F
F
F
T
F
U
U
U
F
U
U
T
U
U
que par abus de langage, on dira que la colonne a la valeur NULL.
Techniques Informatiques
95
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
T
F
U
Ludovic Kuty
NOT
F
T
U
comparaisons logiques
<comparison predicate> : :=
<row value expression> <comp op> <row value expression>
<comp op> : := = | <> | < | > | <= | >=
<row value expression> : := <row value special case> | <row
value constructor>96
<row value special case> : := <value specification> | <value
expression>99
<value specification> : := <literal>96 | <general value
specification>
• Documentation Oracle sur les comparaisons logiques
row value constructor
<row value constructor> : :=
<row value constructor element>
| [ ROW ] ( <row value constructor element list> )
| <row subquery>
<row value constructor element> : := <value expression>99
<row value constructor element list> : :=
<row value constructor element>
{ , <row value constructor element> }
<row subquery> : := <subquery>110
• Permet de manipuler des lignes entières
• Très utile lors de comparaisons
• Quasiment pas supporté par Oracle
• Exemple 1 sur le slide 278
littéraux
<literal> : := <signed numeric literal> | <general literal>
<signed numeric literal> : := [ + | - ] <unsigned numeric
literal>
<unsigned numeric literal> : := <exact numeric literal> | <
approximate numeric literal>
<exact numeric literal> : :=
<unsigned integer> [ . [ <unsigned integer> ] ]
| . <unsigned integer>
<approximate numeric literal> : := <mantissa> E <exponent>
<mantissa> : := <exact numeric literal>
<exponent> : := <signed integer>
<signed integer> : := [ + | - ] <unsigned integer>
<general literal> : := <character string literal> | <national
character string literal>
| <bit string literal> | <hex string literal>
Techniques Informatiques
96
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
| <binary string literal> | <datetime literal>
| <interval literal> | <boolean literal>
• Pour info. Cfr doc. SQL pour de plus amples informations
• Documentation Oracle sur les littéraux
comparaisons logiques (exemples)
• Obtenir les nom et prénom des élèves pesant mois de 45 kg et inscrits en 1ère année ou des
élèves inscrits en 2ème année
select nom, prenom from eleves where (poids < 45 and annee =
1) or annee = 2 ;
NOM
PRENOM
------------------------- ------------------------Brisefer
Benoit
Génial
Olivier
Jourdan
Gil
Spring
Jerry
Lebut
Marc
Dubois
Robin
Danny
Buck
prédicat BETWEEN
<between predicate> : := <row value expression>96 [ NOT ]
BETWEEN
<row value expression>96 AND <row
value expression>96
• Obtenir le nom des élèves dont le poids est compris entre 60 et 80 kg
select nom from eleves where poids between 60 and 80 ;
NOM
------------------------Jourdan
Spring
Lebut
Lagaffe
Dubois
• Documentation Oracle sur le prédicat BETWEEN
prédicat IN
<in predicate> : := <row value expression>96 [ NOT ] IN <in
predicate value>
<in predicate value> : :=
<table subquery>93 | ( <in value
list> )
<in value list> : := <row value expression>96 { , <row value
expression>96 }
• Obtenir le nom des professeurs dont la spécialité est poésie ou sql
Techniques Informatiques
97
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
select nom from professeurs where specialite in ('poésie', '
sql');
NOM
------------------------Bottle
Pastecnov
Selector
Pucette
• Documentation Oracle sur le prédicat IN
prédicat LIKE
<like predicate> : := <character like predicate>
<character like predicate> : := <character match value> [ NOT
] LIKE <character pattern>
[ ESCAPE <escape character> ]
<character match value> : := <character value expression>103
<character pattern> : := <character value expression>103
• character pattern est une chaîne quelconque
• Trois caractères jouent un rôle particulier :
– _ remplace un seul caractère
– % remplace un nombre quelconque de caractères (peut être 0)
– Le caractère d'échappement permet d'indiquer littéralement un des deux caractères
précédents. Par ex. pour rechercher n'importe quelle chaîne contenant le caractère %,
on peut écrire :
... LIKE '%@%%' ESCAPE '@' ;
• Documentation Oracle sur le prédicat LIKE
prédicat LIKE (exemple)
• Obtenir le nom des élèves dont le nom commence par la lettre L
select nom from eleves where nom like 'L%' ;
NOM
------------------------Lebut
Lagaffe
prédicat NULL
<null predicate> : := <row value expression>96 IS [ NOT ] NULL
• Le standard fournit un mécanisme de comparaison par rapport à la valeur NULL
• Documentation Oracle sur le prédicat NULL
prédicat NULL (exemple 1)
Techniques Informatiques
98
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Obtenir le nom des professeurs dont la spécialité est inconnue
select nom from professeurs where specialite is null;
NOM
------------------------Francesca
• Obtenir le nom des professeurs dont la spécialité est connue
select nom from professeurs where specialite is not null;
NOM
------------------------Bottle
Bolenov
Tonilaclasse
Pastecnov
Selector
Vilplusplus
Pucette
prédicat NULL (exemple 2)
• Contenu de la table test
select * from test;
1
2
(null)
(null)
3
5 rows selected
• Obtenir les IDs non NULL (mauvaise méthode)
select * from test where id <> null;
0 rows selected
• Obtenir les IDs non NULL (bonne méthode)
select * from test where id is not null;
1
2
3
les expressions composées
<value expression> : := <numeric value expression>100
| <string value expression>103 | <datetime value
expression>105
| <interval value expression>106
| <boolean value expression>94
| <row value expression>96
| ...
• Définit les expressions composées en toute généralité
Techniques Informatiques
99
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
les expressions primaires
<value expression primary> : :=
<parenthesized value expression>
| <nonparenthesized value expression primary>
<parenthesized value expression> : := ( <value expression>99 )
<nonparenthesized value expression primary> : :=
<unsigned value specification> | <column reference>
| <set function specification>107 | <scalar subquery>
| <case expression>108 | <cast specification>108 | ...
<scalar subquery> : := <subquery>110
<unsigned value specification> : := <unsigned literal> | <
general value specification>
<unsigned literal> : := <unsigned numeric literal>96 | <
general literal>96
• Définit les expressions considérées comme atomiques
• Des parenthèses autour d'une value expression la rendent atomique comme en C un bloc
d'instructions entouré d'accolades est une instruction
• Notez que ces expressions peuvent renvoyer des valeurs de types différents. Elles apparaissent donc dans la définition de nombreuses autres classes syntaxiques
les expressions numériques
<numeric value expression> : := <term>
| <numeric value expression> + <term>
| <numeric value expression> - <term>
<term> : := <factor> | <term> * <factor> | <term> / <factor>
<factor> : := [ + | - ] <numeric primary>
<numeric primary> : := <value expression primary>100 | <
numeric value function>
<numeric value function> : :=
<position expression>101
| <extract expression>101
| <length expression>102
| <absolute value expression>102
| <modulus expression>103
• La définition reprend la syntaxe habituelle des expressions arithmétiques
expressions numériques complexes
• Pour chaque spécialiste SQL, obtenir son nom, son salaire mensuel actuel et son augmentation mensuelle depuis son salaire de base
select nom, salaire_actuel / 12, (salaire_actuel salaire_base)/12 from professeurs where specialite = 'sql' ;
NOM
SAL
AUGM
------------------------- ---------- ---------Pastecnov
208333.333
0
Selector
158333.333
0
Techniques Informatiques
100
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Pucette
Ludovic Kuty
208333.333 41666.6666
• Obtenir le nom des professeurs dont l'augmentation relative au salaire de base dépasse 25%
select nom from professeurs where (salaire_actuel salaire_base)/salaire_base > 0.25 ;
Bottle
Bolenov
Francesca
fonction POSITION
<position expression> : := <string position expression> | ...
<string position expression> : := POSITION ( <string value
expression>103 IN
<string value
expression>
103 )
• Pour Oracle, POSITION devient INSTR
• Documentation Oracle sur les fonctions caractères renvoyant un nombre
fonction POSITION (exemples)
Chaîne : CORPORATE FLOOR, sous-chaîne : OR.
• Avec les paramètres par défaut
select instr('CORPORATE FLOOR', 'OR') from dual;
2
• Recherche de la troisième occurence
select instr('CORPORATE FLOOR', 'OR', 1, 3) from dual;
14
• Recherche de la première occurence à partir de la lettre T
select instr('CORPORATE FLOOR', 'OR', 8) from dual;
14
• Recherche à partir de la fin de la troisième occurence
select instr('CORPORATE FLOOR', 'OR', -1, 3) from dual;
2
fonction EXTRACT
<extract expression> : := EXTRACT ( <extract field> FROM <
extract source> )
<extract field> : := <primary datetime field> | <time zone
field>
<extract source> : := <datetime value expression>105 | <
interval value expression>106
Techniques Informatiques
101
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
<primary datetime field> : := <non-second primary datetime
field> | SECOND
<time zone field> : := TIMEZONE_HOUR | TIMEZONE_MINUTE
<non-second primary datetime field> : := YEAR | MONTH | DAY |
HOUR | MINUTE
• Documentation Oracle sur la fonction EXTRACT
fonction EXTRACT (exemples)
• Extraction de l'année d'une date
select extract (year from date '2007-04-20') from dual;
2007
• Extraction des heures
select extract (hour from timestamp '2007-01-31
09 :30 :50.1234') from dual;
9
• Extraction des champs d'un intervalle
select extract(day from interval '485 :45 :10' hour(6) to
second(0)) from dual;
20
select extract(hour from interval '485 :45 :10' hour(6) to
second(0)) from dual;
5
select extract(minute from interval '485 :45 :10' hour(6) to
second(0)) from dual;
45
select extract(second from interval '485 :45 :10' hour(6) to
second(0)) from dual;
10
expression de longueur
<length expression> : :=
<char length expression>
| <octet length expression>
| <bit length expression>
<char length expression> : := ( CHAR_LENGTH |
CHARACTER_LENGTH ) ( <string value expression>103 )
<octet length expression> : := OCTET_LENGTH ( <string value
expression>103 )
<bit length expression> : := BIT_LENGTH ( <string value
expression>103 )
• Pour Oracle, CHAR_LENGTH et son synonyme deviennent LENGTH
• Documentation Oracle sur les fonctions caractères renvoyant un nombre
• Cfr. slide 73
fonction ABS
Techniques Informatiques
102
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
<absolute value expression> : := ABS ( <numeric value
expression>100 )
• Calcule la valeur absolue d'un nombre
• Documentation Oracle sur la fonction ABS
fonction MOD
<modulus expression> : := MOD ( <numeric value expression>100
, <numeric value expression>100 )
• MOD(n1,n2) calcule le reste de la division de n1 par n2 . Les échelles de n1 et n2 doivent être
nulles
• Documentation Oracle sur la fonction MOD
select mod(100, 3) from dual;
1
Les expressions caractères
les expressions caractères
<string value expression> : := <character value expression> |
...
<character value expression> : := <concatenation> | <character
factor>
<concatenation> : := <character value expression> || <
character factor>
<character factor> : := <character primary> [ <collate clause>
]
<character primary> : := <value expression primary>100 | <
string value function>
<string value function> : := <character value function> | ...
<character value function> : :=
<character substring function>103
| <fold>104
| <trim function>104
| ...
• Les syntaxes Oracle et SQL sont très différentes
• Documentation Oracle sur les fonctions caractères renvoyant une chaîne de caractères
fonction SUBSTRING
<character substring function> : := SUBSTRING (
<character value expression> FROM <start position>
[ FOR <string length> ] )
<start position> : := <numeric value expression>100
<string length> : := <numeric value expression>100
• Extrait une sous-chaîne hors d'une chaîne de caractères
Techniques Informatiques
103
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Documentation Oracle sur la fonction SUBSTR
• Il existe une syntaxe permettant d'utiliser des expressions régulières. Pour Oracle, il s'agit
de REGEXP_SUBSTR
fonction SUBSTRING (exemples)
• Retourne les 3 derniers caractères
select substr('bonjour', -3) from dual;
our
• Retourne la troisième sous-chaîne
select substr(' :un :deux :trois :quatre :cinq :', 10, 5) from dual
;
trois
• Retourne la troisième sous-chaîne
select regexp_substr(' :un :deux :trois :quatre :cinq :', ' :[^ :]+',
1, 3) from dual;
:trois
fonctions LOWER et UPPER
<fold> : := ( UPPER | LOWER ) ( <character value expression>
103 )
• Documentation Oracle sur les fonctions LOWER et UPPER
• Convertit une chaîne en majuscules
select upper('Chaîne de caracteres') from dual;
CHAÎNE DE CARACTERES
• Convertit une chaîne en minuscules
select lower('CHAÎNE DE CARACTERES') from dual;
chaîne de caractères
fonction TRIM
<trim function> : := TRIM ( <trim operands> )
<trim operands> : := [ [ <trim specification> ] [ <trim
character> ] FROM ] <trim source>
<trim specification> : := LEADING | TRAILING | BOTH
<trim character> : := <character value expression>103
<trim source> : := <character value expression>103
• Documentation Oracle sur les fonctions TRIM, LTRIM et RTRIM
• Elimine les espaces superflus en début et fin de chaîne
select '.' || trim('
.un mot.
Techniques Informatiques
un mot
') || '.' from dual;
104
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Elimine certains caractères en début de chaîne
select '.' || ltrim('Name : Einstein', 'Name : ') || '.' from
dual;
.Einstein.
• Elimine les points en début de chaîne
select '.' || trim(LEADING '.' FROM '.....Name : ') || '.'
from dual;
.Name : .
Les expressions dates-temps
les expressions dates-temps
<datetime value expression> : := <datetime term>
| <interval value expression>106 + <datetime term>
| <datetime value expression> + <interval term>106
| <datetime value expression> - <interval term>106
<datetime term> : := <datetime factor>
<datetime factor> : := <datetime primary> [ <time zone> ]
<datetime primary> : := <value expression primary>100 | <
datetime value function>
<time zone> : := AT <time zone specifier>
<time zone specifier> : := LOCAL | TIME ZONE <interval primary
>
<datetime value function> : := CURRENT_DATE
| CURRENT_TIME [ ( <time precision> ) ]
| CURRENT_TIMESTAMP [ ( <timestamp precision> ) ]
| LOCALTIME [ ( <time precision> ) ]
| LOCALTIMESTAMP [ ( <timestamp precision> ) ]
• Documentation Oracle sur les fonctions dates-temps
les expressions dates-temps (exemples 1)
• Avec la précision par défaut
select current_date from dual;
04 04 2007 13 :44 :06
select current_timestamp from dual;
04/04/07 13 :44 :05,934389000 EUROPE/BRUSSELS
select localtimestamp from dual;
04/04/07 13 :44 :05,934389000
• En indiquant la précision
select current_timestamp(0) from dual;
04/04/07 13 :46 :51,000000000 EUROPE/BRUSSELS
select localtimestamp(0) from dual;
04/04/07 13 :46 :51,000000000
• Quel jour sera-t-on demain ?
Techniques Informatiques
105
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
select sysdate + 1 from dual;
05 04 2007 14 :27 :57
• Obtenir l'année de la dernière promotion du professeur Pucette
select substr(cast(der_prom as char(20)),7,4) from
professeurs where nom = 'Pucette' ;
select extract(year from der_prom) from professeurs where nom
= 'Pucette' ;
select to_char(der_prom, 'YYYY') from professeurs where nom =
'Pucette' ;
select to_number(to_char(der_prom, 'YYYY')) from professeurs
where nom = 'Pucette' ;
1996
Les expressions intervalles
les expressions intervalles
<interval value expression> : := <interval term>
| <interval value expression> + <interval term>
| <interval value expression> - <interval term>
| ( <datetime value expression>105 - <datetime term> ) <
interval qualifier>
<interval term> : := <interval factor>
| <interval term> * <factor>
| <interval term> / <factor>
| <term> * <interval factor>
<interval factor> : := [ + | - ] <interval primary>
<interval primary> : := <value expression primary>100 | <
interval absolute value function>
<interval absolute value function> : := ABS ( <interval value
expression> )
les expressions intervalles (exemples 1)
• Pour chaque professeur, afficher sa date d'embauche, sa date de dernière promotion et le
nbre d'années entre les deux
select nom, to_char(der_prom,'DD MM YYYY') as "der_prom",
to_char(date_entree,'DD MM YYYY') as "date_entree", extract (
year from (der_prom - date_entree) year to month) as "années"
from professeurs;
NOM
der_prom
date_entree
années
------------------------- ---------- ----------- ---------Bottle
01 10 1988 01 10 1970
18
Bolenov
01 10 1998 15 11 1968
29
Tonilaclasse
01 01 1989 01 10 1979
9
Pastecnov
01 10 1975
Selector
15 10 1982
Vilplusplus
05 06 1994 25 04 1990
4
Francesca
11 01 1998 01 10 1975
22
Techniques Informatiques
106
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Pucette
29 02 1996 06 12 1988
Ludovic Kuty
7
• Afficher l'âge moyen des élèves
select avg(extract(year from current_date) - extract(year
from date_naissance)) from eleves;
31.4
les expressions intervalles (exemples 2)
• Afficher le nom des profs pour lesquels le nombre de mois entre la dernière promotion et le
date d'embauche est supérieur à 50
select nom from professeurs where months_between(der_prom,
date_entree) > 50 ;
Bottle
Bolenov
Tonilaclasse
Francesca
Pucette
Les fonctions ensemblistes
les fonctions ensemblistes
<set function specification> : := COUNT ( * ) | <general set
function> | ...
<general set function> : := <set function type> ( [ <set
quantifier> ] <value expression>99 )
<set function type> : := <computational operation>
<computational operation> : := AVG | MAX | MIN | SUM | EVERY |
ANY | SOME | COUNT
<set quantifier> : := DISTINCT | ALL
• Appelées aussi fonctions d'agrégation
fonction COUNT (exemples)
• Obtenir le nombre d'élèves inscrits en deuxième année
select count(*) from eleves where annee = 2 ;
5
• Les colonnes dont la valeur est NULL ne sont comptées qu'avec l'astérisque
create table test (id number);
insert into test (select rownum from all_objects where
rownum between 1 and 50);
insert into test (select null from all_objects where rownum
between 1 and 50);
select count(*) from test;
100
select count(id) from test;
50
Techniques Informatiques
107
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
fonction AVG (exemple)
• Obtenir le poids moyen des élèves de 1ère année
select avg(poids) from eleves where annee = 1 ;
48.4
fonction SUM (exemple)
• Obtenir le total des points de l'élève numéro 3
select sum(points) from resultats where num_eleve = 3 ;
65
fonctions ensemblistes (remarques)
• L'utilisation d'une des fonctions dans la clause de sélection empêche d'utiliser autre chose
que ces fonctions dans le reste de la clause
select num_eleve, num_cours, max(points) from resultats;
ORA-00937 : not a single-group group function
• Avec SUM et AVG l'argument doit être de type numérique. Avec les autres, le type peut être
caractère ou date
• Les valeurs NULL sont éliminées sauf pour COUNT(*)
• Documentation Oracle sur les fonctions d'agrégation et plus particulièrement COUNT, AVG,
MAX, MIN et SUM
la spécification CAST
<cast specification> : := CAST ( <cast operand> AS <cast
target> )
<cast operand> : := <value expression>99 | <implicitly typed
value specification>
<cast target> : := <domain name> | <data type>
<implicitly typed value specification> : := <null
specification> | <empty specification>
<null specification> : := NULL
• SQL est fortement typé ñ besoin de pouvoir changer le type d'une expression
• Déjà utilisé dans le chapitre sur le DDL aux slides 72 et ??
• Oracle possède un certain nombre de règles de conversion et de fonctions de conversion
• Documentation Oracle sur la fonction CAST
l'expression CASE (1)
<case expression> : := <case abbreviation> | <case
specification>109
<case abbreviation> : := NULLIF ( <value expression>99 , <
value expression>99 )
| COALESCE ( <value expression>99 { , <value expression>
99 } )
Techniques Informatiques
108
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• COALESCE renvoie la première expression non nulle de la liste
• NULLIF compare les deux expressions. Si égales, elle renvoie NULL sinon elle renvoie l'expression
1
• Documentation Oracle sur NULLIF et COALESCE
l'expression CASE (1, exemples)
• Si on a un facteur de réduction on l'utilise, sinon on prend le prix de base. S'il n'y a pas de
prix, on fixe un prix standard de 100
SELECT id, reduction, prix_base, COALESCE(reduction*prix_base
, prix_base, 100) "Sale" FROM produit;
ID REDUCTION PRIX_BASE
Sale
-- --------- --------- ---------1
0.9
50
45
2
50
50
3
100
l'expression CASE (2)
<case specification> : := <simple case> | <searched case>
<simple case> : := CASE <case operand>
{ <simple when clause> }
[ <else clause> ]
END
<case operand> : := <value expression>99
<simple when clause> : := WHEN <when operand> THEN <result>
<when operand> : := <value expression>99
<result> : := <result expression> | NULL
<result expression> : := <value expression>99
<else clause> : := ELSE <result>
<searched case> : := CASE
{ <searched when clause> }
[ <else clause> ]
END
<searched when clause> : := WHEN <search condition> THEN <
result>
• Correspond au switch-case du C mais possède une valeur et est plus générale
• Avec Oracle, on utilise la fonction DECODE
l'expression CASE (2, exemples)
• Affichage de résultats (TB, B, S, …) en toutes lettres
select cote from resultat;
TB
B
S
Sselect decode(cote, 'TB', 'Très bien', 'B', 'Bien', 'S', '
Satisfaisant', 'I', 'Insuffisant', 'M', 'Mauvais') from
resultat;
Très bien
Techniques Informatiques
109
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
Bien
Satisfaisant
(null)
les sous-requêtes
<subquery> : := ( <query expression> )
<query expression> : := [ <with clause> ] <query expression
body>
<query expression body> : := <non-join query expression>111 |
<joined table>112
<with clause> : := WITH [ RECURSIVE ] <with list>
<with list> : := <with list element> { , <with list element> }
<with list element> : := <query name>
[ ( <with column list> ) ]
AS ( <query expression> )
[ <search or cycle clause> ]
• Mécanisme très puissant (en terme d'expressivité) du SQL
• Oracle ne permet pas d'indiquer les éléments optionnels de la classe with list element
• La clause WITH permet d'assigner un nom à une requête et d'y faire référence en de multiples
endroits dans la requête principale
les sous-requêtes (exemple 1)
• Obtenir les nom et prénoms des élèves qui pratiquent du surf au niveau 1
select nom, prenom from eleves where num_eleve in (select
num_eleve from activites_pratiquees where niveau = 1 and nom
= 'surf')
NOM
PRENOM
------------------------- ------------------------Brisefer
Benoit
Spring
Jerry
Tsuno
Yoko
• Obtenir le nom des élèves qui jouent dans l'équipe Amc indus
select nom from eleves where num_eleve in
(select num_eleve from activites_pratiquees where (niveau,
nom) in
(select niveau, nom from activites where equipe = 'Amc indus
'));
Brisefer
Génial
Tsuno
Dubois
Walthéry
Danny
les sous-requêtes (exemple 2)
Sous-requêtes corrélatives.
Techniques Informatiques
110
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Obtenir les nom et prénoms des élèves qui pratiquent du surf au niveau 1
select nom, prenom from eleves e
where (1, 'Surf') in (select ap.niveau, ap.nom
from activites_pratiquees ap
where ap.num_eleve = e.num_eleve);
NOM
PRENOM
------------------------- ------------------------Brisefer
Benoit
Spring
Jerry
Tsuno
Yoko
• Obtenir le nom, le poids et l'année des élèves dont le poids est supérieur au poids moyen
des élèves étant dans la même année d'études
select nom, poids, annee from eleves e_ext
where poids > (select avg(poids) from eleves e_int
where e_int.annee = e_ext.annee);
NOM
POIDS ANNEE
------------------------- ----- ----Spring
78
2
Lebut
75
2
Lagaffe
61
1
Walthéry
59
1
Danny
82
2
les sous-requêtes (exemple 3)
Sous-requêtes corrélatives.
• Obtenir les nom et prénoms des élèves qui pratiquent du surf au niveau 1
select nom, prenom from eleves
where 0 < (select count (*) from activites_pratiquees ap
where ap.num_eleve = eleves.num_eleve
and niveau = 1
and nom = 'Surf');
NOM
PRENOM
------------------------- ------------------------Brisefer
Benoit
Spring
Jerry
Tsuno
Yoko
les opérateurs ensemblistes
<non-join query expression> : :=
<non-join query term>
| <query expression body> UNION [ ALL | DISTINCT ] [ <
corresponding spec> ] <query term>
| <query expression body> EXCEPT [ ALL | DISTINCT ] [ <
corresponding spec> ] <query term>
<non-join query term> : := <non-join query primary>
| <query term> INTERSECT [ ALL | DISTINCT ] [ <
corresponding spec> ] <query primary>
<non-join query primary> : := <simple table> | ( <non-join
query expression> )
<simple table> : := <query specification>92 | ...
Techniques Informatiques
111
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Définit les opérateurs ensemblistes
• Avec Oracle, l'opérateur EXCEPT s'appelle MINUS. La syntaxe est plus réduite pour Oracle
l'opérateur UNION
• UNION effectue l'union ensembliste (rien ou mot-clé DISTINCT) des tables générées par les
requêtes
• ALL indique que les doublons doivent être gardés
• Attention, les tables doivent êtres union-compatibles
• Obtenir pour chaque professeur son nom et sa spécialité. Si spécialité inconnue, on affiche
****
select nom, specialite from professeurs where specialite is
not null
union
select nom, '****' from professeurs where specialite is null;
Bolenov réseau
Bottle poésie
Francesca ****
Pastecnov sql
Pucette sql
Selector sql
Tonilaclasse poo
Vilplusplus poo
l'opérateur INTERSECT
• Obtenir les nom et prénom des élèves pesant moins de 45 kilos et inscrits en 1ère année
select nom, prenom from eleves where poids < 45
intersect
select nom, prenom from eleves where annee = 1 ;
Brisefer Benoit
Génial Olivier
la jointure
<joined table> : :=
<cross join>112
| <qualified join>113
| <natural join>114
| <union join>115
• Documentation Oracle sur les jointures
le produit cartésien
<cross join> : := <table reference>93
primary>93
CROSS JOIN <table
• Même chose qu'indiquer plusieurs tables dans la clause FROM. Cfr. slide 227
Techniques Informatiques
112
HEPL 2014–2015
create
where
create
where
select
2500
select
2500
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
table table_1 as (select rownum as id from all_objects
rownum between 1 and 50);
table table_2 as (select rownum as id from all_objects
rownum between 1 and 50);
count(*) from table_1 cross join table_2;
count(*) from table_1, table_2;
la jointure qualifiée
<qualified join> : := <table reference> [ <join type> ] JOIN <
table reference> <join specification>
<join type> : := INNER | <outer join type> [ OUTER ]
<outer join type> : := LEFT | RIGHT | FULL
<join specification> : := <join condition> | <named columns
join>
<join condition> : := ON <search condition>
<named columns join> : := USING ( <join column list> )
<join column list> : := <column name list>
les jointures internes
• Il s'agit des jointures les plus communes et de la jointure par défaut
• Jointure de deux tables ne contenant que les lignes qui satisfont la condition
• Le mot-clé INNER est facultatif
• Deux types de spécifications :
– Soit, on nomme les colonnes avec USING. Il s'agit d'une équijointure. Peut être exprimé
avec ON
– Soit, on indique la condition à satisfaire avec ON
jointure interne avec USING (exemple)
• Obtenir le nom et le prénom des élèves qui pratiquent du surf au niveau 1
select eleves.nom, eleves.prenom from eleves inner join
activites_pratiquees using (num_eleve) where niveau = 1 and
activites_pratiquees.nom = 'Surf' ;
Brisefer
Benoit
Spring
Jerry
Tsuno
Yoko
ou
select eleves.nom, eleves.prenom from eleves inner join
activites_pratiquees on eleves.num_eleve =
activites_pratiquees.num_eleve where niveau = 1 and
activites_pratiquees.nom = 'Surf' ;
ou
Techniques Informatiques
113
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
select eleves.nom, prenom from eleves, activites_pratiquees
where eleves.num_eleve = activites_pratiquees.num_eleve and
niveau= 1 and activites_pratiquees.nom = 'Surf' ;
la jointure naturelle
<natural join> : := <table reference> NATURAL [ <join type> ]
JOIN <table primary>
• La jointure naturelle est une équijointure sur toutes les colonnes de même nom
• Cette opération est très courante
la jointure naturelle (exemples)
• Obtenir le nom et le prénom des élèves qui pratiquent du surf au niveau 1. Ce problème peut
être solutionné par jointure naturelle après renommage
select nom, prenom from eleves natural inner join (select
num_eleve, nom as acti_nom, niveau from activites_pratiquees)
where niveau = 1 and acti_nom = 'Surf' ;
• Obtenir le nom des cours donnés par Bottle
with j1 as (select * from professeurs natural join charge)
select cours.nom from j1 join cours using (num_cours) where
j1.nom = 'Bottle' ;
Réseau
Sgbd
l'auto-jointure
• Jointure d'une table avec elle-même
• Il est nécessaire de qualifier les tables explicitement
• Exemple : obtenir les paires de noms de professeurs qui ont la même spécialité
select x.nom, y.nom from professeurs x, professeurs y where x
.specialite = y.specialite and x.nom < y.nom;
Pucette
Selector
Pastecnov
Selector
Tonilaclasse
Vilplusplus
Pastecnov
Pucette
la jointure externe
• Le résultat contient les lignes de :
– La jointure interne sur les deux mêmes tables
– Les lignes de la première table (LEFT OUTER JOIN), de la seconde table (RIGHT OUTER
JOIN) ou des deux tables (FULL OUTER JOIN) qui n'ont pas de correspondances dans
l'autre table
Techniques Informatiques
114
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
la jointure externe (exemple, 1)
• Cfr. [4], pages 113 et 114
• Table des employés
select * from employes
NUM NOM
N_CONJ
--- ---------- -----1 Julie
1
2 Jean
3 Rik
4 Steve
2
• Table des conjoints
select
N_CONJ
-----1
2
* from conjoints
SEXE
---M
F
la jointure externe (exemple, 2)
• Jointure naturelle interne
select n_conj, num, nom from employes natural inner join
conjoints
N_CONJ NUM NOM
------ --- ---------1
1 Julie
2
4 Steve
• Jointure naturelle externe gauche
select n_conj, num, nom from employes natural left outer join
conjoints
N_CONJ NUM NOM
------ --- ---------1
1 Julie
2 Jean
3 Rik
2
4 Steve
la jointure union
• Ne donne que les lignes des deux tables qui ne possèdent pas de correspondance dans l'autre
table
• t1 UNION JOIN t2 est la même chose que
( t1 FULL OUTER JOIN t2 ) EXCEPT ( t1 INNER JOIN t2 )
• Inconnu d'Oracle
Techniques Informatiques
115
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
les quantificateurs
<quantified comparison predicate> : := <row value expression>
96 <comp op>96 <quantifier> <table subquery>93
<quantifier> : := <all> | <some>
<all> : := ALL
<some> : := SOME | ANY
• Correspond au quantificateur existentiel (D) et au quantificateur universel (@)
le quantificateur existentiel (ANY)
• Vrai si pour au moins une des valeurs de la sous-requêtes la comparaison est vraie. Faux
sinon
• Synonyme de SOME
• Obtenir le nom et le poids des élèves de 1ère année plus lourds qu'un élève quelconque de
2ème année
select nom, poids from eleves where annee = 1
and poids > any (select poids from eleves where annee = 2);
NOM
POIDS
------------------------- ----Lagaffe
61
• Obtenir le nom des élèves qui pratiquent du surf au niveau 1
select nom from eleves where num_eleve = any
(select num_eleve from activites_pratiquees where niveau = 1
and nom = 'Surf');
Brisefer
Spring
Tsuno
le quantificateur universel (ALL)
• Vrai si la comparaison est vraie pour toutes les valeurs de la sous-requete
• Ou si la sous-requête génère une table vide
• Obtenir le nom et le poids des élèves de 1ère année plus lourds que n'importe quel élève de
2ème année
select nom, poids from eleves where annee = 1
and poids > all (select poids from eleves where annee = 2);
0 rows selected
clause ORDER BY
<direct select statement : multiple rows> : := <query
expression> [ <order by clause> ]
<order by clause> : := ORDER BY <sort specification list>
<sort specification list> : := <sort specification> { , <sort
specification> }
Techniques Informatiques
116
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
<sort specification> : := <sort key> [ <collate clause> ] [ <
ordering specification> ]
<sort key> : := <value expression>99
<ordering specification> : := ASC | DESC
• Utilisé pour trier le résultat d'une requête
• Toutes valeurs NULLs sont identiques
• NULL est plus petit ou plus grand que n'importe quelle valeur4
clause ORDER BY (exemple 1)
• Obtenir la liste des élèves classés par année et par ordre alphabétique
select nom, prenom, annee
NOM
------------------------Brisefer
Génial
Lagaffe
Tsuno
Walthéry
Danny
Dubois
Jourdan
Lebut
Spring
from eleves order by annee, nom;
PRENOM
ANNEE
------------------------- ----Benoit
1
Olivier
1
Gaston
1
Yoko
1
Natacha
1
Buck
2
Robin
2
Gil
2
Marc
2
Jerry
2
ou
select nom, prenom, annee from eleves order by 3, 1 ;
clause ORDER BY (exemple 2)
• Afficher en ordre décroissant les points de Tsuno obtenus dans chaque cours sur 100
select cours.nom, points * 5 from resultats r, eleves e,
cours c
where e.num_eleve = r.num_eleve
and r.num_cours = c.num_cours
and e.nom = 'Tsuno'
order by 2 desc;
NOM
POINTS*5
-------------------- ---------Sgbd
65
Analyse
65
Sgbd
32.5
Réseau
25
clause GROUP BY
<group by clause> : := GROUP BY <grouping specification>
<grouping specification> : :=
4 Dans
le tri effectué par ORDER BY, pas dans les comparaisons.
Techniques Informatiques
117
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
<grouping column reference>
| ...
<grouping column reference> : := <column reference> [ <collate
clause> ]
• Permet de grouper les lignes de table pour lesquelles les colonnes de groupement sont égales
en une seule ligne
• ñ chaque item de la select list doit fournir une seule valeur par groupe
clause GROUP BY (exemple)
• Obtenir pour chaque élève de 1ère année son nom et sa moyenne
select nom, avg(points) from eleves natural inner join
resultats
where annee = 1
group by eleves.nom;
NOM
AVG(POINTS)
------------------------- ----------Génial
9.5
Tsuno
9.375
Walthéry
15.875
Brisefer
13.375
Lagaffe
10.375
• Obtenir le maximum parmi les totaux de chaque élèves
select max(points)
from (select sum(points) as points
from resultats
group by num_eleve);
MAX(POINTS)
----------65
clause HAVING
<having clause> : := HAVING <search condition>94
• Permet de filtrer les groupes obtenus par la clause GROUP BY
• HAVING est aux groupes ce que WHERE est aux lignes
clause HAVING (exemple)
• Obtenir la moyenne des points de chaque élève de 1ère année dont le total des points est
supérieur à 40
select nom, avg(points) from eleves natural inner join
resultats
where annee = 1
group by nom
having sum (points) > 40 ;
NOM
AVG(POINTS)
------------------------- -----------
Techniques Informatiques
118
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Walthéry
Brisefer
Lagaffe
Ludovic Kuty
15.875
13.375
10.375
10.3 INSERT
l'instruction INSERT
<insert statement> : := INSERT INTO <insertion target> <insert
columns and source>
<insertion target> : := <table name>
<insert columns and source> : := <from subquery> | <from
constructor> | ...
<from subquery> : :=
[ ( <insert column list> ) ]
...
<query expression>110
<from constructor> : :=
[ ( <insert column list> ) ]
...
<contextually typed table value constructor>
<contextually typed table value constructor> : :=
VALUES ( <value expression>99
{ , <value expression>99 } )
• Attention, la syntaxe a été volontairement simplifiée
• Documentation Oracle sur l'instruction INSERT
• Ne pas oublier le COMMIT
l'instruction INSERT (exemple)
create table a (num1 number primary key, num2 number default
20, num3 number default 30);
insert into a values (1, 1, 1);
insert into a (num1, num2) values (2, 2);
insert into a (num1) values (3);
insert into a (num1, num3) values (4, 4);
insert into a select rownum + 4,rownum + 4,rownum + 4
from all_objects
where rownum between 1 and 3 ;
select * from a ;
NUM1 NUM2 NUM3
---- ---- ---1
1
1
2
2
30
3
20
30
4
20
4
5
5
5
6
6
6
7
7
7
ROWNUM
Techniques Informatiques
119
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
• Attention, la pseudo-colonne ROWNUM renvoie un numéro pour chaque ligne sélectionnée
par une requête.
• La sélection se fait donc avant d'attribuer une valeur à ROWNUM.
• Par conséquent, la requête ci-dessous ne renvoie aucune ligne. En effet :
– La première ligne renvoyée a un ROWNUM de 1. La condition est fausse.
– La seconde ligne renvoyée est la première ligne de la requête. La condition est fausse.
– Et ainsi de suite jusqu'à la dernière ligne.
SELECT * FROM employees WHERE ROWNUM > 1 ;
10.4 UPDATE
l'instruction UPDATE
<update statement : searched> : :=
UPDATE <target table>
SET <set clause list>
[ WHERE <search condition>94 ]
<set clause list> : := <set clause> { , <set clause> }
<set clause> : :=
<update target> <equals operator> <update
source>
| ...
<update target> : := <column name> | ...
<update source> : := <value expression>99
| ...
• Permet de modifier des données
• Attention, la syntaxe a été volontairement simplifiée
• Documentation Oracle sur l'instruction UPDATE
• Ne pas oublier le COMMIT
l'instruction UPDATE (exemple)
• Augmenter de 10% les points de Lagaffe dans le cours Sgbd de 2ème année
update resultats set points = points * 1.10
where num_eleve = (select num_eleve
from eleves
where nom = 'Lagaffe')
and num_cours = (select num_cours
from cours
where nom = 'Sgbd'
and annee = 2);
select points from resultats where ...
12.1
Techniques Informatiques
120
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Ludovic Kuty
10.5 DELETE
l'instruction DELETE
<delete statement : searched> : := DELETE FROM <target table> [
WHERE <search condition>94 ]
• Permet d'effacer des données
• Documentation Oracle sur l'instruction DELETE
• Ne pas oublier le COMMIT
l'instruction DELETE (exemple)
• Supprimez tous les résultats concernant les cours donnés par Pucette
delete from resultats
where num_cours
in (select num_cours
from charge natural inner join professeurs
where nom = 'Pucette');
40 rows deleted
Techniques Informatiques
121
HEPL 2014–2015
10. Langage de Manipulation de Données (LMD)
Techniques Informatiques
Ludovic Kuty
122
HEPL 2014–2015
Bibliographie
Ludovic Kuty
Bibliographie
[1] C. J. Date An Introduction to Database Systems. Addison-Wesley, 8ème édition, 2004. éditeur,
amazon.
[2] C. J. Date Database In Depth. O'Reilly, 1ère édition, 2005. éditeur, amazon.
[3] R. Ramakrishnan et J. Gehrke Database Management Systems. McGraw-Hill, 2ème édition,
2000. amazon.
[4] Pierre Delmal SQL2 -- SQL3, applications à Oracle. De Boeck, 3ème édition, 2001. éditeur,
amazon.
[5] Pierre Delmal SQL2, de la théorie à la pratique. De Boeck, 2ème édition, 1995.
[6] Batini, Ceri, Navathe Conceptual Database Design. Addison-Wesley, 1ère édition, 1991. éditeur,
amazon.
[7] S. Bagui et R. Earp Database Design Using Entity-Relationship Diagrams. Auerbach Publications,
1ère édition, 2003. amazon.
[8] Jim Melton et Alan R. Simon SQL : 1999 - Understanding Relational Language Components.
Morgan Kaufmann, 2ème édition, 2001. éditeur, amazon.
[9] Thomas Kyte Expert Oracle Database Architecture : 9i and 10g Programming Techniques and Solutions. APress, 1ère édition, 2005. éditeur, amazon.
[10] Sam R. Alapati Expert Oracle Database 10g Administration. APress, 1ère édition, 2005. éditeur,
amazon.
[11] Osmar R. Zaïane CMPT 354 Database Systems and Structures. Simon Fraser University, 1998.
URL.
Techniques Informatiques
123
Téléchargement