Vous êtes sur la page 1sur 91

BASES DE D ONNÉES

AVANCÉES
PLAN DES COURS
 Rappel: Fondements des bases de données PL/SQL: éléments de base du langage
 Le langage SQL Curseurs
Création de table Déclencheurs (triggers)
Requêtes simples Exceptions
Requêtes sur plusieurs tables  Évaluation et optimisation des requêtes
Mises-à-jour  Concurrence d'accès et reprise
 SQL avancé
Le contrôle d’accès
Les vues SQL
Extensions de la structure des requêtes
SFW
Les requêtes récursives
Les prédicats
Les procédures SQL
2
Le catalogue
 PL/SQL
SOURCES DU COURS

 Georges Gardarin. Bases de données. Eyrolles

 Witold Litwin. Cours «Bases de Données». Univ. Paris-Dauphine


 Serge Abitboul. Cours «Evaluation et optimisation des requêtes».
INRIA Saclay

3
LES SGBDS
BASE DE DONNÉES

 Une base de données est un ensemble structuré de données


(1) enregistrées sur des supports accessibles par ordinateur
(2)pour satisfaire simultanément plusieurs utilisateurs (3)
de manière sélective (4) en un temps opportun (5).
(1) : Organisation et description de données

(2) : Stockage sur disque

(3) : Partage des données

(4) : Confidentialité

(5) : Performance
5
SGBD
Un SGBD (Système de Gestion de Bases de Données) est un
logiciel qui permet de manipuler les informations stockées
dans une BD.

BD

SGBD
6
SGBD
 Un SGBD est un intermédiaire entre les utilisateurs et les fichiers
physiques

 Plus besoin de travailler directement sur les fichiers physiques (tels qu’ils
sont enregistrés sur disque).

BD =Fichiers BD =tables

Fichier 1 Fichier 1 Programme1

Fichier 2 Programme Fichier 2 SGBD Programme1

Fichier 3 Fichier 3 Programme1


….

….

7
SGBD
 Un SGBD permet de décrire les données et les liens entre elles
d’une façon logique sans se soucier d u comment cela va se faire
physiquement dans les fichiers.
On parle alors d’image logique de la base de données, (ou aussi description
logique ou conceptuelle ou encore de schéma logique).

Image
physique

Fichiers physiques
Image logique
8
OBJECTIFS D’UN SGBD
 Description des données
Codification et structuration, grâce au Langage de Description
de Données (LDD)
 Manipulation des données
Insertion, mise à jour et interrogation
 Mise en œuvre à l ’aide d’un Langage de Manipulation de Données
(LMD)
 S.Q.L (Structured Query Language) : Langage standard

 Contrôle des données


Intégrité
 vérification de contraintes d'intégrité

Confidentialité
 contrôle des droits d'accès, autorisation
 Partage
Une BD est partagée entre plusieurs utilisateurs en même temps
⇒ contrôle des accès concurrents (notion de transaction)
 L'exécution d'une transaction doit préserver la cohérence de la BD9
 Sécurité
Reprise après panne, journalisation
OBJECTIFS D’UN SGBD
 Efficacité d’accès aux données
Optimisation : temps de réponse, débit, ...
Optimisation des opérations d’E/S
 Indépendance physique
Pouvoir modifier les structures de stockage ou les index sans que cela
ait de répercussion au niveau des applications
Les disques, les méthodes d’accès, les modes de placement, le codage
des données ne sont pas apparents
 Indépendance logique
Permettre aux différentes applications d’avoir des vues différentes
des mêmes données
Permettre au DBA de modifier le schéma logique sans que cela ait de
répercussion au niveau des applications
10
TYPES DE SGBD
 L'organisation des données au sein d'une BD a une
importance essentielle pour faciliter l'accès et la mise à
jour des données
 Il existe plusieurs types de SGBDs par modèle de données :
Modèle hiérarchique
Modèle réseau
Modèle relationnel
Modèle objet

11
TYPES DE SGBD
 Modèle hiérarchique
Schéma logique représenté par un ARBRE
 Nœud : segment (regroupement de données)
 Arc : lien hiérarchique 1:N

Choix possible entre plusieurs arborescences


 Le segment racine est choisi en fonction de l'accès souhaité

Exemple

12
TYPES DE SGBD
 Modèle réseau
Schéma logique représenté par un GRAPHE
N œ u d : article (représente une entité)
 Arc : lien hiérarchique 1:N

Langage navigationnel pour manipuler les données


Exemple

13
TYPES DE SGBD

 Modèle relationnel
Schéma logique représenté par des RELATIONS

 Les relations représentent les entités d u monde réel (comme des


personnes, des objets, etc.) ou les associations entre ces entités

 Passage d'un schéma conceptuel E/A à un schéma relationnel


une entité est représentée par la relation:
 nom_de_l'entité (liste des attributs de l'entité)

une association M:N est représentée par la relation :


 nom_de_l'association (liste des identifiants des entités participantes, liste des
14

attributs de l'association)
BREF HISTORIQUE DES PRINCIPAUX SGBDS

1ère génération 1950 – 65


 SGF, SGF généralisés avec les langages booléens de

