Académique Documents
Professionnel Documents
Culture Documents
Chapitre VI
Le langage SQL:
1
Langage d’Interrogation des Données
2
Langage d’Interrogation des Données
1. La clause SELECT
Exemple
Pour afficher le salaire annuel des employés, on peut utiliser la
requête suivante:
Exemple
Exemple
SELECT * from employe as emp;
OU
SELECT * from employe emp;
• Les tables mentionnées dans la clause FROM peuvent très bien
correspondre à des tables résultantes d’une requête, spécifiée entre
parenthèses, plutôt qu’à des tables existantes dans la base de
5
données.
Langage d’Interrogation des Données
Exemple
SELECT * FROM (SELECT * FROM table_1) AS t1, table_2
3. La clause WHERE
6
Langage d’Interrogation des Données
Les prédicats simples
SELECT NOME,SAL FROM EMP WHERE SAL BETWEEN 300 AND 500;
• exp1 IN (exp2 , exp3...) est vrai si exp1 est égale à l'une des expressions de
la liste entre parenthèses.
Exemple
Nemp Nome Prene Sal Poste Ndept
100 Bjaoui Ali 450 Secrétaire 1
101 Bjaoui Mohamed 560 Ingénieur 2
102 Gharbi Salwa 700 Secrétaire 2
La relation Emp
10
Langage d’Interrogation des Données
Ndept Nomd
1 Finance
2 Marketing
3 Comptabilité
La relation Dept
11
Jointure de la table sur elle
même
• Lister les noms des employés qui ont un supérieur, en indiquant
pour chacun le nom de son supérieur :
12
Langage d’Interrogation des Données
On peut aussi utiliser le mot-clé NATURAL JOIN pour exprimer une jointure
naturelle.
Exemple
SELECT NOME, NOMD
FROM EMP NATURAL JOIN DEPT;
13
Langage d’Interrogation des Données
La théta-jointure
• La thêta-jointure de R1 et R2 permet de rapprocher les tuples de
deux relations afin de former une troisième relation qui contient
l’ensemble de tous les tuples obtenus en concaténant un tuple de R1
et un tuple de R2 vérifiant la condition Ai Bi avec :
- {=, <, >, , }.
- Ai est un attribut de R1 et Bi est un attribut de R2
Exemple 1
A B C D E
1 a 1 b a
1 b 2 b c
3 a 4 a a
La relation R1 La relation R2 14
Langage d’Interrogation des Données
A B C D E
1 a 1 b a
1 a 2 b c
1 a 4 a a
1 b 1 b a
1 b 2 b c
1 b 4 a a
3 a 4 a a
15
Langage d’Interrogation des Données
Exemple 2
17
Langage d’Interrogation des Données
INNER JOIN
Comme il s'agit de la plus commune des jointures c'est celle qui s'exerce
par défaut si on ne précise pas le type de jointure. Après le mot clef ON,
on doit préciser le critère de jointure.
Exemple
Imaginons une application qui possède une table Client ainsi qu’une table
Commande qui contient toutes les commandes effectuées par les clients.
18
Langage d’Interrogation des Données
INNER JOIN
La table Client
Id_client Nom Prenom
1 Bjaoui Ali
2 Bjaoui Mohamed
3 Gharbi Salwa
4 Amari Meriem
La table Commande
20
Langage d’Interrogation des Données
LEFT JOIN aussi appelée LEFT OUTER JOIN
Cette commande permet de lister tous les résultats de la table de gauche
même si il n’ya pas de correspondance dans la deuxième table.
21
LEFT JOIN
Pour lister tous les clients avec leurs commandes et afficher également les
clients qui n’ont pas effectués d’achats, il est possible d’utiliser la requête
suivante :
Exemple
SELECT client.id_client, nom, prenom, numFacture, date_achat, prix_total
FROM client LEFT JOIN commande ON client.id_client = commande.id_client;
Le résultat de cette requête est:
Id_client Nom prenom NumFacture Date_achat Prix_total
1 Bjaoui Ali 100 10/11/2016 500
1 Bjaoui Ali 101 20/12/2016 200.5
2 Bjaoui Mohamed 103 11/02/2017 300
2 Bjaoui Mohamed 104 25/03/2017 150
3 Gharbi Salwa
4 Amari Meriem 22
Langage d’Interrogation des Données
RIGHT JOIN aussi appelée RIGHT OUTER JOIN
23
Langage d’Interrogation des Données
RIGHT JOIN
Pour lister toutes les commandes des clients et également ceux qui n’ont
pas effectués d’achats, il est possible d’utiliser la requête suivante :
Exemple
SELECT client.id_client, numfacture, date_achat, prix_total, nom, prenom
FROM commande RIGHT JOIN client ON commande.id_client= client.id_client;
4 Amari Meriem
24
Langage d’Interrogation des Données
Cette commande permet de combiner les résultats des deux tables, les
associer entre eux grâce à une condition et remplir avec des valeurs nulles
si la condition n’est pas respectée.
25
Langage d’Interrogation des Données
Les sous-Interrogations
Exemple1
SELECT COUNT(*) FROM EMP;
Exemple2
SELECT NOME, SAL FROM EMP
WHERE SAL = (SELECT MAX(SAL) FROM EMP);
Exemple1
SELECT NDEPT, COUNT(*)
FROM EMP
GROUP BY NDEPT; 29
Langage d’Interrogation des Données
Exemple2
SELECT NDEPT, COUNT(*) FROM EMP
WHERE POSTE = 'SECRETAIRE'
GROUP BY NDEPT;
Exemple
SELECT NDEPT, COUNT(*)
FROM EMP
WHERE POSTE = 'SECRETAIRE'
GROUP BY NDEPT HAVING COUNT(*) > 1;
30
Langage d’Interrogation des Données
La clause ORDER BY
• Le mot-clé DESC indique que le tri est décroissant. Par défaut, le tri
est croissant.
Exemples
31
Langage d’Interrogation des Données
Les opérateurs ensemblistes
Opérateur UNION
• Cet opérateur permet de fusionner deux sélections de tables afin
d’obtenir un ensemble de lignes représentant la réunion des lignes des
deux sélections. (Les tables doivent avoir le même schéma).
Opérateur INTERSECT
• Cet opérateur permet de générer les tuples communs à deux
interrogations. (Les tables doivent avoir le même schéma)
Opérateur MINUS
• L’opérateur MINUS dans Oracle permet de supprimer d’une
sélection les lignes obtenues dans une deuxième sélection. (Les
tables doivent avoir le même schéma).
Exemple
Liste des départements qui ont des employés dans la première filiale mais
pas dans la deuxième.
33
Langage d’Interrogation des Données
La gestion des valeurs nulles
34
Langage d’Interrogation des Données
Exemple
Le résultat est:
ne sal Comm salaireTotal
100 1250 1400 2650
101 950
102 1600 300 1900
103 2000
• Dans la suite, la fonction NVL est utilisée pour convertir les valeurs
NULL en 0.
35
Langage d’Interrogation des Données
Le résultat est:
ne sal Comm salaireTotal
100 1250 1400 2650
101 950 950
102 1600 300 1900
103 2000 2000
36
Rappel sur la division
Division
• Soient deux relations R(A1,…,An,X1 …Xk) et S(X1 …Xk) tel que tous
les attributs de S sont des attributs de R.
Exemple:
NomC NomP
Bjaoui Brique NomP
Brique NomC
Bjaoui Ciment
Ciment Bjaoui
Chettaoui Brique
Méthode Possible
Déterminer les clients ayant commandés un nombre distincts de
produits égal au nombre total de produits.
38
Langage d’Interrogation des Données
Solution 1
SELECT NumCL FROM commande
GROUP BY NumCL
HAVING COUNT(distinct NumProd) = (SELECT count(*) FROM Produit);
Solution 2
SELECT NumCL FROM client CL
WHERE (SELECT count(distinct NumProd)
FROM COMMANDE Co
WHERE Co.NumCl= Cl. NumCl) = (SELECT count(*)
FROM Produit);
Solution 3
Select Numcl
From client CL
Where not exists (select *
from Produit
where not exists (select *
from commande Co
where Produit.NumProd= co.NumProd
39
and CL.Numcl = Co.Numcl));
Manipulation des Données Via des requêtes SELECT
1. Insertion des données
INSERT INTO table (col1,..., coln )
SELECT ...
Exemple Enregistrer la participation
INSERT INTO PARTICIPATION (MATR, NDEP) de BJAOUI au groupe
SELECT MATR, 10 FROM EMP département 10 :
WHERE NOME = ‘BJAOUI’;
41