Vous êtes sur la page 1sur 103

Matière : Gestion des bases de données

Partie II : SGBD et langage SQL

Enseignant : Achraf Mtibaa

Auditoire : 1 MP-II AD (formation contenue)


Plan

 Partie I : Définition BD/SGBD/SQL

 Partie II : Définition de données dans SQL

 Partie III : Manipulation de données dans SQL

 Partie IV : Consultation de données dans SQL

2
Partie I :
Définition BD/SGBD/SQL
Base de Données (BD)
 Définition de Base de Données (BD)
Est un ensemble de données structurées modélisant un univers
précis et accessible à plusieurs utilisateurs en même temps.

 Objectifs de Base de Données


 Élimination de la redondance des données.

 Indépendance entre les programmes et les données : on peut


isoler le niveau utilisation (application) de l'organisation
physique de données.
 Intégration de données : intégration de toutes les données de
l'entreprise dans un réservoir unique de données.

4
BD : Le modèle relationnel
 Introduction
Il consiste à percevoir l'ensemble de données comme des tableaux
où chaque table représente une relation, au sens mathématique
d'ensemble. L'ensemble des valeurs des tableaux représente le
contenu de la base de données. Ce contenu peut être modifié en
ajoutant des lignes, en supprimant des lignes ou en modifiant le
contenu des lignes.
 Définitions
 Modèle : une représentation du monde réel. Cette représentation
doit être simple et fiable.
 Domaine : un ensemble de valeurs caractérisées par un nom.

Ex. : Domaine (couleurs) = {bleu, rouge, blanc, …}


: Domaine (noms) = {ali, salah, …}
 Relation : est un ensemble d'enregistrements.

 Enregistrement = n-uplet = tuple : une séquence ordonnées


d'informations.

5
BD : Le modèle relationnel
 Degré d’une relation : c’est le nombre de colonne (domaines)
dans une relation
Ex. Degré de PRODUIT=3
 Cardinalité d’une relation : c’est le nombre de lignes dans une
relation
 Ex. Cardinalité de PRODUIT = 2

Relation PRODUIT NUM_PDT DES_PDT COUL_PDT

Enregistrement P1 D1 C1

P2 D2 C2

Domaine

6
BD : Le modèle relationnel
 Caractéristiques des relations
 Attribut : nom d'une colonne d'une relation.
Ex.
NUM_PDT
DES_PDT attributs de la relation PRODUIT.
COUL_PDT

 Schéma de relation : nom de la relation suivi de la liste des


attributs et de la définition de leurs domaines
Ex. : PRODUIT (NUM_PDT, DES_PDT, COUL_PDT)

7
BD : Le modèle relationnel
 Clé primaire : un attribut (ou plusieurs) permettant d'identifier
d'une façon unique un tuple d'une relation. Cet attribut doit avoir
toutes ses valeurs différentes dans la relation R.
Ex. : PRODUIT (NUM_PDT, DES_PDT, COUL_PDT)
ETUDIANT (NUM_ET, NOM_ET, DATNAIS_ET, ADR_ET)

 Clé étrangère : soit la relation R1 (A, B, …, S, …).


On dit que S est une clé étrangère de R1 s'il y a une relation R2
ayant pour clé primaire S.
Ex. : PRODUIT (NUM_PDT, DES_PDT, COUL_PDT, #NUM_MAG)
MAGASIN (NUM_MAG, ADR_MAG, TEL_MAG)
=> si on connaît la clé primaire d'un produit, on dispose des
informations concernant ce produit ainsi que celles du magasin où il
est stocké.

8
BD : Le modèle relationnel
 Contraintes d'intégrité
Une Contrainte d'Intégrité (CI) est une règle qui doit être vérifiée au
moment de la manipulation de données afin que le résultat considéré
soit correct et cohérent.
A tout instant, on doit pouvoir ajouter, modifier ou supprimer une
contrainte d'intégrité et le SGBD doit être capable de vérifier que la
base est toujours cohérente vis à vis du changement apporté à son
environnement; dans le cas contraire, il doit rejeter l’intervention.

9
BD : Le modèle relationnel
 Il existe plusieurs types de contraintes d'intégrité :
 Unicité de la clé d'une relation
 CI individuelles :
Ex. : 200  SALAIRE  10000
COULEUR  {bleu, rouge, jaune}

 CI intra-relation (dans la relation) : il s'agit des contraintes entre


les champs d'une même relation.
Ex. : SALAIRE  2 * Moyenne (SALAIRE).
 CI inter-relations (entre les relations) :
Ex. : QTE_STK  QTE_CDE
 Les contraintes dynamiques : elles concernent le passage de la
base de données d'un état à un autre.
Ex. : si on met à jour la table EMPLOYE (SALAIRE),
Il faut que Nouveau_SALAIRE  Ancien_SALAIRE.
10
Système de Gestion de Base de Données

 Un Système de Gestion de Base de Données (SGBD) Est un


ensemble de programmes qui permettent à l'utilisateur de décrire,
manipuler et interroger l’ensemble des données constituants une
Base de Données.

 Objectifs
 La définition et la manipulation des données,

 La cohérence des données,

 La confidentialité des données,

 L'intégrité des données,

 La sauvegarde et la restauration des données,

 La gestion des accès concurrents.

11
Système de Gestion de Base de Données

 Exemples
 Oracle : SGBD relationnel (et objet-relationnel dans ses
dernières versions) à très connu pour les applications
professionnelles.

 MySQL : SGBD relationnel libre, simple d’accès et très utilisé


pour la réalisation de sites Web dynamiques.

 PosgreSQL : SGBD relationnel et objet-relationnel très puisant


qui offre une alternative open-source aux solutions commerciales.

 Acces : SGBD relationnel Microsoft permettant de réaliser


rapidement des applications de petite envergure.

12
Oracle en bref
 Oracle est un SGBD édité par la société Oracle Corporation
(http://www.oracle.com).

 Sa fonction principale est de gérer d’une façon intégrée l’ensemble


de données d’une entreprise et de les rendre accessibles à un nombre
important d’utilisateurs en garantissant leur sécurité, leur cohérence
et leur intégrité.

 Oracle est composé d’un noyau et ses couches de base :


 Le noyau assure les fonctions de base d’un SGBD (stockage

physique des données, …).


 Le dictionnaire de données qui décrit de façon dynamique la base
de données.

13
Oracle en bref
 Une couche SQL permettant d’interpréter les commandes SQL.
 Une couche PL/SQL permettant d’interpréter les commandes
PL/SQL.

 En plus, Oracle est aussi un véritable environnement de travail. Il est


constitué de nombreux outils :
 Les outils d'administration (Entreprise Manager),

 Les outils de développement (Designer, Developer, SQL*plus,


SQLWorsheet, etc.),
 Les outils de communication,

 Les outils de génie logiciel.

14
SQL : Structured Query Language
 SQL est un langage pour les BDR. Créé en 1970 par IBM.
 Principales caractéristiques de SQL :
 Normalisation : SQL implémente le modèle relationnel.
 Standard : Du fait de cette normalisation, la plupart des éditeurs
de SGBDR intègrent SQL à leurs produits (Oracle, Informix,
Sybase, Ingres, MS SQL Server, DB2, etc.). Ainsi, les données,
requêtes et applications sont assez facilement portables d’une
base à une autre.
 Non procédural : SQL est un langage de requêtes qui permet à
l’utilisateur de demander un résultat sans se préoccuper des
moyens techniques pour trouver ce résultat. C’est l’optimiseur du
SGBD (composant du moteur) qui se charge de cette tâche.
 Universel : SQL peut être utilisé à tous les niveaux dans la
gestion d’une BDR.

15
SQL : Structured Query Language

 Langage de définition de données LDD : permet la description de la


structure de la base de données (tables, vues, attributs, index).

 Langage de manipulation de données LMD : permet la manipulation


des tables et des vues avec les quatre commandes : SELECT,
INSET, DELETE, UPDATE.

 Langage de contrôle de données LCD : comprend les primitives de


gestion des transactions : COMMIT, ROLLback et des privilèges
d’accès aux données : GRANT et REVOKE.

16
Partie II :
Définition de Données dans SQL
Langage de Définition de Données : LDD

 La définition de données dans SQL permet la définition des objets


manipulés par le SGBD.

 Les objets : table, vue, index, …

 Les commandes du LDD sont :


 CREATE : création des objets.

 ALTER : modification de la structure des objets.

 DROP : suppression des objets.

18
1. Création de tables
 Syntaxe de Création des tables
Celle-ci consiste à définir son nom, les noms et types des colonnes qui la
composent et les contraintes nécessaires.

Syntaxe :

CREATE TABLE nom_table


(col1 type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de colonne],
col2 type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de colonne],
coln type [(taille)] [default ValeurParDefaut] [null / not null] [contrainte de colonne],
[contrainte de tables]);