manipulation.
2ème génération 1965 - 70
 SGBD navigationnel

 Hiérarchique (IMS), Réseau (Codasyl), Pseudo-


relationnel
3ème génération 1969 - …
 SGBD relationnel (DB2, Oracle, Sybase, MsAccess…)

SGBD OO 1990 - 1999


 En pratique : une impasse (O2, Objectstore, Objectivity..)

 O2 a fait faillite en 1999


15
SGBD relationnel – objet (RO) 1993 -…
QUEL SGBD CHOISIR ?

 Produits dont la richesse fonctionnelle est variable

Mais, l’ensemble d es fonctionnalités est rarement


nécessaire.

 Critères de choix :

Fonctionnalités (de quoi avons-nous besoin?)

Ressources (disques, mémoire, CPUs, Transactions par


secondes, nombre de connexions simultanées…)

Support technique
16
Type d’accès aux données (OLTP,décisionnel…)
QUELQUES SGBD DU MARCHÉ

17
LES SGBDR DU MARCHÉ

Deux groupes principaux :


 Fournisseurs « historiques » :
 DB2,
 Oracle,
 Microsoft SQL Server,
 Access…
 Open source :
 MySQL,
 PostGreSQL,…
18
FOURNISSEURS DE SGBDS
 Microsoft SQL Server
Administration aisée
Une des bases les plus performantes sous Windows en configuration par défaut
Optimiseur statistique enrichi à flux tendu
Réplication intégrée
Langage T-SQL très convivial
Sous-SELECT possible dans clause FROM
Gestion de l'indexation textuelle
Niveau de SQL très près de la norme SQL et implémente presque toutes les
possibilités de SQL
Services Web
Support XML
Compression des données et des sauvegardes
Inconvénients:
 Distributions fortement liées au système d'exploitation

 Mono-plateforme (MS Windows)

 Pas certifié SQLJ, pas d'intégration Java, orientation C#


27
FOURNISSEURS DE SGBDS
 DB2 (IBM)
Nombreuses fonctionnalités
Inconvénients:
 Journalisation gourmande en disque
 Gestion des utilisateurs limitative
 Complexité d u langage procédural

 SyBase Adaptive Server Enterprise


Père de MS-SQLServer
Peu gourmand en ressources comparativement à ses concurrents Oracle et DB2.
T-SQL suffisamment proche de celui de MS-SQL pour offrir une alternative Unix avec
portage assez aisé
Sans doute l'un des optimiseurs les plus intelligents d u marché.
Prise directe sur les tables système
Inconvénients:
 Gestion - optionnelle - des accès via authentification réseau assez complexe.
 Le T-SQL s'enrichit moins vite que sous MS-SQL

20
FOURNISSEURS DE SGBDS
 Oracle
Puissant
Portabilité
Procédures stockées en PL/SQL
Accès aux données systèmes via des vues
Gestion de très grande quantité de données
Services Web, Support XML…
Inconvénients:
 Prix exorbitant
 Forte demande de ressources

21
SGBDS OPEN SOURCE
o MySQL
Solution très courante en hébergement public
Très bonne intégration dans l'environnementApache/PHP
OpenSource, bien que les critères de licence soient de plus en plus difficiles à supporter
Facilité de déploiement et de prise en main
Inconvénients:
o Ne supporte qu'une faible partie des standards SQL
o Manque de robustesse avec de fortes volumétries
o Pas d'héritage de table
o Pas de vue matérialisée

o PostgresSQL
Fiable et relativement performant
Simple d’utilisation et d’administration
Inconvénients:
o Sauvegarde peu évolué
o Pas de notion de rôles
o Pas de services web, XML… 30
LES BASES DE DONNÉES RELATIONNELLES
DÉMARCHES DE CONSTRUCTION D’UNE BD
Modèle Entité/Association
 Déterminer les entités, les associations et les propriétés
Une entité est un élément ou un objet concret ou abstrait d u monde réel
qui existe.
Une association modélise un ensemble de liens logiques entre deux ou
plusieurs occurrences d’entités, ayant intérêt significatif pour le système à
représenter.
Une propriété est une donnée élémentaire qu’on perçoit sur une
entité et sur une association
 Calculer les cardinalités
Une cardinalité caractérise la participation d’une entité à une
association. Elle représente le nombre d’occurrences d’une association
pour chaque occurrence d’entité qu’elle relie.
Exemple :

Enseignant Cours
Enseigner 32
nom 0,n 1,n Numéro cours
Titre cours
Prénom
Age
DÉMARCHES DE CONSTRUCTION D’UN BD
Modélisation E/A

Interview
Document… Modélisation E/A

Schéma logique
en E/A

Transformation en
relationnel

33
DÉMARCHES DE CONSTRUCTION D’UN BD

34
BD : CONCEPTS DE BASE
Colonne ouAttribut
Table ou relation
Ligne,
enregistrement
ou tuple
Etudiant CIN Nom Prénom Ville
40013 Salah Atigue Tunis
40302 Ali Toto Sfax
41200 Amina Titi Sousse

 Domaine
Les valeurs que peut prendre un attribut est appelé le domaine de cet attribut
 Relation
