Chapitre 7 - Le Langage SQL

Structured Query Language (SQL) · notes

Voir tous les documents en bases de données

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

...