19
1. Création de tables
 Définition des colonnes :
 La taille indique la valeur maximale de la longueur du champ.
 Les types de données les plus utilisés sont :
 NUMBER : nombre entier ou décimal de 40 positions maximum.

 NUMBER(n) ou NUMBER(n,m)

 n : varie de 1 à 38 et indique le nombre maximum des chiffres


à stocker. C'est la précision.
 m : indique le nombre de chiffres situés à droite de la virgule.

Exemple :
NUMBER(2) : la valeur maximale du champ est 99
NUMBER(5,3) : la valeur maximale du champ est 99.999

20
1. Création de tables

 CHAR : stocke des chaînes comportant au maximum 255


caractères dans une colonne de longueur fixe : CHAR(n). Si on
ne spécifie pas la longueur : CHAR, une colonne de ce type ne
stocke qu'un seul caractère.
 VARCHAR / VARCHAR2 : le deuxième type remplace le
premier. Il stocke jusqu'à 4000 caractères dans une seule colonne
pour des chaînes de longueur variable.
 DATE : permet de stocker des informations concernant les dates
et les heures.

21
1. Création de tables
Exemple : Créer la table Ordinateur ayant le schéma suivant :
 Ordinateur (Ref, Marque, Qte_stk, Couleur, Date_Entree, Prix), avec
Ref : de type chaine de caractères de taille 25,
Marque : de type chaine de caractères de taille 15,
Qte_stk : de type numérique de taille 3,
Couleur : de type caractère sur une position,
Date_Entree : de type date prenant par défaut la date courante,
Prix : de type numérique sur sept positions dont trois chiffres après la
virgule.

22
1. Création de tables

CREATE TABLE Ordinateur


(Ref varchar2(25),
Marque varchar2(15),
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3));

23
1. Création de tables : les contraintes
 Une contrainte d'intégrité est une règle
 Qui définit la cohérence d'une donnée ou d'un ensemble de
données de la base de données.
 Vérifiée automatiquement par le SGBD lors de la manipulation
de données.
 Types de CI Oracle :
 NULL / NOT NULL : seulement niveau colonne

 1. UNIQUE (colonne1 [, colonne2] …)

 2. PRIMARY KEY (colonne1 [, colonne2] …)

 3. FOREIGN KEY (colonne1 [, colonne2] …)

REFERENCES nomTablePere (colonne1 [, colonne2] …) [ON


DELETE CASCADE]
 4. CHECK (condition)

24
1. Création de tables : les contraintes
 Non nullité des valeurs d'un attribut : L'utilisateur est obligé de
saisir la valeur de l'attribut. La commande est : NOT NULL
 Exemple :
 On suppose que la marque d’un ordinateur doit être renseignée.
CREATE TABLE Ordinateur
(Ref varchar2(25),
Marque varchar2(15) Not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3));

25
1. Création de tables : les contraintes
 Unicité de la valeur d'un attribut ou d'un groupe d'attributs : la
valeur doit être unique. La commande est : UNIQUE. Elle peut être
définie comme contrainte de table ou comme contrainte de colonne.
 Unique comme contrainte de table selon la syntaxe :
[CONSTRAINT nom_contrainte] UNIQUE (att1, …, attn) ;
 Unique comme contrainte de colonne :
[CONSTRAINT nom_contrainte] UNIQUE ;

 Exemple
 On suppose que deux ordinateurs ne peuvent pas avoir la même
référence.