Un sous-ensemble d u produit cartésien d'une liste de domaines
caractérisé par un nom unique
 représentée sous forme de table à deux dimensions

 Attribut
Une colonne dans une relation caractérisé par un nom et dont les
valeurs appartiennent à un domaine
 Tuple 35
Une ligne d'une relation correspondant à un enregistrement
Les nuplets d'une relation sont tous différents
LE LANGAGE SQL
HISTORIQUE
 1964 : IBM développe le GUAM pour le projet Apollo (NASA)
 1966 : Première BD hiérarchique commerciale d u marché d’IBM

 1970 : Dr. E. F. Codd d’IBM propose le modèle relationnel

 1977 : Larry Ellison, Bob Miner et Ed Oates fondent Oracle

 1985 : l’ANSI adopte SQL comme langage de requête standard

 1992 : SQL-2

 1993 : Sortie d’Access

 1995 : Sortie de Postgres95

 1996 : Sortie de MySQL

 1998 : SQL Server 7 disponible

 1999 : SQL-3 et sortie d’Oracle8i

 2000 : Sortie d’Oracle 9i 37

 2006 : Oracle 10g


SQL (STRUCTURED QUERY LANGUAGE)

 SQL (Structured Query Language)


Inventé à IBM San Jose, 1974 (Boyce & Chamberlin) pour les systèmes
relationnels

Basé sur le calcul de tuple & l’algèbre relationnelle

 SQL est à la fois un langage de :


Définition des données
 DDL : Data Definition Language

Manipulation des données


 DML : Data Manipulating Language

Contrôle de l’accès aux données


 DCL : Data Control Language
30
SQL - DDL

 Un DDL autorise toutes les actions propres à la définition


des objets (tables, vues, utilisateurs, index, etc.) :

Créer un objet (CREATE)

Modifier la structure d’un objet (ALTER)

Détruire un objet (DROP)

 Exemple :
CREATE TABLE Eleves (Nom CHAR(15) PRIMARY KEY,
Prenom VARCHAR(25) NOT NULL);

31
SQL - DML

 Un DML autorise toutes les actions propres à la


manipulation des données :

Insertion de nouvelles données (INSERT)

Suppression de données (DELETE)

Mise à jour de données (UPDATE)

Interrogation de la base (SELECT)

 Les commandes DML sont la partie centrale de SQL

 Exemple :
SELECT DISTINCT Nom, Prenom
40

FROM Eleves WHERE UPPER(Nom) LIKE ‘L%’;


SQL - DCL

 Le DCL autorise toutes les actions propres au contrôle de la


base de données
notamment la gestion des droits d’accès à la base de données ou à
un objet précis

 GRANT : accorder un privilège

 ou REVOKE : supprimer un privilège

la gestion des transactions


 COMMIT : valider toutes les transactions depuis le dernier COMMIT

 ou ROLLBACK : annuler toutes les transactions effectuées dep uis le


dernier COMMIT), 41

etc...
CREATION D'UNE TABLE

1. TABLES, COLONNES ET DOMAINES

2. LES CONTRAINTES D’INTÉGRITÉ

3. MODIFICATION & SUPPRESSION D'UNE TABLE

34
1. TABLES, COLONNES ET DOMAINES
DÉFINITION DE DONNÉES

 Il s’agit des commandes pour créer, modifier et supprimer


les éléments d u schéma
table, vue, index...
 CREATE TABLE / VIEW
CREATE TABLE : création d u schéma physique des tables dans la
méta- base.
CREATE VIEW : créer une vue particulière sur les données à partir
d’un SELECT => table dérivée
 DROP TABLE / VIEW :
suppression physique et logique de la table ou de la vue
 ALTER TABLE / VIEW :
modification d u schéma physique d’une table ou de la vue

35
1. TABLES, COLONNES ET DOMAINES
CRÉATION DE TABLE

CREATE TABLE nom-table


(<nom-col1> type_col(longueur) [DEFAULT valeur] [contrainte_col1],
<nom-col2> type_col(longueur) [DEFAULT valeur] [contrainte_col2],
……
[contrainte_table1], [contrainte_table2],….
);

OU

CREATE TABLE nom-table (<nom-col1>, <nom-col2>,. ..) AS requête-SQL ;

Légende :
[option]
mot en capitale : mot clé 44
1. TABLES, COLONNES ET DOMAINES
CRÉATION DE TABLE
o Deux types CREATE TABLE :

CREATE TABLE Doctorant ( nom


VARCHAR(20),
prénom VARCHAR(15),
année_insc DECIMAL(4) DEFAULT 2006 ) ;

=> Création du schéma

CREATE TABLE Doctorant


AS SELECT nom, prénom, année_inscr FROM
Etudiant WHERE statut='Doctorant' ;

=> Création du schéma et des tuples

37
1. TABLES, COLONNES ET DOMAINES
LES TYPES DE BASE
Pour décrire les colonnes d’une table, Oracle fournit les types
prédéfinis suivants:

Type chaine de caractère

38
1. TABLES, COLONNES ET DOMAINES
LES TYPES DE BASE

39
1. TABLES, COLONNES ET DOMAINES
RÈGLES DE CRÉATION

 Nom_table: toutes les tables de la base doivent avoir des


noms différents
 Définition des attributs:

