0% ont trouvé ce document utile (0 vote)
76 vues31 pages

CoursBD Ginf1 PARTIE3

Le document décrit les opérations de base de données SQL telles que l'insertion, la modification et la suppression de données, ainsi que l'interrogation de données à l'aide de requêtes. Il explique la syntaxe et les opérateurs utilisés dans les requêtes SQL.

Transféré par

radhwa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
76 vues31 pages

CoursBD Ginf1 PARTIE3

Le document décrit les opérations de base de données SQL telles que l'insertion, la modification et la suppression de données, ainsi que l'interrogation de données à l'aide de requêtes. Il explique la syntaxe et les opérateurs utilisés dans les requêtes SQL.

Transféré par

radhwa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

08/04/2021

Cours : Bases de Données


Auditoire : GINF1

Chapitre 7 :
Manipulation de Données avec SQL

Dr. Mohamed TURKI


Maître Assistant en Informatique, ISIMS - Université de Sfax

112

112

Introduction

Le langage de manipulation des données (LMD) permet la


manipulation des objets créés par le langage de définition
de données (LDD).

Le LMD englobe :
L’insertion de nouvelles données : insert
La modification de données : update
Et la suppression de données existantes : delete

Cours BD © M. TURKI (2020 / 2021) 113

113

1
08/04/2021

Insertion de données

L’insertion consiste à ajouter de nouvelles lignes dans une table.


Elle peut affecter toutes les colonnes d’une table ou seulement
un sous-ensemble de ces colonnes, les autres prendront
automatiquement des valeurs nulles.
On distingue deux formes pour la commande d’insertion :
Insertion des valeurs pour la totalité des colonnes de la table
Insertion à travers la copie des valeurs des colonnes d'une
autre table

Cours BD © M. TURKI (2020 / 2021) 114

114

Insertion de données
1ère Forme : Insertion des valeurs pour la totalité des colonnes de la table :

SYNTAXE

INSERT INTO nom_table [(colonne1, colonne2, …)] VALUES (valeur1, valeur2,…) ;

Les valeurs des colonnes de type caractère ou chaîne de


caractère doivent apparaître entre deux cotes ( ' ' ).
Si la valeur est nulle, on doit mettre deux cotes successives (sans
blanc).
Si le type est numérique et la valeur est nulle, il suffit de la
dépasser mais il faut mettre la liste des champs qui devient
indispensable sans mettre le champ dont la valeur sera nulle.
Cours BD © M. TURKI (2020 / 2021) 115

115

2
08/04/2021

Insertion de données
Exemple 1 :

