Chapitre 7
Le Langage SQL
7-1- Introduction
traduit Langage de requ tes structur ou
SQL (Structured Query Language,
langage
dinterrogation structur ) est un langage de quatri me g n ration (L4G), non proc dural, con u
par IBM dans les ann es 70. SQL est bas e sur lalg bre relationnelle (op rations ensemblistes et
relationnelles). SQL a t normalis d s 1986 mais les premi res normes, trop incompl tes, ont t
ignor es par les diteurs de SGBD. La norme actuelle SQL-2 (appel e aussi SQL-92) date de
1992. Elle est accept e par tous les SGBD relationnels. Ce langage permet lacc s aux donn es et
se compose de quatre sous-ensembles :
(cid:1) Le Langage dInterrogation de Donn es : LID : Ce langage permet de rechercher des
informations utiles en interrogeant la base de donn es. Certains consid rent ce langage comme
tant une partie du LMD.
(cid:2) Le Langage de Manipulation de Donn es : LMD (Data Manipulation Language DML) : Ce
langage permet de manipuler les donn es de la base et de les mettre jour.
(cid:3) Le Langage de D finition de Donn es : LDD (Data Definition Language DDL) : Ce langage
permet la d finition et la mise jour de la structure de la base de donn es (tables, attributs, vues,
index, ...).
(cid:4) Le Langage de Contr le de Donn es : LCD (Data Control Language DCL) : Ce langage
permet de d finir les droits dacc s pour les diff rents utilisateurs de la base de donn es, donc il
permet de g rer la s curit de la base et de confirmer et dannuler les transactions.
LDD
Create
Alter
Drop
LMD
Insert
Update
Delete
SQL1
LID
Select
LCD
Grant
Revoke
Exemple : Soit la base de donn es relationnelle (BD commerciale) suivante :
Produit (NP, LibP, Coul, Poids, PU, Qtes)
Client (NCl, NomCl, AdrCl)
Commande (NCmd, DateCmd, #NCl)
Ligne_Cmd (#NCmd, #NP, Qte)
- D signe lensemble des produits.
- D signe lensemble des clients.
- D signe lensemble des commandes.
- D signe lensemble des lignes de commandes.
Client
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Produit
Coul
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
Poids
5
1.2
2
25
3
2
1.7
50
PU
Qtes
18.000 1200
1.500
1000
25.000 1500
33.000 900
12.000 1300
47.000 1250
5.500
2000
90.000 800
1 SQL ne fait pas la diff rence entre majuscules et minuscules
Commande
DateCmd
NCmd
C001
C002
C003
C004
C005
10/12/2003
13/02/2004
15/01/2004
03/09/2003
11/03/2004
NCl
CL02
CL05
CL03
CL10
CL03
Ligne_Cmd
NCmd
C001
C001
C001
C002
C002
C003
C004
C004
C004
C004
C005
C005
NP
P001
P004
P006
P002
P007
P001
P002
P004
P005
P008
P001
P002
Qte
250
300
100
200
550
50
100
150
70
90
650
100
Toutes les manipulations concernant les commandes SQL seront faites sur cette base de donn es.
7-2- Langage dInterrogation de Donn es
7-2-1- Syntaxe g n rale
Le SQL est la fois un langage de manipulation de donn es et un langage de d finition de
donn es. Toutefois, la d finition de donn es est l'oeuvre de l'administrateur de la base de donn es,
c'est pourquoi la plupart des personnes qui utilisent le langage SQL ne se servent que du langage
de manipulation de donn es et plus pr cis ment du langage dinterrogation des donn es,
permettant de s lectionner les donn es qui les int ressent.
La principale commande du langage dinterrogation de donn es est la commande SELECT.
La commande SELECT est bas e sur l'alg bre relationnelle, en effectuant des op rations de
s lection de donn es sur plusieurs tables relationnelles par projection. Sa syntaxe g n rale est la
suivante :
SELECT2 | <liste des attributs> | *
FROM3 <liste des tables>
;
(cid:5) [ & ] : le contenu entre crochet est facultatif.
(cid:5) L'option ALL est, par opposition l'option DISTINCT, l'option par d faut. Elle permet de
s lectionner l'ensemble des lignes satisfaisant la condition logique.
(cid:5) L'option DISTINCT permet de ne conserver que des lignes distinctes, en liminant les
doublons.
(cid:5) La liste des attributs indique la liste des attributs choisis, s par s par des virgules. Lorsque l'on
d sire s lectionner l'ensemble des colonnes d'une table il n'est pas n cessaire de saisir la liste
de ses attributs, l'option * permet de r aliser cette t che.
(cid:5) La liste des tables indique l'ensemble des tables (s par es par des virgules) sur lesquelles on
op re.
(cid:5) La condition permet d'exprimer des qualifications complexes l'aide d'op rateurs logiques et
de comparateurs arithm tiques.
2 Permet dindiquer quelles colonnes ou quelles expressions doivent tre retourn es par linterrogation.
3 Sp cifie les tables participant linterrogation.
2
7-2-2- Projection
Une projection est une instruction permettant de s lectionner un ensemble dattributs dans une
table.
Syntaxe :
SELECT | <liste des attributs> | *
FROM <la table> ;
Applications :
(cid:6) Donner la liste des clients.
SELECT *
FROM Client ;
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
(cid:6) Donner lensemble des produits qui ont t command s (NP seulement).
SELECT NP
FROM Ligne_Cmd;
SELECT DISTINCT NP
FROM Ligne_Cmd;
Ligne_Cmd
NCmd
C001
C001
C001
C002
C002
C003
C004
C004
C004
C004
C005
C005
NP
P001
P004
P006
P002
P007
P001
P002
P004
P005
P008
P001
P002
Qte
250
300
100
200
550
50
100
150
70
90
650
100
NP
P001
P004
P006
P002
P007
P001
P002
P004
P005
Publicité
P008
P001
P002
NP
P001
P004
P006
P002
P007
P005
P008
les
DISTINCT est utilis pour liminer
duplications, par d faut on obtient tous les
tuples (ALL).
7-2-3- Restrictions
Une restriction consiste s lectionner les lignes satisfaisant une condition logique effectu e sur
leurs attributs. En SQL, les restrictions s'expriment l'aide de la clause WHERE suivie d'une
condition logique exprim e l'aide d'op rateurs logiques (AND, OR, NOT), d'op rateurs
3
arithm tiques (+, -, *, /, %), de comparateurs arithm tiques (=, !=, >, <, >=, <=) et des pr dicats
(NULL, IN, BETWEEN, LIKE, ALL, SOME, ANY, EXISTS). Ces op rateurs sappliquent
aux valeurs num riques, aux cha nes de caract res et aux dates4.
Syntaxe :
SELECT | <liste des attributs> | *
FROM <la table>
WHERE <condition> ;
Au niveau de la clause WHERE, les pr dicats sont les suivants :
WHERE exp1 = exp2
WHERE exp1 != exp2
WHERE exp1 < exp2
WHERE exp1 > exp2
WHERE exp1 <= exp2
WHERE exp1 >= exp2
Condition est vraie si les deux expressions exp1
et exp2 sont gales.
Condition est vraie si les deux expressions exp1
et exp2 sont diff rentes.
Condition est vraie si exp1 est inf rieure exp2.
Condition est vraie si exp1 est sup rieure
exp2.
Condition est vraie si exp1 est inf rieure ou
gale exp2.
Condition est vraie si exp1 est sup rieure ou
gale exp2.
WHERE exp1 BETWEEN exp2 AND exp3 Condition est vraie si exp1 est comprise entre
WHERE exp1 LIKE exp2
WHERE exp1 NOT LIKE exp2
WHERE exp1 IN (exp2, exp3,&)
WHERE exp1 NOT IN (exp2, exp3,&)
WHERE exp1 IS NULL
WHERE exp1 IS NOT NULL
WHERE exp1 Op ALL (exp2, exp3,&)
WHERE exp1 Op ANY (exp2, exp3,&)
WHERE exp1 Op SOME (exp2, exp3,&)
WHERE EXISTS sous-requ te
exp2 et exp3, bornes incluses.
Condition est vraie si la souscha ne exp2 est
pr sente dans exp1.
Condition est vraie si la souscha ne exp2 nest
pas pr sente dans exp1.
Condition est vraie si exp1 appartient
lensemble (exp2, exp3, &).
Condition est vraie si exp1 nappartient pas
lensemble (exp2, exp3, &).
Condition est vraie si exp1 est nulle.
Condition est vraie si exp1 nest pas nulle.
Op repr sente un op rateur de comparaison (<,
>, =, !=, <=, >=)
Condition est vraie si la comparaison de lexp1
est vraie avec toutes les valeurs de la liste
(exp2, exp3, &). Si la liste est vide, le r sultat
est vrai.
Op repr sente un op rateur de comparaison (<,
>, =, !=, <=, >=)
Condition est vraie si la comparaison de lexp1
est vraie avec au moins une valeur de la liste
(exp2, exp3, &). Si la liste est vide, le r sultat
est faux.
Condition est vraie si le r sultat de la sous-
requ te nest pas vide.
Remarques :
(cid:5) Lop rateur IN est quivalent = ANY
(cid:5) Lop rateur NOT IN est quivalent != ANY
4 Les constantes de type cha ne de caract res et date doivent tre encadr es par apostrophes & contrairement aux
nombres.
4
Applications :
(cid:6) Donner le num ro et le nom des clients de la ville de Sousse.
SELECT NCl, NomCl
FROM Client
WHERE AdrCl = Sousse;
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
NCl
CL03
CL04
CL06
CL07
NomCl
AMS
GLOULOU
ELECTRON
SBATIM
(cid:6) Donner la liste des commandes dont la date est sup rieure 01/01/2004.
SELECT *
FROM Commandes
WHERE DateCmd > 01/01/2004;
& Commande
.
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
NCmd DateCmd NCl
13/02/2004 CL05
C002
15/01/2004 CL03
C003
11/03/2004 CL03
C005
(cid:6) Donner la liste des produits dont le prix est compris entre 20 et 50.
SELECT *
FROM Produit
WHERE PU BETWEEN 20 AND 50;
& Produit
Coul Poids
5
Ou bien
SELECT *
FROM Produit
WHERE (PU >= 20) AND (PU <= 50);
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Gris
Blanc 1.2
Blanc 2
Blanc 25
Gris
3
Jaune 2
Gris
Noir
1.7
50
PU Qtes
18.000 1200
1.500
1000
25.000 1500
33.000 900
12.000 1300
47.000 1250
5.500
2000
90.000 800
(cid:6) Donner la liste des clients dont les noms commencent par B.
NP
P003
P004
P006
LibP
C ble
Peinture
Serrure
Coul Poids
Blanc 2
Blanc 25
Jaune 2
PU Qtes
25.000 1500
33.000 900
47.000 1250
SELECT *
FROM Client
WHERE NomCl LIKE B%;
NCl
NomCl
AdrCl
Tunis
CL01 BATAM
CL02 BATIMENT Tunis
Tunis
CL12 BATFER
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
Le pr dicat LIKE permet de faire des comparaisons sur des cha nes gr ce des caract res, appel s
caract res jokers :
" Le caract re % permet de remplacer une s quence de caract res ( ventuellement nulle).
" Le caract re _ permet de remplacer un caract re.
" Les caract res [-] permettent de d finir un intervalle de caract res (par exemple ).
5
La s lection des clients dont les noms ont un E en deuxi me position se fait par l'instruction :
WHERE NomCl LIKE "_E%"
(cid:6) Donner les num ros des clients dont les dates de leurs commandes se trouvent parmi les dates
suivantes : (10-12-03, 10-12-04,13-02-04,11-03-04).
SELECT DateCmd, NCl
FROM Commande
WHERE DateCmd IN (10-12-2003,10-12-2004,13-02-2004,11-03-2004);
Commande
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
DateCmd
10/12/2003
13/02/2004
11/03/2004
NCl
CL02
CL05
CL03
(cid:6) Donner les noms des clients qui nont pas dadresse.
SELECT NomCl
FROM Client
WHERE AdrCl IS NULL;
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
NomCl
MBATIM
Lorsqu'un champ n'est pas
renseign , le SGBD lui attribue une
valeur sp ciale que l'on note NULL.
La recherche de cette valeur ne peut
pas se faire l'aide des op rateurs
Publicité
standards, il faut utiliser les
pr dicats IS NULL ou bien IS NOT
NULL.
7-2-4- Expressions, alias et fonctions
a.
Expression
Les expressions accept es par SQL portent sur des attributs, des constantes et des fonctions.
Ces trois types d l ments peuvent tre reli s par des op rateurs arithm tiques (+, -, *, /). Les
expressions peuvent figurer :
(cid:6) En tant que colonne r sultat dun ordre SELECT.
(cid:6) Dans une clause WHERE.
(cid:6) Dans une clause ORDER BY (cf. Tri).
(cid:6) Dans les ordres de manipulation des donn es (INSERT, UPDATE, DELETE cf. LMD).
b.
Alias
Les alias permettent de renommer des attributs ou des tables.
SELECT attr1 AS aliasa1, attr2 AS aliasa2, &
FROM table1 aliast1, table2 aliast2& ;
Pour les attributs, lalias correspond aux titres des colonnes affich es dans le r sultat de la
requ te. Il est souvent utilis lorsquil sagit dattributs calcul s (expression).
NB : Le mot cl AS est optionnel.
c.
Fonction
Le tableau suivant donne le nom des principales fonctions pr d finies :
6
Nom de la fonction
AVG
SUM
MIN
MAX
COUNT (*)
COUNT (Attr)
COUNT( Attr) Nombre de valeurs non nulles diff rentes de lattribut
R le de la fonction
Moyenne
Somme
Minimum
Maximum
Nombre de lignes
Nombre de valeurs non nulles de lattribut
Applications :
(cid:6) Donner la valeur des produits en stock.
SELECT NP, (Qtes * PU) AS Valeur Totale
FROM Produit ;
Produit
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Coul
Poids
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
5
1.2
2
25
3
2
1.7
50
PU
Qtes
18.000 1200
1000
1.500
25.000 1500
33.000 900
12.000 1300
47.000 1250
5.500
2000
90.000 800
NP
P001
P002
P003
P004
P005
P006
P007
P008
Valeur Totale
21600
1500
37500
29700
15600
58750
11000
72000
On peut exprimer cette requ te sans sp cifier le mot cl AS :
SELECT NP, (Qtes* PU) Valeur Totale
FROM Produit ;
On ne met les noms des colonnes r sultats entre guillemets que sils contiennent des espaces.
SELECT NP, (Qtes * PU) Valeur
FROM Produit ;
(cid:6) Donner la moyenne des prix unitaires des produits.
SELECT AVG(PU)
FROM Produit;
& Produit
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
1.2
PU Qtes
5 18.000 1200
1.500 1000
2 25.000 1500
25 33.000
900
3 12.000 1300
2 47.000 1250
5.500 2000
800
1.7
50 90.000
Coul Poids
AVG(PU)
29
7-2-5- S lection avec jointure
Il sagit ici de s lectionner les donn es provenant de plusieurs tables ayant un ou plusieurs
attributs communs. Cette jointure sera assur e gr ce aux conditions sp cifi es dans la clause
WHERE.
Syntaxe :
SELECT | <liste des attributs> | *
FROM <liste des tables>
WHERE Nom_Table1.Attrj = Nom_Table2.Attrj AND &
AND <condition> ;
7
Applications :
(cid:6) Donner les libell s des produits de la commande num ro C002.
SELECT DISTINCT LibP
FROM Produit, Ligne_Cmd
WHERE Produit.NP = Ligne_Cmd.NP
AND NCmd=C002;
Ou bien
SELECT DISTINCT LibP
FROM Produit P, Ligne_Cmd L
WHERE P.NP = L.NP
AND NCmd=C002;
Pour ne pas sp cifier chaque fois le nom complet
des tables Produit et Ligne_Cmd dans la condition,
on peut renommer ces tables.
Produit
Ligne_Cmd
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Coul
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
Poids
5
1.2
2
25
3
2
1.7
50
PU
Qtes
18.000 1200
1.500
1000
25.000 1500
33.000 900
12.000 1300
47.000 1250
5.500
2000
90.000 800
NCmd
C001
C001
C001
C002
C002
C003
C004
C004
C004
C004
C005
C005
NP
P001
P004
P006
P002
P007
P001
P002
P004
P005
P008
P001
P002
Qte
250
300
100
200
550
50
100
150
70
90
650
100
LibP
Prise
Verrou
On peut exprimer cette jointure autrement (cf. Sous-requ tes) :
SELECT LibP
FROM Produit
WHERE NP IN
(SELECT NP
FROM Ligne_Cmd
WHERE NCmd = C002);
(cid:6) Donner les produits (toutes les informations) command s au cours de lann e 2003 et qui sont
vendus aux clients de Tunis.
SELECT DISTINCT P.NP, LibP, Coul, Poids, PU, Qtes
FROM Produit P, Commande C, Client Cl, Ligne_Cmd L
WHERE P.NP = L.NP
AND C.NCmd = L.NCmd
AND Cl.NCl = C.NCl
AND Cl.AdrCl =Tunis
AND DateCmd BETWEEN 01/01/2003 AND 31/12/2003;
NP
P001
P004
P006
LibP
Robinet
Peinture
Serrure
Coul
Poids
PU
Qtes
Gris
Blanc
Jaune
5
25
2
18
33
47
1200
900
1250
8
(cid:6) Donner les libell s des produits qui ont un prix unitaire sup rieur celui du produit Robinet.
SELECT P.LibP
FROM Produit P, Produit P1
WHERE P.PU > P1.PU
AND P1.LibP =Robinet;
Dans certaines requ tes, on est
oblig de renommer soit des
tables, soit des attributs (ici les
tables).
LibP
C ble
Peinture
Serrure
Fer
7-2-6- Groupement
Il est possible de grouper des lignes de donn es ayant une valeur commune laide de la clause
GROUP BY et des fonctions de groupe (cf. Fonction).
Syntaxe :
SELECT Attr1, Attr2,&, Fonction_Groupe
FROM Nom_Table1, Nom_Table2,&
WHERE Liste_Condition
GROUP BY Liste_Groupe
HAVING Condition;
" La clause GROUP BY, suivie du nom de chaque attribut sur laquelle on veut effectuer des
regroupements.
" La clause HAVING va de pair avec la clause GROUP BY, elle permet d'appliquer une
restriction sur les groupes cr s gr ce la clause GROUP BY.
NB : Les fonctions dagr gat, utilis es seules dans un SELECT (sans la clause GROUP BY)
fonctionnent sur la totalit des tuples s lectionn s comme sil ny avait quun groupe.
Applications :
(cid:6) Donner le nombre de commandes par client.
SELECT NCl, COUNT((NCmd) NbCmd
FROM Commande
GROUP BY NCl ;
& Commande
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
Publicité
NCl NbCmd
CL02
CL05
CL03
CL10
1
1
2
1
(cid:6) Donner la quantit totale command e par produit.
SELECT NP, SUM(Qte) Som
FROM Ligne_Cmd
GROUP BY NP;
& Ligne_Cmd
NCmd NP Qte
P001 250
C001
P004 300
C001
P006 100
C001
P002 200
C002
P007 550
C002
P001 50
C003
P002 100
C004
P004 150
C004
P005 70
C004
P008 90
C004
P001 650
C005
P002 100
C005
NP
P001
P002
P004
P005
P006
P007
P008
Som
950
400
450
70
100
550
90
9
(cid:6) Donner le nombre de produits par commande.
SELECT NCmd, COUNT(NP) NbProd
FROM Ligne_Cmd
GROUP BY NCmd;
& Ligne_Cmd
NCmd NP Qte
P001 250
C001
P004 300
C001
P006 100
C001
P002 200
C002
P007 550
C002
P001 50
C003
P002 100
C004
P004 150
C004
P005 70
C004
P008 90
C004
P001 650
C005
P002 100
C005
(cid:6) Donner les commandes dont le nombre de produits d passe 2.
SELECT NCmd, COUNT(NP) NbProd
FROM Ligne_Cmd
GROUP BY NCmd
HAVING COUNT(NP) > 2;
& Ligne_Cmd
NCmd NP Qte
P001 250
C001
P004 300
C001
P006 100
C001
P002 200
C002
P007 550
C002
P001 50
C003
P002 100
C004
P004 150
C004
P005 70
C004
P008 90
C004
P001 650
C005
P002 100
C005
NCmd NbProd
C001
C002
C003
C004
C005
3
2
1
4
2
NCmd NbProd
C001
C004
3
4
(cid:6) Donner le total des montants par commande.
SELECT NCmd, SUM(PU*Qte) TotMontant
FROM Produit P, Ligne_Cmd L
WHERE L.NP = P.NP
GROUP BY NCmd;
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
Produit
Coul
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
Poids
5
1.2
2
25
3
2
1.7
50
PU
Qtes
18.000 1200
1.500
1000
25.000 1500
33.000 900
12.000 1300
47.000 1250
5.500
2000
90.000 800
Ligne_Cmd
NCmd
C001
C001
C001
C002
C002
C003
C004
C004
C004
C004
C005
C005
NP
P001
P004
P006
P002
P007
P001
P002
P004
P005
P008
P001
P002
Qte
250
300
100
200
550
50
100
150
70
90
650
100
NCmd TotMontant
19100
C001
3325
C002
900
C003
14040
C004
11850
C005
10
7-2-7- Tri
Les lignes constituant le r sultat dun SELECT sont obtenues dans un ordre quelconque. La
clause ORDER BY pr cise lordre dans lequel la liste des lignes s lectionn es sera donn e.
Syntaxe :
SELECT Attr1, Attr2,&, Attrn
FROM Nom_Table1, Nom_Table2, &
WHERE Liste_Condition
ORDER BY Attr1 , Attr2 , &;
NB : Lordre de tri par d faut est croissant (ASC).
Application :
(cid:6) Donner les noms des clients suivant lordre d croissant.
SELECT NomCl
FROM Client
ORDER BY NomCl DESC ;
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
NomCl
SOUDURE
SBATIM
SANITAIRE
PRODELEC
MELEC
MBATIM
GLOULOU
ELECTRON
BATIMENT
BATFER
BATAM
AMS
(cid:6) Donner le nombre de produits et la quantit totale par commande suivant lordre d croissant du
nombre de produits et lordre croissant de la quantit totale.
SELECT NCmd,
COUNT DISTINCT(NP) NbProd,
SUM(Qte) SomQte
FROM Ligne_Cmd
GROUP BY NCmd
ORDER BY NbProd DESC,
SomQte ASC ;
& Ligne_Cmd
NCmd NP Qte
P001 250
C001
P004 300
C001
P006 100
C001
P002 200
C002
P007 550
C002
P001 50
C003
P002 100
C004
P004 150
C004
P005 70
C004
P008 90
C004
P001 650
C005
P002 100
C005
NCmd NbProd SomQte
410
4
C004
650
3
C001
750
2
C005
750
2
C002
50
1
C003
7-2-8- Sous requ tes
Effectuer une sous-requ te consiste effectuer une requ te l'int rieur d'une autre, ou en d'autres
termes d'utiliser une requ te afin d'en r aliser une autre (on entend parfois le terme de requ tes en
cascade).
Une sous-requ te doit tre plac e la suite d'une clause WHERE ou HAVING, et doit remplacer
une constante ou un groupe de constantes qui permettraient en temps normal d'exprimer la
qualification.
"
lorsque la sous-requ te remplace une constante utilis e avec des op rateurs classiques, elle
doit obligatoirement renvoyer une seule r ponse (une table d'une ligne et une colonne). Par
Publicité
exemple :
SELECT & FROM &
WHERE & < (SELECT & FROM &) ;
11
"
"
lorsque la sous-requ te remplace une constante utilis e dans une expression mettant en jeu
les op rateurs IN, ALL ou ANY, elle doit obligatoirement renvoyer une seule colonne.
SELECT & FROM &
WHERE & IN (SELECT & FROM &) ;
lorsque la sous-requ te remplace une constante utilis e dans une expression mettant en jeu
lop rateur EXISTS, elle peut renvoyer une table de n colonnes et m lignes.
SELECT & FROM &
WHERE & EXISTS (SELECT & FROM &) ;
Applications :
(cid:6) Donner les produits dont les prix unitaires d passent la moyenne des prix.
SELECT *
FROM Produit
WHERE PU > (SELECT AVG(PU) FROM Produit);
Le r sultat de la sous-requ te :
AVG(PU)
29
& Produit
NP
P001
P002
P003
P004
P005
P006
P007
P008
LibP
Robinet
Prise
C ble
Peinture
Poign e
Serrure
Verrou
Fer
NP
P004
P006
P008
LibP
Peinture
Serrure
Fer
Gris
Blanc
Blanc
Blanc
Gris
Jaune
Gris
Noir
Blanc
Jaune
Noir
Coul Poids
1.2
PU Qtes
5 18.000 1200
1.500 1000
2 25.000 1500
25 33.000 900
3 12.000 1300
2 47.000 1250
1.7
5.500 2000
50 90.000 800
Coul Poids
PU Qtes
25 33.000
900
2 47.000 1250
800
50 90.000
(cid:6) Donner les commandes qui ont une date inf rieure chacune des commandes du client CL03.
& Commande
SELECT *
FROM Commande
WHERE DateCmd < ALL
(SELECT DateCmd
FROM Commande
WHERE NCl = CL03);
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
Le r sultat de la sous-requ te :
DateCmd
15/01/2004
11/03/2004
NCmd DateCmd NCl
10/12/2003 CL02
C001
03/09/2003 CL10
C004
(cid:6) Donner les commandes qui ont une date inf rieure au moins une des commandes du client
CL03.
SELECT *
FROM Commande
WHERE DateCmd < ANY
(SELECT DateCmd
FROM Commande
WHERE NCl = CL03);
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
& Commande
Le r sultat de la sous-requ te :
DateCmd
15/01/2004
11/03/2004
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
12
(cid:6) Donner les clients qui ont pass au moins une commande.
SELECT NomCl
FROM Client Cl
WHERE EXIST (SELECT * FROM Commande C WHERE Cl.NCl =C.NCl);
Commande
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
NomCl
BATIMENT
AMS
PRODELEC
MELEC
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
(cid:6) Donner des clients qui nont pass aucune commande.
SELECT NomCl
FROM Client Cl
WHERE NOT EXIST (SELECT * FROM Commande C WHERE Cl.NCl =C.NCl);
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
Commande
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
NomCl
BATAM
GLOULOU
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MBATIM
BATFER
7-2-9- Op rateurs ensemblistes
(cid:1) Union : Lop rateur UNION permet de fusionner deux s lections de tables pour obtenir un
ensemble de lignes gal la r union des lignes des deux s lections. Les lignes communes
nappara tront quune seule fois.
Syntaxe :
Requ te1
UNION
Requ te2 ;
NB :
" Requ te1 et Requ te2 doivent avoir la m me structure.
" Par d faut les doublons sont automatiquement limin s. Pour conserver les doublons, il est
possible d'utiliser une clause UNION ALL.
13
Application :
(cid:6) Donner lensemble des clients de Tunis et de Sousse qui ont des commandes.
SELECT Cl.NCl, NomCl, AdrCl
FROM Client Cl, Commande C
WHERE Cl.NCl=C.NCl
AND J.AdrCl=Tunis
UNION
SELECT Cl.NCl, NomCl, AdrCl
FROM Client Cl, Commande C
WHERE Cl.NCl=C.NCl
AND J.AdrCl=Sousse;
Client
NCl
CL01
CL02
CL03
CL04
CL05
CL06
CL07
CL08
CL09
CL10
CL11
CL12
NomCl
BATAM
BATIMENT
AMS
GLOULOU
PRODELEC
ELECTRON
SBATIM
SANITAIRE
SOUDURE
MELEC
MBATIM
BATFER
AdrCl
Tunis
Tunis
Sousse
Sousse
Tunis
Sousse
Sousse
Tunis
Tunis
Monastir
Tunis
Commande
NCmd DateCmd NCl
10/12/2003 CL02
C001
13/02/2004 CL05
C002
15/01/2004 CL03
C003
03/09/2003 CL10
C004
11/03/2004 CL03
C005
R1
NCl
CL02
CL05
NomCl
BATIMENT
PRODELEC
AdrCl
Tunis
Tunis
R2
NCl
CL03
NomCl
AMS
AdrCl
Sousse
NCl
CL02
CL05
CL03
NomCl
BATIMENT
PRODELEC
...