Donner un nom pertinent à la colonne


Affecter un type à la colonne (Cf les types de données)
Préciser les valeurs éventuelles par défaut de la
colonne
Associer une contrainte éventuelle à la colonne

40
1. TABLES, COLONNES ET DOMAINES
LES DOMAINES

Définition d'un domaine :


create domain MONTANT decimal(9,2); create
domain MATRICULE char(10); create domain
LIBELLE char(32);

Utilisation d'un domaine :

create table CLIENT ( NCLI MATRICULE,


NOM LIBELLE,
ADRESSE char(60),
LOCALITE LIBELLE,
CAT char(2), COMPTE
49
MONTANT );
2. LES CONTRAINTES D’INTÉGRITÉ

 Les données de la base respectent un ensemble de


contraintes prédéfinies.
Ces conditions doivent toujours être respectées.

 Il existe 3 types d’intégrité:


Des règles générales (types de données, largeur maximum)
L’intégrité au niveau colonne (primary key, not null, default, unique,
check)

L’intégrité référentielle (contraintes d’inclusion) : associée à une clé


étrangère
42
2. LES CONTRAINTES D’INTÉGRITÉ

Contraintes de colonnes et de tables


Elles sont décrites lors de la création de la table:

 Contraintes de colonne

Création de colonne [CONSTRAINT <nom_contrainte>] type_contrainte

 Contraintes de table
Définies après la création de toutes les colonnes

Utiles quand une contrainte porte sur plusieurs colonnes

[CONSTRAINT <nom_contrainte>] type_contrainte (<colonne1>,[<colonne2>…])

43
2. LES CONTRAINTES D’INTÉGRITÉ

Contraintes de colonnes et de tables (suite)

Il est utile de donner un nom aux contraintes :

Documenter le message d’erreu r s’il y’a transgression de


contraintes d’intégrités

Documenter le dictionnaire de données


Faciliter l’activation, l’inhibition ou la suppression de la
contrainte

44
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : VALEUR PAR DÉFAUT

DEFAULT
➢Affecte une valeur par défaut à une colonne si on ne spécifie pas de valeur lors
de la création d'une ligne

➢ constante, variable (sysdate…), fonction SQL


➢ N’est pas réellement considérée comme une contrainte
➢ ne pas utiliser CONSTRAINT

create table CLIENT (


NCLI char(10) not null,
NOM char(32) not null,
ADRESSE char(60) not null,
LOCALITE char(30) not null default 'Paris', CAT
char(2) default 'B1',
COMPTE decimal(9,2) not null default 0.0
);
53

create domain MONTANT decimal(9,2) default 0.0;


2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : LES COLONNES OBLIGATOIRES

o Une colonne est facultative par défaut.


o Il faut déclarer explicitement les colonnes obligatoires

NOT NULL
➢ Obligation de donner une valeur à cette colonne

create table CLIENT ( NCLI char(10) not null,


NOM char(32) not null,
ADRESSE char(60) not null,
LOCALITE char(30) not null, CAT
char(2),
COMPTE decimal(9,2) not null
);

46
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES: UNIQUE

UNIQUE
➢ Interdit deux même valeurs pour une colonne (ou un ensemble de
colonnes)

➢ Index créé sur les colonnes concernées

CREATE TABLE Etudiant


( AVS CHAR(11) PRIMARY KEY ,
N°Etudiant CHAR(6) UNIQUE ,
nom VARCHAR(20) ,

prénom VARCHAR(30) , …
CONSTRAINT UNIQUE (nom, prénom) )
47
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES
CHECK (condition)
➢ S’applique à toutes les lignes de la table
 Expression conditionnelle valide évaluant un résultat booléen

CREATE TABLE Employé


( AVS CHAR(11) PRIMARY KEY,
nom VARCHAR(20) NOT NULL,
prénoms VARCHAR(30) ,
âge NUMERIC CHECK (âge>16 AND âge<70) ,
sexe CHAR CHECK (sexe IN ('M', 'F')) ,

salaire NUMERIC ,
commission NUMERIC,
CONSTRAINT checkSalaire 56

CHECK (salaire + commission <= 7000) )


2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT PRIMAIRE (1)

PRIMARY KEY

➢ Contrainte de colonne
[CONSTRAINT <nom_contrainte>] PRIMARY KEY

CREATE TABLE Pays


( nom VARCHAR(20) PRIMARY KEY,
capitale VARCHAR(20) …
)

57
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT PRIMAIRE (2)
➢ Contrainte de table
[CONSTRAINT <nom_contrainte>] PRIMARY KEY (<nom_colonne>)
 NOT NULL +UNIQUE
 Clé primaire d’une table
 peut concerner plusieurs colonnes
 peut être référencée par une clé étrangère
Il est obligatoire de déclarer une et une seule contrainte PRIMARY KEY
sur chaque table
CREATE TABLE CLIENT ( NCLI char(10) not null,
CLIENT
N OM char(32) not null, NCLI
ADRESSE char(60) not null, NOM
ADRESSE
LOCALITE char(30) not null, LOCALITE
CAT[0-1]
CAT char(2), COMPTE
COMPTE decimal(9,2) not null, id: NCLI

PRIMARY KEY (NCLI) );

