CoursBD Ginf1 PARTIE3
CoursBD Ginf1 PARTIE3
Chapitre 7 :
Manipulation de Données avec SQL
112
112
Introduction
Le LMD englobe :
L’insertion de nouvelles données : insert
La modification de données : update
Et la suppression de données existantes : delete
113
1
08/04/2021
Insertion de données
114
Insertion de données
1ère Forme : Insertion des valeurs pour la totalité des colonnes de la table :
SYNTAXE
115
2
08/04/2021
Insertion de données
Exemple 1 :
INSERT INTO client VALUES ( 100, ‘Ahmed Mohamed', 70111222,’ rue ezzouhour 102’, 1000, ’Tunis’) ;
INSERT INTO client (numcl, nomcl) VALUES( 100, ' Ahmed Mohamed ') ;
116
Insertion de données
2ème Forme : Insertion à travers la copie des valeurs des colonnes d'une autre
table.
SYNTAXE
Exemple :
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' ;
119
4
08/04/2021
Suppression de données
La suppression des données consiste à supprimer une ou
plusieurs lignes d’une table.
SYNTAXE
120
Chapitre 8 :
Interrogation de Données avec SQL
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 :
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] ;
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 :
123
6
08/04/2021
124
Les opérateurs
+ , - , * , / , = , <> , != , >, < , >= , <= , MOD, AND, OR
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.
125
7
08/04/2021
Les opérateurs
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.
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.
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)
128
129
9
08/04/2021
130
131
10
08/04/2021
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
132
133
11
08/04/2021
134
Format de date
135 Cours BD
© M. TURKI (2020 / 2021)
135
12
08/04/2021
136
SELECT TO_CHAR (sysdate, 'Month DD,YYYY') FROM dual; ‘ April 08, 2021‘
137
13
08/04/2021
138
139
14
08/04/2021
140
1. Sélectionner les numéros distincts des clients qui ont fait des commandes.
SELECT DISTINCT numClt From Commande ;
141
15
08/04/2021
GROUP BY expression
[HAVING condition]
142
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
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.
144
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' );
145
17
08/04/2021
Requête 1
Opérateur
Requête 2
146
Requête 1
UNION
Requête 2
147
18
08/04/2021
Exemple :
Soit la table suivante:
ETUDIANT (MAT_ET, NOM_ET, PRE_ET,VILLE, CLASSE, GROUPE)
SELECT NOM_ET
FROM ETUDIANT
WHERE GROUPE = ‘G1’
UNION
SELECT NOM_ET
FROM ETUDIANT
WHERE GROUPE = ‘G2’;
148
Requête 1
INTERSECT
Requête 2
149
19
08/04/2021
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’;
150
Requête 1
MINUS
Requête 2
151
20
08/04/2021
Exemple :
Soit la table suivante:
ETUDIANT (MAT_ET, NOM_ET, PRE_ET,VILLE, CLASSE, GROUPE)
SELECT NOM_ET
FROM ETUDIANT
MINUS
SELECT NOM_ET
FROM ETUDIANT
WHERE CLASSE = ‘IG2’;
152
153
21
08/04/2021
En SQL :
SELECT NOM_ET, PRENOM_ET, CLASSE, GROUPE
FROM R1, R2 ;
Cours BD © M. TURKI (2020 / 2021) 154
154
La Jointure
155
22
08/04/2021
Types de Jointure
156
Types de Jointure
SELF JOIN : permet d’effectuer une jointure d’une table avec elle-
même comme si c’était une autre table.
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:
158
INNER JOIN
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 )
SELECT DES_PDT
FROM PRODUIT P, LIG_COM L
WHERE P.CODE_PDT = L.CODE_PDT AND NUM_COM = 25;
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:
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
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:
163
26
08/04/2021
RIGHT JOIN
Exemple :
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:
165
27
08/04/2021
FULL JOIN
Exemple :
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;
167
28
08/04/2021
CROSS JOIN
Exemple :
168
Solution 1:
SELECT P1.DES_PDT
FROM PRODUIT P1
JOIN PRODUIT P2 ON P.1QTE_STK >= P2.QTE_STK
WHERE P2.DES_PDT = ‘ordinateur’ ;
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;
170
Les vues
As Ordre_Select
171
30
08/04/2021
Les vues
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.
173
31