INSERT INTO client VALUES ( 100, ‘Ahmed Mohamed', 70111222,’ rue ezzouhour 102’, 1000, ’Tunis’) ;

Exemple 2 : On peut ne pas mettre certaines colonnes de la table. Ce qui


veut dire que les valeurs des colonnes non citées sont nulles :

INSERT INTO client (numcl, nomcl) VALUES( 100, ' Ahmed Mohamed ') ;

Cours BD © M. TURKI (2020 / 2021) 116

116

Insertion de données
2ème Forme : Insertion à travers la copie des valeurs des colonnes d'une autre
table.
SYNTAXE

INSERT INTO nom_table [(colonne1, colonne2, …)]


Requête ;

Exemple :

INSERT INTO client (numcl, nomcl,tel,adr) SELECT * FROM CLIENT_SOUSEE;

Cours BD © M. TURKI (2020 / 2021) 117

117

3
08/04/2021

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.
Les valeurs peuvent être des constantes, des expressions ou des
résultats de sous-requêtes.
Cours BD © M. TURKI (2020 / 2021) 118

118

Modification de données

Exemple : Modifier l'adresse du client ‘Ahmed Mohamed’ qui devient ‘10, cité
Kantaoui’.

UPDATE client
SETadr_clt = '10, citéKantaoui'
WHERE nom = 'Ahmed Mohamed' ;

Cours BD © M. TURKI (2020 / 2021) 119

119

4
08/04/2021

Suppression de données
La suppression des données consiste à supprimer une ou
plusieurs lignes d’une table.
SYNTAXE

DELETE FROM nom_table


[WHERE condition ];

Exemple : Supprimer tous les clients de ‘Tunis’.

DELETE FROM client where ville = ‘Tunis’;

Cours BD © M. TURKI (2020 / 2021) 120

120

Cours : Bases de Données


Auditoire : GINF1

Chapitre 8 :
Interrogation de Données avec SQL

Dr. Mohamed TURKI


Maître Assistant en Informatique, ISIMS - Université de Sfax

121

121

5
08/04/2021

Présentation
SQL est basé sur l’utilisation de blocks de qualification dont la structure est
composée principalement de trois éléments :

SELECT: définit la liste des colonnes que l'on veut obtenir.

FROM : n'indique que 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.
SELECT col1, col2, … ,coln
SYNTAXE FROM nom_table , ..., nom_table
1 n

[WHERE condition] ;

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.
Cours BD © M. TURKI (2020 / 2021) 122

122

Présentation
Notion d'Alias : chaque fois qu'une requête d'interrogation est
exécutée, les noms des colonnes définies dans la structure de la table
apparaissent comme titres de colonnes. On peut modifier ces noms
de colonnes, à l'affichage uniquement, en ajoutant des ALIAS. La
commande devient :

SELECT colonne1 AS c1, colonne2 As c2


FROM table As t ;
Ou bien

SELECT colonne1 c1, colonne2 c2


FROM table t ;

Si l'alias est composé de plusieurs mots il faut qu'il apparaisse entre


cotes : " " .

Cours BD © M. TURKI (2020 / 2021) 123

123

6
08/04/2021

Recherche avec qualification


Dans ce type de recherche, seules quelques lignes sont à
sélectionner selon une certaine condition. La condition est
composée généralement de trois termes :
un nom de colonne,
un opérateur de comparaison,
et une constante ou une colonne ou une liste de valeurs.
SYNTAXE
SELECT col1, col2, … ,coln
FROM nom_table1, ..., nom_tablen
[WHERE condition] ;

Cours BD © M. TURKI (2020 / 2021) 124

124

Les opérateurs
+ , - , * , / , = , <> , != , >, < , >= , <= , MOD, AND, OR

BETWEEN V1 and V2 : permet de tester si le contenu d'une colonne


est compris entre les valeurs V1 et V2.

IS NULL : permet de tester si le contenu d'une colonne est une valeur


nulle (indéfinie).

IN (liste de valeurs) : permet de tester si le contenu d'une colonne


coïncide avec l'une des valeurs de la liste.

ALL : Assurer qu’une condition est =, !=, >, >=, < ou <= pour tous les
résultats retournés par une sous-requête.

ANY : Vérifier si une valeur est =, !=, >, >=, < ou <= pour au moins une
des valeurs de la sous-requête.

UNION, INTERSECT, MINUS : des opérateurs ensemblistes.

Cours BD © M. TURKI (2020 / 2021) 125

125

7
08/04/2021

Les opérateurs

LIKE chaîne_générique : permet de tester si le contenu d'une colonne


ressemble à une chaîne de caractères obtenues à partir de la chaîne
générique. La chaîne générique est une chaîne de caractères qui
contient 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.

Tous les opérateurs spécifiques peuvent être mis sous forme négative
en les faisant précéder de l'opérateur de négation NOT : NOT IN, NOT
BETWEEN, NOT LIKE, IS NOT NULL.

Cours BD © M. TURKI (2020 / 2021) 126

126

Les opérateurs
Exemple:
Soit les tables PRODUIT et CLIENT suivantes :
PRODUIT (codepdt, designation, qtestk, prixU)
CLIENT (numclt, nom, ville)

Lister tous les produits dont la quantité en stock est inférieure à 10.

SELECT * FROM produit WHERE qtestk<10;

Sélectionner la désignation et le prix unitaire des produits dont le prix


unitaire est compris entre 5 et 10.

SELECT designation, prixU FROM produit


WHERE prixU between 5 and 10;

Cours BD © M. TURKI (2020 / 2021) 127

127

8
08/04/2021

Les opérateurs
PRODUIT (codepdt, designation, qtestk, prixU)
Sélectionner tous les clients de Sfax et de Tunis. CLIENT (numclt, nom, ville)

SELECT * FROM client


WHERE ville IN ('Sfax', 'Tunis');
Sélectionner la désignation et le prix unitaire des produits disponibles dont le
prix unitaire est compris entre 5 et 10.
SELECT designation, prixU FROM produit
WHERE qtestk>0 and prixU between 5 and 10;
Sélectionner les noms des clients qui commencent par la lettre T.
SELECT nom FROM client WHERE nom LIKE 'T%';

Sélectionner les noms des clients dont la deuxième lettre est R.


SELECT nom FROM clients WHERE nom LIKE ‘_R%';

Cours BD © M. TURKI (2020 / 2021) 128

128

Les expressions arithmétiques

Dans les clauses SELECT et WHERE, on peut utiliser des expressions


arithmétiques et des fonctions telles que :

ABS(n) : permet de calculer la valeur absolue de n.


CEIL(n) : permet d'avoir le plus petit entier supérieur ou égal à n.
FLOOR(n) : permet d'avoir la partie entière de n.
MOD(m, n) : permet d'avoir le reste de la division entière de m par n.
ROUND(m, n) : arrondit la valeur à n décimal.
POWER(m, n) : permet d'avoir m puissance n.
SIGN(n) : donne –1 si n <0, donne 0 si n=0 et donne 1 si n>0.
SQRT(n) : permet d'avoir √x.
TRUNC(m, n) : permet de tronquer la valeur après n décimales. Si m est négatif,
la valeur de m est tronquée avant le point décimal.

Cours BD © M. TURKI (2020 / 2021) 129

129

9
08/04/2021

Les expressions arithmétiques


Exemples :

Select TRUNC (121.371,1) from Dual;  121.3


Select TRUNC (121.371,-1) from Dual;  120
Select TRUNC (121.371,-2) from Dual;  100
Select TRUNC (125.815, -3) from Dual; 0

Select ROUND(15.193,1) from Dual;  15.2


Select ROUND(15.193,-1) from Dual;  20
Select ROUND(1.5), ROUND(2.5) From Dual;  2 et 3

Cours BD © M. TURKI (2020 / 2021) 130

130

Les fonctions s’appliquant sur les chaînes de


caractère

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

INSTR(ch1,ch2,[n[,m]]) : cherche la position de la sous-chaîne ch2 dans la


chaîne ch1 à partir de la position n et si l’on souhaite , à partir de la mième
occurrence de ch2 dans ch1. n et m sont optionnels et ont par défaut la valeur 1

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 commençant à


partir du caractère de position m et de longueur n

ch1ch2 : concatène les deux chaînes

Cours BD © M. TURKI (2020 / 2021) 131

131

10
08/04/2021

Les fonctions s’appliquant sur les chaînes de


caractère
TRANSLATE(ch,ch1,ch2) : permet de transformer dans la chaîne ch les
caractères de ch1 par ceux de ch2.

TRANSLATE('1tech23', '123', '456')  '4tech56'

TRANSLATE('222tech', '2ec', '3it')  '333tith'

Replace(chaine, ch1[,ch2]) : remplace une chaîne par une autre dans une
colonne. Si on ne met pas ch2, ch1 va être remplacée par un vide

REPLACE('123123tech', '123');  'tech'

REPLACE('123tech123', '123');  'tech'

REPLACE('222tech', '2', '3');  '333tech'

REPLACE('0000123', '0');  '123'

Cours BD © M. TURKI (2020 / 2021) 132

132

Les fonctions s’appliquant sur les chaînes de


caractère
Exemples :
Projet (numpr, nompr, villepr)
1 pr1 Mednine
2 pr2 Sousse
3 pr3 Tunis
4 pr4 Gabes

SELECT INSTR(villepr,'e',3,1) FROM Projet ;


donne : 7
6
0
4

Magasin (magnum, magloc, magger)


m1 Sfax turki
m2 Sousse dhouib

SELECT SUBSTR(magger,2,3) FROM Magasin ;


donne : urk
hou
Cours BD © M. TURKI (2020 / 2021) 133

133

11
08/04/2021

Les fonctions s’appliquant sur les dates

ADD_MONTHS(d,n) : permet d'ajouter n mois à la date d sachant que n est un


entier.
GREATEST(d1,d2) : permet d'avoir la date la plus récnte parmi d1 et d2 ≠ LEAST.
MONTHS_BETWEEN(d1,d2) : permet d'avoir le nombre de mois qui se trouvent
entre la date d1 et la date d2.
LAST_DAY(d) : permet de retourner la date du dernier jour du mois de la date d.
SYSDATE : donne la date et l'heure système.
Exemple:

Select LAST_DAY(‘13/04/2021') From Dual;  donne : 30/04/2021


select LEAST ('12/12/2021','12/10/2019') from dual;  donne 12/10/2019
select GREATEST ('12/12/2021','12/10/2019') from dual;  donne 12/12/2021

Cours BD © M. TURKI (2020 / 2021) 134

134

Format de date

alter session set nls_date_format = ‘DD-MM-YYYY’;

alter session set nls_date_format = 'YYYY-MM-DD’;

alter session set nls_date_format = 'HH24:MI:SS’;

alter session set nls_date_format = 'DD-MON-YYYY


HH24:MI:SS’;

135 Cours BD
© M. TURKI (2020 / 2021)

135

12
08/04/2021

Les fonctions de conversion

TO_DATE(chaîne[,format_date]) : convertit une chaîne de caractères


(1er paramètre) ayant le format (2ème paramètre) à une valeur de type Date.

alter session set nls_date_format = ‘DD-MM-YYYY’;

SELECT TO_DATE('10-12-20','MM-DD-YY') FROM dual;  12/10/2020

SELECT TO_DATE('10-12-20','DD-MM-YY') FROM dual;  10/12/2020

alter session set nls_date_format = ‘DD-MM-YYYY HH:MI:SS';

SELECT TO_DATE('12-31-2020 07:15:20','MM-DD-YYYY HH:MI:SS') FROM


dual;  31/12/2020 07:15:20

Cours BD © M. TURKI (2020 / 2021) 136

136

Les fonctions de conversion


TO_CHAR(date, [,format_date]) / TO_CHAR(nombre[,format_nombre]):
convertit une date ou une valeur numérique en chaîne de caractères.
SELECT TO_CHAR(1210.73, '9999.9') FROM dual;  ’1210.7‘

SELECT TO_CHAR (21, '000099') FROM dual;  '000021'

SELECT TO_CHAR (sysdate, 'yyyy/mm/dd') FROM dual;  ‘ 2021/04/08‘

SELECT TO_CHAR (sysdate, 'Month DD,YYYY') FROM dual;  ‘ April 08, 2021‘

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


chiffres en valeur de type NUMBER.
SELECT TO_NUMBER('456,64') FROM DUAL;  456,64

SELECT TO_NUMBER('1210.73', '9999.99') FROM DUAL;  1210.73

SELECT TO_NUMBER ('546', '999') FROM DUAL;  546

Cours BD © M. TURKI (2020 / 2021) 137

137

13
08/04/2021

Les fonctions de conversion


Parmi les formats de dates on cite :
YYYY Année sans virgule
YYY 3 derniers chiffres de l’année
YY 2 derniers chiffres de l’année
Y Dernier chiffre de l’année
Q Numéro de trimestre de l’année (1 à 4)
WW Numéro de semaine de l’année (1 à 52)
W Numéro de semaine dans le mois
MM Numéro du mois (1 à 12)
DDD Numéro de jour dans l’année (1 à 366)
DD Numéro du jour dans le mois (1 à 31)
D Numéro de jour dans la semaine (1 à 7)
YEAR Année en toute lettre
MON Nom du mois abrégé en toute lettre
DAY Nom du jour sur 9 caractères
DY Nom du jour abrégé en 3 lettres
Cours BD © M. TURKI (2020 / 2021) 138

138

Les fonctions d’agrégat


AVG : permet d'avoir la moyenne arithmétique d'un ensemble donné.
COUNT : permet d'avoir le nombre d'occurrences des enregistrements.
MAX : permet d'avoir la valeur maximale dans une colonne.
MIN : permet d'avoir la valeur minimale dans une colonne.
SUM : permet d'avoir la somme des éléments.
STDDEV : permet d'avoir l'écart type.
VARIANCE : permet d'avoir la variance.
DISTINCT : Pour ne prendre que les valeurs distinctes.
Remarques:
Chacune de ces fonctions a comme argument un nom de colonne ou une expression
arithmétique. Elles ignorent les valeurs nulles et par défaut prennent les valeurs multiples
pour des valeurs différentes.
La fonction COUNT peut prendre comme argument le caractère * ce qui veut dire que
nous voulons connaître le nombre de lignes sélectionnées.

Cours BD © M. TURKI (2020 / 2021) 139

139

14
08/04/2021

Les fonctions d’agrégat

Il ne faut pas mettre une


fonction d’agrégat après la
clause WHERE !!!

Cours BD © M. TURKI (2020 / 2021) 140

140

Les fonctions d’agrégat


Exemples :
Soit les tables Client et Commande suivantes:
Client (numClt, nomClt, adresse, telClt, ville)
Commande (numC, DateC, #numClt, mntC)
Det_Commande (numC, numPdt, QteC)

1. Sélectionner les numéros distincts des clients qui ont fait des commandes.
SELECT DISTINCT numClt From Commande ;

2. Trouver le nombre de clients de la ville de Sfax dont le numéro de téléphone


commence par 221.

Select COUNT(*) From Client


Where ville = 'Sfax' AND TRUNC(tel,-3)=22100000;
Cours BD © M. TURKI (2020 / 2021) 141

141

15
08/04/2021

Classification des résultats


Il est possible de regrouper (classifier) les résultats obtenus
permettant d'avoir ensemble les lignes ayant une même valeur
pour la colonne de classification.
La classification permet aussi d'effectuer un calcul tel que la
moyenne ou la somme des valeurs de chaque groupe et de
présenter le résultat sous forme d'une ligne par groupe.

GROUP BY expression

[HAVING condition]

Cours BD © M. TURKI (2020 / 2021) 142

142

Classification des résultats


Remarque :
On ne peut associer des colonnes et des fonctions de groupe dans la liste de
sélection d'une instruction SELECT que par le biais de la clause GROUP BY,
parce que SELECT retourne autant de lignes qu'il en existe dans la table et les
fonctions de groupe ne retournent qu'une seule ligne.
Comme il n'est pas logique de retourner ces deux types de valeurs en même
temps, il faut utiliser donc la clause GROUP BY pour pouvoir effectuer ce genre
de combinaison dans la liste de sélection. Client (numClt, nomClt, adresse, telClt, ville)
Commande (numC, DateC, #numClt, mntC)
Exemple : Det_Commande (numC, numPdt, QteC)
Trouver la somme des commandes par client.
SELECT numClt, SUM(mntC) FROM Commande C
GROUP BY numClt;

Trouver les clients qui ont réalisé un chiffre d’affaire (sum(mntc)) supérieur à 5000 DT.
SELECT numClt, SUM(mntC) FROM Commande C
GROUP BY numClt
HAVING SUM (mntC) > 5000 ;
Cours BD © M. TURKI (2020 / 2021) 143

143

16
08/04/2021

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];

Remarque :
Si on ne spécifie pas asc ou desc par défaut le tri est croissant (asc).

Exemple :
Donner la liste des produits par ordre de prix unitaire croissant et ceux ayant le
même prix par ordre alphabétique décroissant.

SELECT designation, prixU FROM produit


ORDER BY prixU, designation desc ;

Cours BD © M. TURKI (2020 / 2021) 144

144

Les requêtes imbriquées


La requête imbriquée figure lorsqu'une sous requête apparaît dans la clause
WHERE ou HAVING de la requête principale.

Exemple :
1. Trouver la désignation des produits dont le prix unitaire est égal à celui du
produit ‘chaise’.
SELECT designation FROM produit
WHERE prixU = ( SELECT prixU FROM produit
WHERE designation = 'chaise' );

2. Trouver les produits dont le prix est supérieur au prix moyen.

SELECT designation FROM produit


WHERE prixU> ( SELECT AVG(prixU) FROM produit );

Cours BD © M. TURKI (2020 / 2021) 145

145

17
08/04/2021

Les opérateurs ensemblistes


Nous distinguons les opérateurs ensemblistes suivants: UNION, INTERSECT,
MINUS, le produit cartésien et la jointure
La forme générale de ces opérateurs est :

Requête 1
Opérateur
Requête 2

Pour tous les opérateurs qu’on va présenter, il est à noter que :


Il faut utiliser le même nombre de variables avec les mêmes types dans les deux
requêtes.
Les doublons sont automatiquement éliminés.
Les titres des colonnes résultats sont ceux de la 1ère requête.
La clause ORDER BY ne fait plus référence aux noms des colonnes, mais à leurs
numéros.
Cours BD © M. TURKI (2020 / 2021) 146

146

Les opérateurs ensemblistes : UNION


L’union est l’opération classique de la théorie des ensembles, elle
porte sur deux relations de même schéma R1 et R2 consistant à
construire une relation de même schéma R3 ayant pour tuples
ceux appartenant à R1 ou R2 ou aux deux relations.
La forme générale pour cette opération est la suivante :

Requête 1
UNION

Requête 2

Cours BD © M. TURKI (2020 / 2021) 147

147

18
08/04/2021

Les opérateurs ensemblistes : UNION

Exemple :
Soit la table suivante:
ETUDIANT (MAT_ET, NOM_ET, PRE_ET,VILLE, CLASSE, GROUPE)

Donner les noms des étudiants du groupe G1 et ceux du groupe G2 ?

SELECT NOM_ET
FROM ETUDIANT
WHERE GROUPE = ‘G1’
UNION
SELECT NOM_ET
FROM ETUDIANT
WHERE GROUPE = ‘G2’;

Cours BD © M. TURKI (2020 / 2021) 148

148

Les opérateurs ensemblistes : INTERSECT


L’intersection est une opération portant sur deux relations de
même schéma R1 et R2, consistant à construire une relation de
même schéma R3 ayant pour tuples ceux appartenant à R1 et
R2 en même temps.
La forme générale pour cette opération est la suivante :

Requête 1
INTERSECT

Requête 2

Cours BD © M. TURKI (2020 / 2021) 149

149

19
08/04/2021

Les opérateurs ensemblistes : INTERSECT

Exemple :
Soit la table suivante:
ETUDIANT (MAT_ET, NOM_ET, PRE_ET,VILLE, CLASSE, GROUPE)

Donner les noms des étudiants de la classe IG4 et qui habitent à Sfax.

SELECT NOM_ET
FROM ETUDIANT
WHERE CLASSE = ‘IG4’
INTERSECT
SELECT NOM_ET
FROM ETUDIANT
WHERE VILLE = ‘Sfax’;

Cours BD © M. TURKI (2020 / 2021) 150

150

Les opérateurs ensemblistes : MINUS


La différence est une opération portant sur deux relations de
même schéma R1 et R2, consistant à construire une relation de
même schéma R3 ayant pour tuples ceux appartenant à R1 et
n’appartenant pas à R2.
La forme générale pour cette opération est la suivante :

Requête 1
MINUS
Requête 2

Cours BD © M. TURKI (2020 / 2021) 151

151

20
08/04/2021

Les opérateurs ensemblistes : MINUS

Exemple :
Soit la table suivante:
ETUDIANT (MAT_ET, NOM_ET, PRE_ET,VILLE, CLASSE, GROUPE)

Donner les noms des étudiants de la BD sauf ceux de la classe IG2.

SELECT NOM_ET
FROM ETUDIANT
MINUS
SELECT NOM_ET
FROM ETUDIANT
WHERE CLASSE = ‘IG2’;

Cours BD © M. TURKI (2020 / 2021) 152

152

Les opérateurs ensemblistes : Produit cartésien


Le produit cartésien est une opération portant sur deux relations R1 et R2
qui n’ont pas nécessairement le même schéma, consistant à construire une
relation R3 ayant pour schéma la concaténation de ceux des relations
opérandes et pour tuples toutes les combinaisons des tuples des relations
opérandes.
Exemple :
Soit les relations R1 et R2 définies par :

Cours BD © M. TURKI (2020 / 2021) 153

153

21
08/04/2021

Les opérateurs ensemblistes : Produit cartésien


Question : Donner les noms et prénoms des étudiants avec les différentes
classes et les différents groupes existants.
Il suffit de faire le produit cartésien :

En SQL :
SELECT NOM_ET, PRENOM_ET, CLASSE, GROUPE
FROM R1, R2 ;
Cours BD © M. TURKI (2020 / 2021) 154

154

La Jointure

Les jointures en SQL permettent d’associer plusieurs tables dans


une même requête. Cela permet d’exploiter la puissance des
bases de données relationnelles pour obtenir des résultats qui
combinent les données de plusieurs tables de manière efficace.
Les jointures consistent à associer des lignes de 2 tables en
associant l’égalité des valeurs d’une colonne d’une première
table par rapport à la valeur d’une colonne d’une seconde.

Cours BD © M. TURKI (2020 / 2021) 155

155

22
08/04/2021

Types de Jointure

Il existe plusieurs méthodes pour associer 2 tables ensemble.


Nous citons principalement :
INNER JOIN : jointure interne (ou simple) pour retourner les
enregistrements quand la condition est vraie dans les 2 tables. C’est l’une
des jointures les plus communes.
LEFT JOIN (ou LEFT OUTER JOIN) : jointure externe pour
retourner tous les enregistrements de la table de gauche même si la
condition n’est pas vérifié dans l’autre table.
RIGHT JOIN (ou RIGHT OUTER JOIN) : jointure externe pour
retourner tous les enregistrements de la table de droite même si la
condition n’est pas vérifiée dans l’autre table.

Cours BD © M. TURKI (2020 / 2021) 156

156

Types de Jointure

FULL JOIN (ou FULL OUTER JOIN) : jointure externe pour


retourner les résultats quand la condition est vrai dans au moins une
des 2 tables.

CROSS JOIN : jointure croisée permettant de faire le produit


cartésien de 2 tables.

SELF JOIN : permet d’effectuer une jointure d’une table avec elle-
même comme si c’était une autre table.

Cours BD © M. TURKI (2020 / 2021) 157

157

23
08/04/2021

INNER JOIN
La commande INNER JOIN, appelée aussi EQUIJOIN, est un type de
jointures très communes pour lier plusieurs tables entre-elles. Cette
commande retourne les enregistrements lorsqu’il y a au moins une ligne
dans chaque colonne qui correspond à la condition.
La syntaxe suivante stipule qu’il faut sélectionner les enregistrements des
tables : table1 et table2 lorsque les données de la colonne id de table1 est
égale aux données de la colonne fk_id de table2.
SELECT col1, col2, …, coln
FROM table1
INNER JOIN table2 ON table1.id = table2.fk_id ;

Schéma:

Cours BD © M. TURKI (2020 / 2021) 158

158

INNER JOIN

La jointure simple peut aussi être écrite de la façon suivante


(ancienne syntaxe de SQL) :

SELECT col1, col2, …, coln


FROM table1, table2
WHERE table1.id = table2.fk_id ;

Cours BD © M. TURKI (2020 / 2021) 159

159

24
08/04/2021

INNER JOIN
Exemple :
Soit les deux tables suivantes :
PRODUIT ( CODE_PDT, DES_PDT, PU_PDT, QTE_STK )
LIG_COM ( NUM_CD, COD_PDT, QTE_COM )

Donner la désignation des produits dont le numéro Commande est 25.


SELECT DES_PDT
FROM PRODUIT P
INNER JOIN LIG_COM L ON P.CODE_PDT = L.CODE_PDT
WHERE NUM_COM =25 ;

SELECT DES_PDT
FROM PRODUIT P, LIG_COM L
WHERE P.CODE_PDT = L.CODE_PDT AND NUM_COM = 25;

Cours BD © M. TURKI (2020 / 2021) 160

160

LEFT JOIN
Appelée aussi LEFT OUTER JOIN permet de lister tous les résultats de
la table de gauche même s’il n’y a pas de correspondance dans la deuxième
table.
Syntaxe:
SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id;

Schéma:

Cours BD © M. TURKI (2020 / 2021) 161

161

25
08/04/2021

LEFT JOIN
Exemple :
Soit les deux tables suivantes :
PRODUIT ( CODE_PDT, DES_PDT, PU_PDT, QTE_STK )
LIG_COM ( NUM_CD, COD_PDT, QTE_COM )
N.B.
 La table PRODUIT contient 10 produits dont seulement 5 qui sont commandés
 La table LIG_COM contient 20 lignes

SELECT P.COD_PDT, DES_PDT, NUM_CD


FROM PRODUIT P
LEFT JOIN LIG_COM L ON P.COD_PDT = L.COD_PDT;

Cours BD © M. TURKI (2020 / 2021) 162

162

RIGHT JOIN
La commande RIGHT JOIN (ou RIGHT OUTER JOIN) permet de retourner
tous les enregistrements de la table de droite même s’il n’y a pas de
correspondance avec la table de gauche. S’il y a un enregistrement de la table
de droite qui ne trouve pas de correspondance dans la table de gauche, alors
les colonnes de la table de gauche auront NULL comme valeurs.
Syntaxe:
SELSELECT *
FROM table1
RIGHT JOIN table2 ON table1.id = table2.fk_id;

Schéma:

Cours BD © M. TURKI (2020 / 2021) 163

163

26
08/04/2021

RIGHT JOIN
Exemple :

Soit les deux tables suivantes :


PRODUIT ( CODE_PDT, DES_PDT, PU_PDT, QTE_STK )
LIG_COM ( NUM_CD, COD_PDT, QTE_COM )
N.B.
La table PRODUIT contient 10 produits dont seulement 5 qui sont commandés
La table LIG_COM contient 20 lignes

SELECT COD_PDT, DES_PDT, NUM_CD


FROM PRODUIT P
RIGHT JOIN LIG_COM L ON P.COD_PDT = L.COD_PDT;

Cours BD © M. TURKI (2020 / 2021) 164

164

FULL JOIN
La commande FULL JOIN (ou FULL OUTER JOIN) permet de combiner les
résultats des 2 tables, les associer entre eux grâce à une condition et remplir
avec des valeurs NULL si la condition n’est pas respectée.
Syntaxe:
SELECT *
FROM table1
FULL JOIN table2 ON table1.id = table2.fk_id;

Schéma:

Cours BD © M. TURKI (2020 / 2021) 165

165

27
08/04/2021

FULL JOIN
Exemple :

Soit les deux tables suivantes :


PRODUIT ( CODE_PDT, DES_PDT, PU_PDT, QTE_STK )
LIG_COM ( NUM_CD, COD_PDT, QTE_COM )

SELECT COD_PDT, DES_PDT, NUM_CD


FROM PRODUIT P
FULL JOIN LIG_COM L ON P.COD_PDT = L.COD_PDT;

Cours BD © M. TURKI (2020 / 2021) 166

166

CROSS JOIN
CROSS JOIN retourne le produit cartésien. Autrement dit, elle permet de
retourner chaque ligne d’une table avec toutes les lignes d’une autre table.
Ainsi effectuer le produit cartésien d’une table A qui contient 30 lignes avec
une table B de 40 lignes va produire 1200 lignes (30 x 40 = 1200).
Attention : Le nombre de lignes peut facilement être très élevé si
l’opération est effectuée sur des tables avec un grand nombre
d’enregistrements, cela peut ralentir sensiblement le serveur.
Syntaxe 1:
SELECT *
FROM table1
CROSS JOIN table2
Syntaxe 2:
SELECT *
FROM table1, table2;

Cours BD © M. TURKI (2020 / 2021) 167

167

28
08/04/2021

CROSS JOIN
Exemple :

Soit les deux tables suivantes :


PRODUIT ( CODE_PDT, DES_PDT, PU_PDT, QTE_STK )
LIG_COM ( NUM_CD, COD_PDT, QTE_COM )
N.B.
La table PRODUIT contient 10 produits dont seulement 5 qui sont commandés
La table LIG_COM contient 20 lignes

SELECT COD_PDT, DES_PDT, NUM_CD


FROM PRODUIT P
CROSS JOIN LIG_COM L;

 Cette requête renvoi 200 lignes : 10 * 20

Cours BD © M. TURKI (2020 / 2021) 168

168

SELF JOIN (auto-jointure)


Elle consiste à faire un rapprochement d’une table avec elle même ; c’est à
dire ramener sur une même ligne des informations qui proviennent de
plusieurs lignes de la même table.
Exemple :
Donner la désignation des produits dont la quantité en stock est supérieure ou
égale à celle du produit ‘ordinateur’.

Solution 1:

SELECT P1.DES_PDT
FROM PRODUIT P1
JOIN PRODUIT P2 ON P.1QTE_STK >= P2.QTE_STK
WHERE P2.DES_PDT = ‘ordinateur’ ;

Cours BD © M. TURKI (2020 / 2021) 169

169

29
08/04/2021

SELF JOIN
Solution 2: Cette solution consiste à créer un synonyme de la table produit.
CREATE SYNONYM P FOR PRODUIT ;
SELECT P.DES_PDT
FROM P, PRODUIT
WHERE PRODUIT.DES_PDT = ‘ordinateur’ AND P.QTE_STK >= PRODUIT.QTE_STK;

Solution 3: Cette solution consiste à utiliser une variable Alias pour la table produit.
SELECT P2.DES_PDT
FROM PRODUIT P1, PRODUIT P2
WHERE P1.DES_PDT = ‘ordinateur’ AND P2.QTE_STK >= P1.QTE_STK;

Solution 4: Cette solution consiste à utiliser une requête imbriquée.


SELECT P1.DES_PDT
FROM PRODUIT P1
WHERE P1.QTE_STK >= ( SELECT P2.QTE_STK
FROM PRODUIT P2
WHERE P2.DES_PDT = ‘ordinateur’) ;
Cours BD © M. TURKI (2020 / 2021) 170

170

Les vues

Une vue est une perception particulière des données d’une ou


de plusieurs tables. Elle est stockée sous forme de requêtes de
sélection dans le dictionnaire de données.

CREATE [OR REPLACE] VIEW nom_vue [ (liste_colonnes) ]

As Ordre_Select

[WITH CHECK OPTION] ;

Cours BD © M. TURKI (2020 / 2021) 171

171

30
08/04/2021

Les vues

La clause WITH CHECK OPTION permet de vérifier l'effet


des opérations INSERT, UPDATE ou DELETE réalisées sur la vue.
En effet, cette clause permet :
d'autoriser ou d’interdire au travers d'une vue une mise à jour
(UPDATE) ou suppression (DELETE) qui ne respecte pas la
condition de sélection qui définit la vue,
d'autoriser ou d'interdire l’insertion (INSERT) au travers d'une
vue d'une ligne qui ne satisfait pas la condition de sélection de
cette vue et qui disparaît aussitôt de son champ de visibilité.
 Si cette clause est omise aucune vérification n'aura lieu (même si la
condition définie dans la vue n’est pas respectée)

Cours BD © M. TURKI (2020 / 2021) 172

172

Les vues

Remarques :
Si la vue dérive de plusieurs tables ou si sa définition contient la clause
GROUP BY, la clause DISTINCT ou encore une fonction de groupe,
alors les opérations UPDATE, INSERT et DELETE sont interdites.
Si un attribut de la vue est défini comme une expression, cet attribut
ne peut subir d'UPDATE, et d'INSERT qui sont interdites sur la vue.
Si un attribut déclaré NOT NULL dans la table de base n'est pas
repris dans la vue, aucune INSERT n'est possible sur cette vue.
Pour les autres situations, toute opération d’UPDATE, INSERT ou
DELETE sur la vue entraine la modification des lignes
correspondantes dans la table correspondante.

Cours BD © M. TURKI (2020 / 2021) 173

173

31

Vous aimerez peut-être aussi