CREATE TABLE Employé


( nom VARCHAR(30) , 58
prénom VARCHAR(30) ,
adresse VARCHAR(60) , …
CONSTRAINT Pk_emp PRIMARY KEY (nom, prénom))
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT SECONDAIRE

Candidate key

CLIENT
NCLI
NOM
ADRESSE
LOCALITE
CAT[0-1]
COMPTE
id: NCLI
id': NOM

create table CLIENT ( NCLI char(10) not null,


NOM char(32) not null,
ADRESSE char(60) not null,
LOCALITE char(30) not null,
CAT char(2),
COMPTE decimal(9,2) not null,
primary key (NCLI),
unique (NOM) ); 59
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT SECONDAIRE (1)
FOREIGN KEY
 Contrainte de colonne
[CONSTRAINT <nom_contrainte>] REFERENCES <nom_table>(<nom_colonne>)

CREATE TABLE Etudiant (N°E …)

CREATE TABLE Cours (NomCours …)

CREATE TABLE Suit


( N°Etud CHAR(9) CONSTRAINT fk_Etud REFERENCES Etudiant (N°E),
NomC VARCHAR(25) CONSTRAINT fk_cours REFERENCES Cours (NomCours),
CONSTRAINT pk_Suit PRIMARY KEY (N°Etud , NomC) 60

)
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT SECONDAIRE (2)
o Contrainte de table
[CONSTRAINT <nom_contrainte>] FOREIGN KEY <nom_colonne>
REFRENCES <nom_table>(<nom_colonne>)
•Relation de clé étrangère avec une ou plusieurs colonnes déclarées comme
clés primaires ou UNIQUE

• Valeurs des colonnes


• soit nulles
• soit valeurs existant dans une table référencés
• La contrainte peut également référencer une colonne dans la même table

CREATE table COMMANDE CLIENT


NCLI
(NCOM char(12) not null, COMMANDE NOM
NCLI char(10) not null, NCOM ADRESSE
DATECOM LOCALITE
DATECOM date not null, NCLI CAT[0-1]
PRIMARY KEY (NCOM), id: NCOM COMPTE
61
FOREIGN KEY (NCLI) REFRENCES CLIENT); ref:NCLI id: NCLI
2. LES CONTRAINTES D’INTÉGRITÉ
TYPES DE CONTRAINTES : IDENTIFIANT SECONDAIRE (3)

REFERENCES [schéma.]nomTablePere (colonne1 [,colonne2]…)


[ON DELETE { CASCADE | SET NULL | SET DEFAULT }]
[ON UPDATE { CASCADE | SET NULL | SET DEFAULT }]

▪ON DELETE : indique l'action à effectuer sur la table


référençant lors d'une suppression dans la table référencée.
▪ ON UPDATE : indique l'action à effectuer sur la table
référençant lors d'une modification dans la table référencée.
▪CASCADE :effacer ou mettre à jour les tuples correspondant
dans la table référençant.
▪SET NULL : le tuple cible est supprimé ou modifié et les tuples
clé étrangère associés sont initialisé à zéro.
▪SET DEFAULT : le tuple cible est supprimé ou modifié et les
tuples clé étrangère associés sont initialisé à leur valeur pa6r2
défaut.
2. LES CONTRAINTES D’INTÉGRITÉ

Conventions recommandées :
 Il n’est pas recommandé de définir des contraintes sans les
nommer (bien que cela soit possible),
 Si une contrainte n’est pas nommée, un nom est
automatiquement généré sous la forme suivante :
SYS_Cnnnnnn (n entier).
 Préfixer par pk_le nom d’une contrainte clé primaire, fk_
une clé étrangère, ck_ une vérification , un_ une unicité.
 Pour une contrainte clé primaire, suffixer du nom de la
table la contrainte (exemple pk_Pilote).
 Pour une contrainte clé étrangère, renseignez (ou abrégez)
les noms de la table source, de la clé, et de la table cible.
55
2. LES CONTRAINTES D’INTÉGRITÉ

Les contraintes peuvent être déclarées de deux manières:


 Contraintes de colonne: En même temps que la colonne
(valable pour les contraintes monocolonnes), ces
contraintes sont dites « en ligne »
 Contraintes de table: permet de définir des contraintes
non plus au niveau d’une colonne mais au niveau de la
table. Une contrainte de table peut donc faire intervenir
plusieurs colonnes
Définition des clés primaires composées
Définition des clés étrangères composées
Définition des contraintes CHECK impliquant différentes
colonnes
56
3. MODIFICATION & SUPPRESSION D'UNE TABLE : DROP TABLE

 Suppression complète de la table (structure et données):

DROP TABLE <nom_table> [CASCADE CONSTRAINTS|RESTRICT]

RESTRICT interdit la destru ction d’u n objet référencé (via une contrainte
d’intégrité, une vue,…) alors que CASCADE propage la destruction.

Attention, opération sous haute surveillance !


• la table ne doit plus être référencée par une clé étrangère; la table DETAIL
(ou sa clé étrangère vers COMMANDE) doit avoir été supprimée.