26
1. Création de tables : les contraintes
Unique comme contrainte de table :

CREATE TABLE Ordinateur


(Ref varchar2(25),
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3),
constraint UK_reference unique(ref)) ;

27
1. Création de tables : les contraintes
Unique comme contrainte de colonne:

CREATE TABLE Ordinateur


(Ref varchar2(25) constraint UK_reference unique ,
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3)) ;

28
1. Création de tables : les contraintes
 Clé primaire (un attribut ou un groupe) : indique que l'attribut est
une clé primaire. Elle peut être définie comme contrainte de table
ou comme contrainte de colonne.
 Clé primaire comme contrainte de table selon la syntaxe :
[CONSTRAINT nom_contrainte] PRIMARY KEY(att1, …, attn) ;
 Clé primaire comme contrainte de colonne :
[CONSTRAINT nom_contrainte] PRIMARY KEY;

 Exemple
 Déclarer la colonne Ref comme clé primaire de la table ordinateur.

29
1. Création de tables : les contraintes
Clé primaire comme contrainte de table :

CREATE TABLE Ordinateur


(Ref varchar2(25),
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3),
constraint PK_ordinateur primary key (ref)) ;

30
1. Création de tables : les contraintes
Clé primaire comme contrainte de colonne :

CREATE TABLE Ordinateur


(Ref varchar2(25) constraint PK_ordinateur primary key,
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3)) ;

31
1. Création de tables : les contraintes
 Exemple : Déclarer la contrainte clé primaire de la table
LigneCommande suivante : LigneCommande (NumCde, Ref,
QteCde)

CREATE TABLE LigneCommande


(Numcde number(4),
Ref varchar2(25),
QteCde number(3),
constraint pk_LigneCde primary key (NumCde,
Ref)) ;
 Remarque

Dans le cas de clé primaire multiple, la contrainte clé primaire ne peut être
créée que sous forme de contrainte de table.

32
1. Création de tables : les contraintes
 Clé étrangère (intégrité référentielle) : lorsque la clé primaire
figure dans une autre table en tant qu'un attribut non clé. La clé
étrangère peut être définie comme contrainte de table ou comme
contrainte de colonne.
 Clé étrangère comme contrainte de table selon la syntaxe :
[CONSTRAINT nom_contrainte] FOREIGN KEY(nom_att)
references nom_table(nom_att);
 Clé étrangère comme contrainte de colonne :
[CONSTRAINT nom_contrainte] references
nom_table(nom_att);

33
1. Création de tables : les contraintes
 On considère le schéma suivant :
MAGASIN(NumMag, Adresse)
Ordinateur (Ref, Marque, Qte_stk, Couleur, Date_Entree, Prix, mag#)

 La commande pour la création de la table Magasin est :


Create Table Magasin
(NumMag number(2) constraint pk_mag primary Key,
Adresse varchar(30));

 La commande pour la création de la table Ordinateur est :

34
1. Création de tables : les contraintes
Clé étrangère comme contrainte de table :

CREATE TABLE Ordinateur


(Ref varchar2(25) constraint PK_ordinateur primary key,
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3),
Mag number(2),
Constraint FK_ord_mag Foreign Key (Mag)
references Magasin(NumMag));

35
1. Création de tables : les contraintes
Clé étrangère comme contrainte de colonne :

CREATE TABLE Ordinateur


(Ref varchar2(25) constraint PK_ordinateur primary key,
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3),
Mag number(2) Constraint FK_ord_mag references
Magasin(NumMag) );

36
1. Création de tables : les contraintes
 Contrainte de valeur avec la clause CHECK : Permet de limiter les
valeurs possibles pour une colonne en vérifiant une certaine
condition. Le contrôle se fera lors des insertions des données.
[Constraint nom_contrainte] CHECK (condition)

 La condition sur la colonne peut utiliser :


 un opérateur de comparaison

 la clause between val1 and val2

 la clause in (liste de valeurs)

37
1. Création de tables : les contraintes

 Définir les contraintes suivantes sur la tables ordinateur :


 La quantité d’un ordinateur doit être comprise entre 0 et 999.

 On suppose que le prix d’un ordinateur doit être positif.

 la couleur d’un ordinateur ne peut être que ‘N’, ‘G’, ou ‘B’.

38
1. Création de tables : les contraintes
CREATE TABLE Ordinateur
(Ref varchar2(25) constraint PK_ord primary key,
Marque varchar2(15) not null ,
Qte_stk number(3),
Couleur char,
Date_entree date default sysdate,
Prix number(7,3)
Constraint Ck1_ord CHECK (prix >= 0),
Constraint Ck2_ord CHECK (Qte_stk between 0 and
999),
Constraint Ck3_ord CHECK (Couleur IN (‘N’, ‘G’,
‘B’)));