57
3. MODIFICATION & SUPPRESSION D'UNE TABLE : ALTER TABLE

 Modifier la définition d’une table :


 Changer le nom de la table
 RENAME
 Ajouter une colonne ou une contrainte
 ADD
 Modifier une colonne ou une contrainte
 MODIFY
 Supprimer une colonne ou une contrainte
 DROP
 Renommer une colonne ou une contrainte
 RENAME

58
EXEMPLES

ALTER TABLE distributeurs


ADD COLUMN adresse varchar(30);

ALTER TABLE distributeurs


DROP COLUMN adresse RESTRICT;
(RESTRICT indique une erreur en cas d'effacement d'une valeur correspondant à la clé)

ALTER TABLE distributeurs


RENAME COLUMN adresse TO city;

ALTER TABLE distributeurs


RENAME TO suppliers;

ALTER TABLE distributeurs ALTER COLUMN rue SET NOT NULL;

ALTER TABLE distributeurs ALTER COLUMN rue DROP NOT NULL;

ALTER TABLE distributeursADD CONSTRAINT verif_zip CHECK


67
(char_length(zipcode) = 5);

ALTER TABLE distributeurs DROP CONSTRAINT verif_zip;


Requêtes simples SQL

60
SELECT
SELECT nomStation
FROM Station
WHERE region = ’Antilles’

SELECT : la liste des attributs constituant le résultat.


FROM : la (ou les) tables dans lesquelles on trouve les
attributs utiles à la requête.
WHERE : les conditions que doivent satisfaire les n-
uplets de la base pour faire partie du résultat.
SELECT

SELECT élémentaire : SELECT liste_colonnes FROM liste_tables


Les expressions arithmétiques
Les alias
DISTINCT

Exemple:

SELECT libelle, prix / 6.56, ’Cours de l’euro = ’, 6.56


FROM Activite
WHERE nomStation = ’Santalba’

Résultat:
SELECT

SELECT élémentaire
SELECT liste_colonnes FROM liste_tables
◼ Les expressions arithmétiques

◼ Les alias

◼ DISTINCT

Exemple:

SELECT A.libelle, A.prix / 6.56 AS prixEnEuros,’Cours de l’euro = ’, 6.56


AS cours
FROM Activite A
WHERE A.nomStation = ’Santalba’
Résultat :
SELECT

SELECT élémentaire
SELECT liste_colonnes FROM liste_tables
◼ Les expressions arithmétiques

◼ Les alias

◼ DISTINCT

Exemple: Résultat :

SELECT libelle
FROM Activite

SELECT DISTINCT libelle


FROM Activite
Résultat :
Conditions plus complexes - in et between (1/2)

Limiter les données


SELECT liste_colonnes FROM liste_tables [WHERE condition(s)]
◼ La clause WHERE limite l'interrogation aux lignes qui remplissent les
conditions mentionnées.
◼ Les opérateurs : = , > , >= , < , <= , <>

 La condition BETWEEN
 Permet d'afficher les lignes en fonction d'une plage de valeurs
select NCLI
from CLIENT
where COMPTE between 1000 and 4000;
Conditions plus complexes - in et between (2/2)

La condition IN
Vérifie l'appartenance d'une donnée à une liste de valeurs

select NCLI
from CLIENT
where CAT in ('C1','C2','C3');

select NCLI
from CLIENT
where LOCALITE not in ('Toulouse','Breda');
Conditions plus complexes - Les masques
La condition LIKE
Recherche les chaînes de caractères valides à l'aide de caractères génériques
% représente n'importe quelle séquence de 0 ou plusieurs caractères

select NCLI '_' = un caractère


from CLIENT quelconque
where CAT like 'B_'; masques
select NPRO '%' = une chaîne
from PRODUIT quelconque
where LIBELLE like '%SAPIN%';

Un masque définit une famille de chaînes de caractères :

'B_' ⎯→'B1' '%SAPIN%' ⎯→ 'PL. SAPIN 200x20x2'


'Bd' 'Boite en SAPIN'
'B ' 'SAPIN VERNI'

'B_' ⎯→'xB' '%SAPIN%' ⎯→ 'Boite en Sapin'


'B' 'Achetez S A P I N !'
'B12'
Conditions plus complexes - les valeurs null
Les conditions NULL
La vérification de la valeur NULL est effectuée par les opérateurs IS
NULL et IS NOT NULL
Recherche des valeurs non attribuées
SELECT nom FROM employés WHERE ville IS NULL;

select NCLI null ne peut être comparé à rien,


from CLIENT même pas à lui-même !

where CAT = null;


NCLI

select NCLI
from CLIENT
where CAT is null;
NCLI
D063
K729

select NCLI
from CLIENT
where CAT is not null;
Le tri
La clause ORDER BY permet de trier les lignes

SELECT nom
FROM employés WHERE salaire >= 1000
ORDER BY salaire DESC

SELECT nom
FROM employés WHERE salaire >= 1000
ORDER BY salaire ASC
Les fonctions monolignes

Ces fonctions renvoient un résultat par ligne, elles permettent de manipuler des
éléments de données.
Elles acceptent des paramètres et renvoient une seule valeur
Elles peuvent être imbriquées
On distinguent des :

Fonctions alphanumériques Fonction de dates


▪ LPAD(exp, n, 'chaine') : Ajoute des ▪ CURDATE() : Renvoie la date
caractères à gauche système au format 'yyyy-mm-dd‘
▪ RPAD(exp, n, 'chaine') : Ajoute des
caractères à droite ▪ CURTIME() : Renvoie l'heure
▪ TRIM(exp) : Retire les espaces avant et système au format 'hh:mm:ss‘
après ▪ DATE_FORMAT(date, format) :
▪ REPLACE(exp, 'ch1', 'ch2') : Remplace Renvoie la date selon le format
ch1 par ch2 indiqué
Fonctions numériques ▪ YEAR(date)
▪ ROUND(exp, n) : Arrondit à la décimale Fonction de conversions
spécifiée
▪ TRUNCATE(exp, n) : Tronque à la
décimale spécifiée
▪ MOD(exp1, exp2) : Renvoie le reste de la 70
division de exp1 par exp2
Les fonctions multi-ligne

L'objectif est de donner des informations statistiques sur un ensemble


de lignes
AVG(exp) : moyenne des valeurs de l'expression
COUNT(exp) : nombre de valeurs non nulles
MAX(expr) : Valeur maximale
MIN(expr) : Valeur minimale
SUM(expr) : Somme des valeurs de l'expression
select 'Namur', avg (COMPTE) as Moyenne,
max (COMPTE) - min (COMPTE) as Ecart_max,
count (*) as Nombre
from CLIENT
where LOCALITE = 'Namur';

Namur Moyenne Ecart_max Nombre


le résultat ne comprend
Namur -2520 4580 4 qu'une seule ligne
Attention aux valeurs dupliquées

select count(NCLI)
from COMMANDE;

count(NCLI)

select distinct count(NCLI)


from COMMANDE;
count(NCLI)

select count(distinct NCLI)


from COMMANDE;
count(NCLI)

5
select count(NCLI) as Numeros,
count(NOM) as Noms,
count(LOCALITE) as Localites,
count(CAT) as Categories
from CLIENT;

Numeros Noms Localites Categories

16 16 16 16

select count(distinct NCLI) as Numeros,


count(distinct NOM) as Noms,
count(distinct LOCALITE) as Localites,
count(distinct CAT) as Categories
from CLIENT;

Numeros Noms Localites Categories

16 15 7 4
Attention aux ensembles vides

select count(*) as Nombre, sum(COMPTE) as Somme, max(CAT) as Max


from CLIENT
where LOCALITE = 'Alger';

Nombre Somme Max

0 <null> <null>
Groupement
Création de groupes
Les groupes sont créés par la clause GROUP BY

SELECT idService, count(nomEmp) FROM Employes


GROUP BY idService

• Exclure des groupes


La clause HAVING limite les groupes de la même
manière que les lignes pour WHERE
SELECT idService, sum(salaire) FROM Employes
GROUP BY idService
HAVING sum(salaire) > 3000;

Attention : La clause HAVING ne s’utilise qu’avec GROUP BY


Employes NumEmp NomEmp Salaire idservice
1 B 1000 1
2 A 1300 2
3 C 2000 2
4 D 1200 1

SELECT idService, sum(salaire) as somme FROM Employes


GROUP BY idService

idService somme
1 2200
2 3300

SELECT idService,sum(salaire) as somme FROM Employes


GROUP BY idService
HAVING sum(salaire) > 3000;

idService somme
2 3300
Requêtes sur plusieurs tables

77
Les jointures

Les jointures permettent d'afficher des données de plusieurs tables


sans conditions de jointure le produit cartésien est effectué
SELECT nom, libelé FROM employés, services
La condition de jointure s'écrit dans la clause WHERE
Le nom de table est nécessaire si le nom des colonnes est identique
SELECT nom, libel FROM employes, services
WHERE employes.numService = services.numService
Alias de table
Utilisation de préfixes désignant les tables
Permet de simplifier les interrogations
Améliore les performances
Évite les ambiguïtés sur les noms de colonnes
SELECT E.nom, S.libel FROM employes E, services S
WHERE E.numService = S.numService
78
Sous interrogation

Instruction SELECT imbriquée dans une clause d'une autre instruction


SELECT
Elle s'exécute en premier et son résultat est utilisé par la requête principale
SELECT liste_colonnes FROM liste_tables
WHERE expr IN (SELECT ....)

Exemple:

Dans quelle station pratique-t-on une activité au même prix qu’à Santalba ?

SELECT nomStation, libelle


FROM Activite
WHERE prix IN (SELECT prix FROM Activite
WHERE nomStation = ’Santalba’)
79
 Où (station, lieu) ne peut-on pas faire du ski ?
SELECT nomStation, lieu
FROM Station
WHERE nomStation NOT IN (SELECT nomStation
FROM Activite
WHERE libelle = ’Ski’)

 Quelle station pratique le tarif le plus élevé ?


SELECT nomStation
FROM Station
WHERE tarif >= ALL (SELECT tarif FROM Station)

 Quels sont les clients (nom, prénom) qui ont séjourné à Santalba?