39
1. Création de tables : Exemple
 Pilote (NPil, Nom, NbHvol, #Compa)
 Compagnie(NComp, NomComp, AdrComp, Ville )
 Créer les deux tables avec les contraintes nécessaires.
 Le NbHvol doit être entre 0 et 2000.

 Le nom de pilote doit être renseigné.

 Les noms des pilotes doivent être tous différents.

 Rq : Les contraintes doivent être créée au niveau table.

40
1. Création de tables : Correction
CREATE Table Compagnie
(NComp char(4),
NomComp varchar2(15),
AdrComp varchar2(20),
Ville varchar2(15),
Constraint pk_Compagnie PRIMARY KEY (NComp));

41
1. Création de tables : Correction
CREATE Table Pilote
(NPil CHAR(6),
Nom CHAR(15) NOT NULL,
NbHvol NUMBER(7,2),
Compa CHAR (4),
Constraint pk_Pilote PRIMARY KEY (NPil),
Constraint ck_NbHvol CHECK (NbHvol BETWEEN 0 And 2000),
Constraint un_nom UNIQUE (nom),
Constraint FK_Pil_Compa FOREIGN KEY (Compa) REFERENCES
Compagnie (NComp));

42
2. Modification de la structure de table
 Les trois possibilités de modification de la structure de table sous
ORACLE permettent soit d'ajouter, modifier ou supprimer des
colonnes, soit d'ajouter ou supprimer des contraintes.
 1ère forme : Ajout de nouvelles colonnes à une table
 Syntaxe :
ALTER TABLE nom_table
ADD (col1 type [(taille)] [null / not null] ,
col2 type [(taille)] [null / not null] ,
...
coln type [(taille)] [null / not null] ) ;
 Exemple :
Supposons qu'on veut ajouter une colonne offre à la table ordinateur:
ALTER TABLE ordinateur
ADD offre varchar2(3) ;

43
2. Modification de la structure de table
 2ère forme : Modification de colonnes
 Syntaxe :
ALTER TABLE nom_table
MODIFY (col1 type [(taille)] [null / not null] ,
col2 type [(taille)] [null / not null] ,
...
coln type [(taille)] [null / not null] ) ;

 Exemple :
Supposons qu'on veut changer le type de la colonne offre de
varchar2(3) en varchar2(5) :
ALTER TABLE ordinateur
MODIFY offre varchar2(5);

44
2. Modification de la structure de table
 3ème forme : Suppression de colonnes existantes
 Syntaxe :
ALTER TABLE nom_table
DROP COLUMN < nom_colonne >

 Exemple :
Supprimer la colonne offre de la table ordinateur :
ALTER TABLR ordinateur
DROP COLUMN offre

45
2. Modification de la structure de table
 4ème forme : Ajout d'une contrainte
 Syntaxe :
ALTER TABLE nom_table
ADD Constraint Def_de_contrainte ;

 Exemple :
Ajouter à la table Ordinateur la contrainte suivante : la couleur doit
être en majuscule.
ALTER TABLE ordinateur
ADD constraint ck4_ord check(couleur=upper(couleur))

46
2. Modification de la structure de table

 5ème forme : Suppression de contraintes existantes


 La commande est :
ALTER TABLE nom_table
DROP Constraint nom_contrainte ;

Où Le nom de la contrainte c'est celui de la contrainte à supprimer .

 Exemple :
Supprimer la contrainte spécifiant les couleurs possibles pour les
ordinateurs
ALTER TABLE ordinateur DROP CONSTRAINT Ck3_ord ;

47
2. Modification de la structure de table

 Remarque :
 On peut effacer une clé primaire sans indiquer le nom de la
contrainte. La commande est :
ALTER TABLE nom_table DROP PRIMARY KEY [CASCADE] ;
 L'option cascade est ajoutée pour pouvoir supprimer une clé
primaire référencée.
 Exemple :
Supprimer la contrainte clé primaire de la table magasin
ALTER TABLE magasin DROP PRIMARY KEY CASCADE ;

48
2. Modification de la structure de table

 Remarque :
Pour retrouver les différentes contraintes avec leur propriétés, on
peut utiliser la commande suivante :

Select * from user_constraints


[where table_name = 'NOMTABLE' ];

Il est à remarquer que pour cette commande, le nom de la table doit


être écrit en majuscule.

49
3. Suppression de tables

 Syntaxe :
DROP TABLE nom_table ;
 Exemple :
 Supposons qu'on veut supprimer la table Magasin :
DROP TABLE magasin ;
 Remarque :
Contrainte de suppression de table : permet de supprimer toutes les
contraintes d'intégrité référentielles qui se reflètent aux clés uniques
ou primaires de la table à supprimer. La commande est :
DROP TABLE nom_table CASCADE CONSTRAINTS;

50
4. Renommage et
création de synonymes de tables
 Pour changer le nom d'une table existante la commande est :
Syntaxe :
RENAME ancien_nom TO nouveau_nom ;
 Il est également possible de donner à une même table plusieurs noms
différents appelés synonymes.
Syntaxe :
CREATE SYNONYM nom_synonyme FOR nom_table ;
 Pour supprimer un synonyme donné, on utilise la commande :
Syntaxe :
DROP SYNONYM nom_synonym ;
 Remarque :
La suppression d'une table implique la suppression des synonymes
correspondants.

51
Partie III :
Manipulation des données dans
SQL
Langage de manipulation de données (LMD)
Langage de Manipulation de Données : LMD

 Les commandes du LMD sont :


 INSERT : ajout des lignes à une table.

 UPDATE : mettre à jour les colonnes d’une table.

 DELETE : suppression d’un ou de plusieurs enregistrements.

53
1. Insertion de données

 L’instruction INSERT ajoute des lignes à une table. Les valeurs à


ajouter lors d’une insertion doivent vérifier les contraintes définies
au moment de la définition des données. Tout enregistrement ne
vérifiant pas les contraintes sera rejeté.

 Il existe deux formes d’insertions de données :


 Insertion par ligne
 Insertion à travers la copie des valeurs des colonnes d'une autre
table

54
1.1. Insertion par ligne

 Syntaxe :
INSERT INTO nom_table [(les champs de la table)] VALUES
(liste des valeurs) ;
Les valeurs des colonnes de type caractère, chaîne de caractère et
date doivent apparaître entre deux cotes ( ' ' ).
Remarque :
 Il est possible d’insérer un enregistrement en connaissant seulement
les valeurs de quelques champs. Pour cela , il faut
 Soit indiquer la liste des champs à insérer et leurs valeurs
respectives
 Soit mettre NULL dans la liste de valeurs pour les champs vides.

 Les champs ayant été créés avec la contrainte Not Null devront,
obligatoirement, avoir des valeurs.

55
1.1. Insertion par ligne
Soit la table Ordinateur (Ref, Marque, Couleur, Qte_stk, Prix)

Ref Marque Couleur Qte_stk Prix

G580AI3-N lenovo R 3 929

Inspiron 3521-1007U Dell 11 959

Inspiron 3521-I32365 Dell G 1189

Donner la commande permettant de remplir la première ligne :

INSERT INTO ordinateur(Ref, Marque, Couleur, Qte_stk,


Prix) VALUES ('G580AI3-N', 'lenovo', 'R', 3, 929);

56
1.1. Insertion par ligne

 Dans le cas précédent toutes les colonnes sont à saisir, on peut donc
ne pas spécifier les noms des colonnes après le nom de la table. La
commande devient :

INSERT INTO ordinateur VALUES ('G580AI3-N',


'lenovo', 'R', 3, 929);

57
1.1. Insertion par ligne

 Donner la commande permettant de remplir la deuxième ligne du


tableau précédent.
INSERT INTO ordinateur(Ref, Marque, Qte_stk, Prix)
VALUES ('Inspiron 3521-1007U', 'Dell', 11, 959);

 Donner la commande permettant de remplir la troisième ligne du


tableau précédent.
INSERT INTO ordinateur(Ref, Marque, couleur, Prix)
VALUES ('Inspiron 3521-I32365', 'Dell', 'G',
1189);

58
1.2. Insertion à travers la copie des
valeurs des colonnes d'une autre table
 Syntaxe :
INSERT INTO nom_table [(les champs de la table)] Requête;

 Exemple :
Soit la table Ordinateur_Dell (Ref, Couleur, Qte_stk, Prix) contenant
seulement les ordinateurs Dell.
Remplir cette table à partir de la table Ordinateur :

INSERT INTO ordinateur_dell


Select ref, Couleur, Qte_stk, Prix
from ordinateur
where marque = 'Dell' ;

59
2. Modification de données
 L'opération de modification consiste à mettre à jour les colonnes
d'une table par de nouvelles valeurs.
Syntaxe :
UPDATE nom_table
SET col1 = val1 , … , coln = valn
[WHERE condition] ;
Remarques :
 Il n'est pas possible de mettre à jour plus qu'une table à la fois.
 La modification des données n’est pas autorisée que si les
contraintes sont toujours valides.
 Les valeurs peuvent être des constantes, des expressions, des
résultats de sous-requêtes ou NULL (pour supprimer la valeur
initiale du champ).
 Si la clause where n’apparaît pas dans la commande, il s’agit de
mettre à jour tous les enregistrements de la table.

60
2. Modification de données
 Affecter la couleur 'R' à l’ordinateur "Inspiron 3521-1007U"
UPDATE ordinateur
SET couleur = 'R'
WHERE ref = 'Inspiron 3521-1007U';

 Majorer de 5% les prix des ordinateurs dont le prix est inférieur à


900.
UPDATE ordinateur
SET Prix = Prix * 1.05
WHERE prix < 900;

 Modifier les quantités de tous les produits avec la valeur 10.


UPDATE ordinateur
SET Qte_stk = 10;

61
3. Suppression de données
 La commande DELETE permet de supprimer un ou plusieurs
enregistrements d’une table tout en gardant la base cohérente. Les
enregistrements à supprimer sont spécifiés par la condition de la
clause WHERE.
 Syntaxe :
DELETE FROM nom_table
[WHERE condition];
Exemple :
 Supprimer tous les ordinateurs de couleurs Blanche
DELETE FROM ordinateur
Where Couleur = 'B';
 Supprimer toutes les lignes de la table ordinateur
DELETE FROM ordinateur;

62
Partie IV :
Consultation de Données dans SQL
BD exemple :

Table Ordinateur
REF Marque Pro QteStk Couleur Date_entree Offre Mag# Prix

Table Magasin
NumMag adresse

Table Commande
NumCommande Date Cde

Table LigneCommande

NumCommande# REF# QteCde

64
1. Introduction
 La commande utilisée pour extraire des données à partir de la base est
composée des clauses SELECT-FROM-WHERE (SFW) :
 SELECT : permet de définir la liste des colonnes que l'on peut obtenir.
 FROM : indique les noms des tables nécessaires pour obtenir le résultat
souhaité.
 WHERE : définit la condition que doit vérifier un n-uplet donné pour qu'il
fasse partie du résultat.
 Syntaxe :
SELECT col1, col2, … ,coln
FROM nom_table
[WHERE condition];
 Remarque
 Si on souhaite avoir toutes les colonnes de la table, on mettra après SELECT *.
 Si on souhaite avoir toutes les lignes de la table, on ne met pas la clause WHERE.

65
Exemples
 Afficher tout le contenu de la table ordinateur
SELECT *
FROM Ordinateur;

 Afficher les références et marques de tous les ordinateurs


SELECT ref, marque
FROM Ordinateur;

 Afficher les références et marques des ordinateurs de couleur noir.


SELECT ref, marque
FROM Ordinateur
WHERE couleur = 'N’;

 Afficher les différentes couleur des ordinateurs


SELECT distinct couleur
FROM Ordinateur;

66
2. Tri des résultats
 Pour obtenir un résultat trié, il suffit d'ajouter à la requête SQL la
clause :
ORDER BY expression [asc / desc]

 Exemples :
 Donner la liste des ordinateurs ordonnés par ordre croissant de leurs prix.
SELECT * FROM Ordinateur
ORDER BY prix;

 Donner la liste des ordinateurs I3 et I5 ordonnés par ordre décroissant


de leurs processeurs et croissant de leurs prix.
SELECT marque,pro,prix FROM Ordinateur
WHERE pro = 'I3' or pro = 'I5'
ORDER BY pro desc, prix;

67
3. Opérateurs de comparaison
 La condition est composée généralement de trois termes :
 un nom de colonne,

 un opérateur de comparaison,
 et une constante, une colonne, une liste de valeurs, une expression ou une
requête.

 En plus des opérateurs classiques de comparaison ( = , <> , < , > , >= , <= )
ORACLE dispose d'un certain nombre d'opérateurs spécifiques dont
principalement :

 IS [NOT] NULL : permet de tester si le contenu d'une colonne est une


valeur nulle (indéfinie).
 [NOT] IN (liste de valeurs): permet de tester si le contenu d'une colonne
coïncide avec l'une des valeurs de la liste.
 [NOT] BETWEEN V1 and V2 : permet de tester si le contenu d'une
colonne est compris entre les valeurs V1 et V2.

68
3. Opérateurs de comparaison
 [NOT] LIKE chaîne générique : permet de tester si le contenu d'une
colonne ressemble à une chaîne de caractères obtenue à partir de la
chaîne générique. Cette dernière peut contenir l'un des caractères
suivants :
 % : remplace une autre chaîne de caractères qui peut être même une
chaîne vide.
 _ : remplace un seul caractère.

 { = | != | > | < | >= | <= } ANY : au moins un

 { = | != | > | < | >= | <= } ALL : Tous

 ANY et ALL utilisables pour comparer entre un élément et un ensemble


de valeurs.

 Remarque : Si la condition est composée de sous conditions, on fait


recours aux opérateurs logiques AND et OR

69
Exemples
 Afficher ordinateurs sans offre
SELECT * FROM Ordinateur
WHERE offre is NULL;

 Afficher les ordinateurs de couleur Rouge ou Bleu


SELECT * FROM Ordinateur
WHERE couleur IN ('R', 'B');

 Afficher références et marques des ordinateurs dont le prix est compris


entre 900 et 1100
SELECT ref,marque FROM Ordinateur
WHERE prix BETWEEN 900 and 1100;

 Afficher références et marques des ordinateurs I3 dont le prix est inférieur à


1000
SELECT ref,marque FROM Ordinateur
WHERE pro = 'I3' and prix < 1000;

70
Exemples
 Afficher les ordinateurs dont la marque commence par 'T'
SELECT * FROM Ordinateurs
WHERE marque LIKE 'T%';

 Afficher les ordinateurs dont la marque commence par 'T' ou par 'D'
SELECT * FROM Ordinateurs
WHERE marque LIKE 'T%' or marque LIKE 'D%';

 Afficher marque et prix des ordinateurs contenant 'e' en deuxième position


avec un prix < 1000
SELECT marque,prix FROM Ordinateurs
WHERE marque LIKE '_e%' and prix < 1000;

 Afficher les marques contenant 'o'


SELECT marque FROM Ordinateurs
WHERE marque LIKE '%o%';

71
4. La jointure simple
 Elle permet de combiner des enregistrements issues à partir de deux ou
plusieurs tables en vue de retrouver des données associées.
 Pour effectuer une jointure, il faut spécifier :
 Les noms des tables, dans la clause FROM, séparés par des virgules.
 La condition de jointure dans la clause WHERE.
 Les noms de colonnes doivent être préfixé par les noms de tables pour
éviter toute ambiguïté.

 Pour réaliser la condition de jointure, les deux tables doivent avoir deux
colonnes comparables .
 La forme générale d'une requête de jointure est :
SELECT col1 , col2 , …. , coln
FROM table1 ,… . , tablen
WHERE condition ;

72
Exemples
 Afficher les références des ordinateurs ainsi que leur adresse de stockage
SELECT ref, adresse
FROM Ordinateur, Magasin
WHERE mag = NumMag;

 Afficher les adresses des magasins contenant des ordinateurs Toshiba


SELECT adresse
FROM Ordinateur o, Magasin m
WHERE o.marque = 'Toshiba'
And o.mag = m.nummag;

73
Exemples
 Afficher date et les marques vendues dans la commande C1320
SELECT Marque, datecde
FROM Ordinateur o, Commande C, LigneCommande LC
WHERE C.numcommande = 'C1320'
And C.numcommande = LC.numcommande
And LC.ref = O.ref

 Afficher les dates pour lesquelles la marque Lenovo a été vendue


SELECT datecde
FROM Commande C, Ordinateur o, LigneCommande LC
WHERE marque = 'lenovo'
And C.numcommande = LC.numcommande
And LC.ref = O.ref

74
4.1. L'autojointure
 Elle consiste à faire une jointure d'une table avec elle-même dans le but de
construire un enregistrement contenant des attributs en provenance de deux
lignes, inter-reliées, cherchées dans la même table.
 Exemple
Trouver la marque et le prix des ordinateurs I3 dont le prix est supérieur à
celui des ordinateurs I3 lenovo
 Solution avec synonyme
CREATE SYNONYM ord FOR ordinateur;

SELECT ord.marque, ord.prix


FROM Ord, Ordinateur
WHERE ordinateur.marque='lenovo'
and ordinateur.pro='I3'
and ord.pro='I3'
and ord.prix > ordinateur.prix;

75
4.1. L'autojointure
 Solution avec ALIAS
SELECT O1.marque, O1.prix
FROM Ordinateur O1, Ordinateur O2
WHERE O2.marque='lenovo'
and O2.pro='I3' and O1.pro='I3'
and O1.prix > O2.prix;

 Afficher marques et prix des ordinateur ayant le même prix que


l’ordinateur de référence G580AI3-N
SELECT O1.marque, O1.prix
FROM Ordinateur O1, Ordinateur O2
WHERE O2.ref = 'G580AI3-N‘
and O1.prix = O2.prix;

76
5. Les requêtes imbriquées

 Les requêtes imbriquées sont des requêtes à l'intérieur d'autres


requêtes. Ceci se produit lorsque la clause WHERE contient elle-
même une sous requête.

 La sous requête (ou requête/bloc interne) :


 Peut retourner une ou plusieurs colonne.

 Peut retourner une ou plusieurs lignes.

 La sous requête est typiquement codée comme partie d'un


prédicat utilisant =, lorsqu'elle retourne une seule valeur ou
utilisant IN lorsqu'elle retourne plusieurs valeurs.

77
5.1. Les requêtes imbriquées simples

 Requêtes imbriquées simples : la requête interne est indépendante –


de la requête externe – dans le sens où elle est complètement
évaluée avant la requête externe qui utilisera ensuite le résultat.

 Syntaxe
SELECT col1, col2, …, coln
FROM table-name
WHERE (col1, col2, …, coln ) opérateur ( SELECT col1, col2, …, coln
FROM table-name
WHERE . . . . . ) ;

78
Exemples
 Afficher les adresses des magasins contenant des ordinateurs Toshiba
SELECT adresse
FROM Magasin
WHERE nummag in (SELECT mag
FROM Ordinateur
WHERE marque = 'Toshiba');
 Afficher les dates pour lesquelles la marque Lenovo a été vendue
SELECT datecde
FROM Commande
WHERE numcommande in (SELECT numcommande
FROM LigneCommande
WHERE ref in (SELECT ref
FROM Ordinateur
WHERE marque='lenovo')

79
Exemples
 Trouver la marque et le prix des ordinateurs I3 dont le prix est supérieur à
celui des ordinateurs I3 lenovo

SELECT marque, prix


FROM Ordinateur
WHERE pro='I3'
and ord.prix > all (SELECT prix
FROM Ordinateur
WHERE pro='I3'
and marque='lenovo')

80
Exemples
 Afficher références des ordinateurs de même couleur que l’ordinateur
G580AI3-N
SELECT ref
FROM Ordinateur
Where couleur = (SELECT couleur
FROM Ordinateur
WHERE ref = 'G580AI3-N');
 Afficher références et marques des ordinateurs de même couleur qu’un
ordinateur Dell
SELECT ref, marque
FROM Ordinateur
Where couleur IN (SELECT couleur
FROM Ordinateur
WHERE marque = 'Dell');

81
REQUETE

5.2. Les requêtes corrélées EXTERNE


REQUETE

INTERNE

 Parfois, l'évaluation du bloc interne dépend d'une (ou de plusieurs)


valeur(s) dans la ligne courante du bloc externe. Dans ce cas, la requête
interne sera évaluée plusieurs fois, autant de fois que de valeur provenant
de la requête externe. Ce type de requêtes est appelé requêtes corrélées.
 Exemple : Afficher références, marques et processeurs des ordinateurs
ayant le prix le plus bas de leurs catégories.

SELECT ref, marque, pro


FROM Ordinateur X (Nom de corrélation )
WHERE prix < = all (SELECT prix
FROM Ordinateur
WHERE X.pro = pro);
 Remarque : X, est une variable de corrélation liant les deux blocs
ensembles pour les rendre dépendants l'un de l'autre.

82
6. Les opérateurs ensemblistes
 Oracle offre trois opérateurs ensemblistes pour réaliser des opérations
d’union, d’intersection et de différence.

 Syntaxe
SELECT ......
FROM ......
[WHERE . . . . . . ]
{ UNION | INTERSECT | MINUS }
SELECT .... ..
FROM ..... .
[WHERE . . . . . .] ;

 Les deux SELECT doivent avoir le même nombre de colonnes. Ces


colonnes doivent être de types compatibles.
 Les titres des colonnes résultats sont ceux de la première requête.

83
6. Les opérateurs ensemblistes
 Union : Elle permet d'avoir les résultats de la première requête suivis de
ceux de la deuxième requête.
T1 union T2

 Exemple : Afficher les numéros des magasins contenant des ordinateurs


Dell ou Toshiba
SELECT mag
FROM Ordinateur
WHERE marque = 'Dell'
UNION
SELECT mag
FROM Ordinateur
WHERE marque = 'Toshiba';

84
6. Les opérateurs ensemblistes
 Intersect : Elle permet d'avoir les lignes communes aux résultats des deux
requêtes.
T1
T1 Intersect T2
T2

 Exemple : Afficher les numéros des magasins contenant des ordinateurs


Dell et Toshiba
SELECT mag
FROM Ordinateur
WHERE marque = 'Dell'
INTERSECT
SELECT mag
FROM Ordinateur
WHERE marque = 'Toshiba';

85
6. Les opérateurs ensemblistes
 Minus : Elle permet d'avoir les lignes qui apparaissent dans la première
requête et qui n'apparaissent pas dans la seconde.
T1 minus T2 T2

 Exemple : Afficher les numéros des magasins contenant des ordinateurs


Dell et ne contenant pas Toshiba
SELECT mag
FROM Ordinateur
WHERE marque = 'Dell'
MINUS
SELECT mag
FROM Ordinateur
WHERE marque = 'Toshiba';

86
Exemple
 Afficher les numéros des magasins ne contenant aucun ordinateurs
SELECT nummag
FROM Magasin
MINUS
SELECT mag
FROM Ordinateur
 Remarque : on peut utiliser les blocs imbriqués
SELECT nummag
FROM Magasin
WHERE nummag Not in (SELECT mag
!= all FROM Ordinateur

87
7. Les fonctions de groupe

 ORACLE dispose de fonctions appelées fonctions de groupe ou


fonctions agrégats qui s'appliquent à un ensemble de données :
 AVG ([distinct] col) : Moyenne arithmétique des valeurs non

nulles d’une colonne.


 COUNT(*) : Nombre de lignes.

 COUNT([distinct] col) : Nombre de valeurs non nulles de la

colonne.
 MAX ([distinct] col) : Valeur maximale non nulle de la colonne.

 MIN ([distinct] col) : Valeur minimale non nulle de la colonne.

 SUM ([distinct] col) : Somme des valeurs non nulle de la

colonne.

88
7. Les fonctions de groupe

Remarques : Ces fonctions


 peuvent être appliquées sur une expression arithmétique.
 ignorent les valeurs nulles
 prennent par défaut les valeurs multiples. Pour ne prendre que les
valeurs distinctes, il faut ajouter l'opérateur DISTINCT.

 ne peuvent pas être utilisées dans la clause


WHERE.

89
Exemples
 Donner le nombre total d’ordinateurs
SELECT Count(*) "Nombre"
FROM Ordinateur;
 Afficher le nombre total d’ordinateurs I3
SELECT Count(*) "Nombre"
FROM Ordinateur
WHERE pro = 'I3';
 Afficher la quantité moyenne en stock des ordinateurs de couleur Rouge
SELECT avg(qtestk) "quantité"
FROM ordinateur
Where Couleur = 'R';
 Afficher les prix minimums et maximums des ordinateurs I3
SELECT max(prix) "maximum",min(prix) "minimum"
FROM ordinateur
WHERE pro = 'I3';

90
Exemples
 Donner le nombre d’ordinateurs avec offre
SELECT Count(*) "Nombre"
FROM Ordinateur
WHERE offre is not null;

 Ou bien
SELECT Count(offre) "Nombre"
FROM Ordinateur;

91
7. Les fonctions de groupe :
classification de résultat
 Il est possible de regrouper (classifier, diviser) les données d’une table en
groupes.

 Objectif : calculer un résultat pour chaque groupe.

 Syntaxe
SELECT Permet de définir le critère de classement
FROM
WHERE
GROUP BY expression
HAVING condition

Permet de définir une condition sur les groupes

92
Exemples
 Afficher la quantité en stock des ordinateurs selon le type du processeur
SELECT pro, sum(Qtestk) "Qte totale"
FROM Ordinateur
GROUP BY pro;
 Afficher les prix min et max des ordinateurs selon le type du processeur
SELECT pro, min(prix)"P MIN", max(prix)"P MAX"
FROM Ordinateur
GROUP BY pro;
 Afficher la quantité en stock des ordinateurs par couleur et type du processeur
SELECT pro, couleur, sum(Qtestk) "Qte totale"
FROM Ordinateur
GROUP BY pro, couleur;
Remarque : avec la clause GROUP BY, on ne peut mettre dans la clause
SELECT qu’une caractéristique du groupe : critère de groupement et/ou
fonction de groupe
93
7. Les fonctions de groupe :
classification de résultat
 Pour définir une condition portant sur un groupe et ayant une fonction de
groupe comme prédicat, il faut utiliser la clause HAVING.

 Afficher la quantité en stock, >= 50, des ordinateurs selon le type du


processeur
SELECT pro, sum(Qtestk) "Qte totale"
FROM Ordinateur
GROUP BY pro
HAVING sum(Qtestk)>= 50 ;
 Afficher les marques ayant un prix moyen < 1000
SELECT marque, avg(prix) "Prix Moy"
FROM Ordinateur
GROUP BY marque
HAVING avg(prix) < 1000 ;

94
7. Les fonctions de groupe :
classification de résultat
 Afficher adresses des magasins ayant au moins deux types d’ordinateurs I3
SELECT adresse
FROM Magasin, Ordinateur
WHERE mag = nummag
and pro = 'I3'
GROUP BY adresse
HAVING count(*)>= 2 ;
 Afficher marques ayant un prix moyen < au prix moyen total
SELECT marque, avg(prix)
FROM Ordinateur
GROUP BY marque
HAVING avg(prix)<(SELECT avg(prix)
FROM Ordinateur);

95
8. Les fonctions de chaînes de caractères

 RTRIM (ch) : supprime l'espace à la fin de la chaîne  LTRIM.


 RPAD (ch,n) : ajoute n espaces à la fin de la chaîne  LPAD.
 INITCAP(ch) : met en majuscule la première lettre de chaque mot
de la chaîne.
 LENGTH(ch) : renvoie la longueur d'une chaîne.
 LOWER(ch) : transforme la chaîne ch en minuscule  UPPER.
 SUBSTR(ch,m,n) : permet d'extraire une sous-chaîne de ch qui
commence à partir du caractère à la position m et de longueur n.
 ch1ch2 : concatène les deux chaînes.

96
Exemples
 Afficher processeur et qtestk des ordinateurs Dell
SELECT ref, qtestk FROM Ordinateur
WHERE upper(ltrim(rtrim(marque)))='DELL';
 Supprimer les ordinateurs dont la marque est composée au maximum de 6
caractères.
DELETE FROM Ordinateur
WHERE length (marque) <= 6;
 Afficher les marques avec la première lettre en majuscule
SELECT distinct initcap(lower(marque))
FROM Ordinateur;
 Afficher les numéros et couleurs des produits dont la désignation contient
"sh" à partir de la 3ème position.
SELECT ref, couleur FROM ordinateur
WHERE Lower(substr(marque,3,2))=‘sh';

97
Exemple

 Concaténer à la référence les trois premières caractères de la marque


ainsi que la couleur. Les trois éléments doivent être séparés par le
carcatère '-'.

update ordinateur
set ref=ref||'-'||substr(marque,1,3)||'-'||couleur

98
9. Les fonctions de conversion

 TO_CHAR(valeur-date,format-date) /
TO_CHAR(nombre[,format]) : convertit une date ou une valeur
numérique à une chaîne de caractères.

 TO_DATE(valeur-chaîne,format-date) : convertit une chaîne de


caractères représentant une date à une date.

 TO_NUMBER(ch[,format]) : convertit une chaîne de caractères


représentant un nombre en nombre.

99
Quelques formats de dates
YYYY : Année sans virgule
YY : 2 derniers chiffres de l’année
YEAR : Année en toute lettre
Q : Numéro de trimestre de l’année (1 à 4)
MM : Numéro de mois (1 à 12).
MON : Nom du mois abrégé en 3 lettre
WW : Numéro de semaine de l’année (1 à 52)
W : Numéro de semaine dans le mois
DDD : Numéro du jour dans l’année (1 à 366)
DD : Numéro du jour dans le mois (1 à 31)
D : Numéro du jour dans la semaine (1 à 7)
DAY : Nom du jour sur 9 caractères
DY : Nom du jour abrége en 3 lettres
HH12 : Heure sur 12 heures (1 à 12)
HH24 : Heure sur 24 heures (1 à 24)
M : Minutes (1 à 60)
SS : Secondes (1 à 60)
SSSS : Secondes après minuit

100
Exemple

 Afficher les ordinateurs arrivés en stock pendant l’année en cours :


Select * From ordinateur
where to_char(date_Entree, 'YYYY') =
to_char(sysdate, 'YYYY');

 Afficher les ordinateurs ayant au moins 6 mois en stock :


Select * From ordinateur
Where to_number(to_char(sysdate, 'MM'))-
to_number(to_char(date_Entree, 'MM'))>=6;

101
10. La pseudo-colonne ROWNUM

 La pseudo-colonne ROWNUM retourne un entier indiquant l’ordre


séquentiel de chaque enregistrement extrait par la requête.
 Exemple :
select rownum, ref, marque from ordinateur;

ROWNUM REF MARQUE


--------- ----------- ---------------
1 ... ...
2 ... ...

102
Syntaxe Complète de la commande SELECT

SELECT [ALL|DISTINCT] { [table]* |expr [alias], [expr [alias]],..}


FROM table [alias], table [alias],...
[WHERE condition]
[GROUP BY expr, expr,...]
[HAVING condition]
[{UNION | INTERSECT | MINUS } SELECT ...]
[ORDER BY {expr|posn} [ASC | DESC], {expr|posn} [ASC|DESC];

| la barre horizontale indique un choix entre alternatives


{} choix obligatoire
[] options
Soulignement pour les options par défaut

103

Vous aimerez peut-être aussi