SELECT C.nom, C.prenom
FROM Client C
WHERE EXISTS (SELECT * FROM Sejour S
WHERE S.station = ’Santalba’
AND S.idClient = C.id)
Prédicats de dénombrement
Test de ‘TOUS’: Opérateur ALL ou ‘AU MOINS UN’ : Opérateur ANY
L’opérateur ALL permet de tester par rapport à tous les éléments de
la liste, l’opérateur ANY compare par rapport à l’un ou l’autre de ces
éléments.

SELECT * FROM articles


WHERE Famille != ALL (‘100’, ‘150’, ‘200’);

• Sélectionne toutes les lignes pour lesquelles Famille est différente


de toutes les valeurs de la liste (‘100’, ‘150’, ‘200’).

SELECT * FROM articles


WHERE Famille = ANY (‘100’, ‘150’, ’200’);

• Sélectionne toutes les lignes pour lesquelles Famille est égale à


l’une des valeurs de la liste.
Prédicats d’existence
Syntaxe:
SELECT "nom de colonne 1"
FROM "nom de table 1"
WHERE EXISTS
(SELECT *
FROM "nom de table 2"
WHERE [condition])

EXISTS spécifie que le SELECT de niveau inférieur renvoie au moins


une ligne

EXISTS teste simplement si la requête interne retourne une ligne. Si elle


le fait, la requête externe peut s’exécuter. Sinon, la requête externe ne
s’exécutera pas, et l’instruction SQL entière ne retournera aucun résultat.

IMPORTANT :
le prédicat EXISTS est en général plus rapide que le prédicat IN ;
Exemple 1:

Nous voulons obtenir le total du couchage de l'hôtel, toutes


chambres confondues, à condition qu'il y ait au moins une
chambre dotée d'un couchage pour au moins 3 personnes :
Prédicats d’existence

Prédicats EXISTS / NOT EXISTS


Ex: Clients qui ont passé au moins une commande [n’ont
passé aucune commande]

SELECT * From Client C1


WHERE [NOT] EXISTS (
SELECT * FROM commande C2
WHERE C1.NumCli = C2.NumCli );
Opérateurs logiques: Opérateurs AND, OR et NOT

 Opérateur AND : Les deux conditions unies par un ET logique


doivent être remplies pour que le n-uplet soit sélectionné.
 Opérateur OR : L’une des deux conditions unies par un OU logique
doit être remplie pour que le n-uplet soit sélectionné.
 Opérateur NOT : Cet opérateur inverse le résultat de la sélection.
 Ordre d’évaluation des opérateurs logiques :
 Comparaisons
 Opérateur NOT
 Opérateur AND
 Opérateur OR
select NOM, ADRESSE, COMPTE
from CLIENT
where LOCALITE = 'Toulouse' and COMPTE < 0;

select NOM, ADRESSE, COMPTE


from CLIENT
where COMPTE > 0
and (CAT = 'C1' or LOCALITE = 'Paris')
Union, intersection et différence

Donnez tous les noms de région dans la base.


SELECT region FROM Station
UNION
SELECT region FROM Client
Donnez les régions où l’on trouve à la fois des clients et des
stations.
SELECT region FROM Station
INTERSECT
SELECT region FROM Client

Quelles sont les régions où l’on trouve des stations mais


pas des clients ?
SELECT region FROM Station
EXCEPT
SELECT region FROM Client
Division

Ex: Numéros des clients qui ont commandé tous les produits.
Problème: Il n’existe pas d’opérateur de division en SQL!

Deux stratégies:

Clients tels qu’il n’existe pas de produit tel qu’il n’existe pas de
commande pour ce client et ce produit.
Clients qui ont commandé un nombre distinct de produits égal
au nombre total de produits.
Division : solution « logique »

SELECT NumCli FROM Client CL


WHERE NOT EXISTS (
SELECT NumProd FROM Produit P
WHERE NOT EXISTS (
SELECT * FROM Commande Co
WHERE CL.NumCli = Co.NumCli
AND P.NumProd = Co.NumProd)
);
Division : Solution par comptage

SELECT NumCli FROM Client CL


WHERE ( SELECT COUNT(DISTINCT NumProd)
FROM Commande Co
WHERE Co.NumCli = CL.NumCli)
= ( SELECT COUNT(*) FROM Produit );

Ou
SELECT NumCli FROM Commande
GROUP BY NumCli
HAVING COUNT (DISTINCT NumProd)
= ( SELECT COUNT(*) FROM Produit );
Mises-à-jour

90
Insertion, Modification et Suppression
Insertion d’un tuple
INSERT INTO nom_table [(nom_col1 [,nomcol2] ..)]
VALUES (valeur1[,valeur2] ...)
INSERT INTO Client (id, nom, prenom)
VALUES (40, ’Moriarty’, ’Dean’)

Modifications de tuples
UPDATE nom_table
SET nom_col1 = expression1 [, nom_col2 = expression2] ...
[WHERE condition]
UPDATE R SET A1=V1, A2=V2, ... An=Vn
WHERE condition

Suppression de tuples
DELETE FROM nom_table [WHERE condition];
Destruction de tous les clients dont le nom commence par ’M’
DELETE FROM Client WHERE nom LIKE ’M%’
91

Vous aimerez peut-être aussi