Вы находитесь на странице: 1из 37

Chapitre 2

LE LANGAGE
SQL

2ème Année LFG

Cours MIAD - 3ème Année HEC


Le langage SQL
 Le langage SQL comporte :

1. Langage de définition des données (LDD) qui permet


de définir des relations, des vues externes et des
contraintes d’intégrité;
2. Langage de manipulation des données (LMD) qui
permet d’interroger une base de données sous forme
déclarative sans se préoccuper de l’organisation
physique des données;
3. Langage de contrôle des données (LCD) qui permet
de contrôler la sécurité et les accès aux données.

NB: Nous présentons ici les principaux aspects du LMD.

2
Exemple de BD (1)

Soit le MLD d’une BD relationnelle suivant:


Client Commande
NoCli
NoCom
Nom
#NoCli
Adresse
Date
Catégorie
Compte

Produit LigneCommande
NoProd #NoCom
Libelle #NoProd
Prix QteCommandee
QteStock

3
Exemple de BD (2)
Soit le détail de la table Client :

Client
NoCli Nom Adresse Localité Catégorie Compte

1 AMEUR 23, a. Carthage Carthage 1 125.000


2 BEN SALAH 25, r. du Caire Tunis 1 -230.000
3 MRABET 112, r. d’Athène Ariana 1 0.000
4 KRAIEM 5, a. de Madrid Tunis 1 0.000
5 LABIDI 180, r. de Rome Tunis 2 72.000
6 CHAOUACHI 3, a. des Roses La Marsa 2 -258.000
7 GAFSI 14, r. de l’Eté Carthage 3 870.000
8 JELALI 72, r. de la Gare Ariana 3 320.000
9 ROUISSI 65, r. Lafayette Tunis 3 35.000

4
Requête SQL

 Une requête SQL se présente comme suit:

SELECT colonne 1, colonne 2, …


FROM table , ...
[WHERE { conditions | sous conditions} ]
[GROUP BY expr, ...] [HAVING conditions]
[ORDER BY {expr | num}{ASC | DESC}, ...] ;

Rq: [….] : facultatif.


5
Interprétation

SELECT Précise les colonnes qui vont apparaître dans la réponse

FROM Précise la (ou les) table(s) intervenant dans l'interrogation

WHERE Précise les conditions à appliquer sur les lignes. On peut trouver :
- des comparateurs : =, >, <, >=, <=,<>
- des opérateurs logiques : AND, OR, NOT
- des prédicats : IN
GROUP BY Précise la (ou les) colonne(s) de regroupement

HAVING Précise la (ou les) conditions associées à un regroupement

ORDER BY Précise l'ordre dans lequel vont apparaître les lignes de la réponse :
- ASC : En ordre ascendant (par défaut)
- DESC: En ordre descendant

6
Requête SQL (Exemples)

1. SELECT Nom, Localité 2. SELECT Nom, Localité


FROM Client
FROM Client;
WHERE Localité = ‘Ariana’;

Nom Localité Nom Localité


AMEUR Carthage MRABET Ariana
BEN SALAH Tunis JELALI Ariana
MRABET Ariana
KRAIEM Tunis
LABIDI Tunis
CHAOUACHI La Marsa
GAFSI Carthage
JELALI Ariana
ROUISSI Tunis

7
Projection

 SQL: SELECT colonnes (ou attributs)


FROM table;
Principe:
Choisit le nom des colonnes de la (ou des) table(s) que
l'on souhaite voir apparaître dans la réponse.
Les colonnes sont données après l’instruction SELECT.
La ou les table(s) (ou relations) sont indiquées après la
clause FROM.
8
Projection (Exemples)

Exemple :

 SQL: SELECT Nom, Localité Nom Localité

FROM Client; Toutes les lignes de la


table Client

9
Sélection

 SQL: SELECT
*
FROM table
WHERE conditions;
Principe:
Sélectionne des lignes (n-uplets, tuples) d'une (ou
plusieurs) table(s) qui satisfont certaines conditions.
La ou les conditions sont indiquées après la clause
WHERE.
* dénote toutes les colonnes de la relation. 10
Sélection (Exemple)

 SQL:
SELECT
*
FROM Client
WHERE Localité = ‘Ariana’;

NoCli Nom Adresse Localité Catégorie Compte


3 MRABET 112, r. d’Athène Ariana 1 0.000
8 JELALI 72, r. de la Gare Ariana 3 320.000

11
Projection & Sélection

 SQL: SELECT colonnes (ou attributs)


FROM table
WHERE conditions;

12
Projection & Sélection (Exemple)

 SQL: SELECT Nom, Localité


FROM Client
WHERE Localité = ‘Ariana’;
Nom Localité
MRABET Ariana
JELALI Ariana

13
Jointure

 SQL: SELECT colonnes (ou attributs)


FROM table1, table2
WHERE table1.att = table2.att;

Principe:
 Permet l’extraction de données à partir de 2 ou plusieurs tables.
 Réunit, 2 par 2, des tables.
 Après la clause FROM, le nom des tables intervenant dans la
jointure.
 Après la clause WHERE, les conditions permettant de réaliser
la jointure.
14
Jointure (Exemple)

 SQL: SELECT
*
FROM Client,Commande
WHERE Client.NoCli = Commande.NoCli;

NoCli Nom Adresse Localité Catégorie Compte NoCom Date


1 AMEUR 23, a. Carthage Carthage 1 125.000 108 12/04/02
2 BEN SALAH 25, r. du Caire Tunis 1 -230.000 105 15/02/01
2 BEN SALAH 25, r. du Caire Ariana 1 0.000 107 16/04/01
3 MRABET 112, r. d’Athène Tunis 1 0.000 106 09/07/01
4 KRAIEM 5, a. de Madrid Tunis 2 72.000 102 03/01/00
5 LABIDI 180, r. de Rome La Marsa 2 -258.000 103 05/04/00
8 JELALI 72, r. de la Gare Carthage 3 870.000 101 07/12/99
9 ROUISSII 65, r. Lafayette Ariana 3 320.000 100 09/09/99
9 ROUISSII 65, r. Lafayette Tunis 3 35.000 104 12/12/00
15
Produit Cartésien

 SQL: SELECT
*
FROM table1, table2;
Principe:
 Le produit cartésien est appliqué sur deux relations R1 et R2
n'ayant pas nécessairement la même structure pour obtenir une
relation R3.

 R3 structure égale à la juxtaposition des


structures de R1 et R2.
composée de l'ensemble des tuples obtenus
suite à toutes les combinaisons des tuples
de R1, R2 16
Produit Cartésien (Exemple)

R1
NoCli Nom
1 AMEUR
2 BEN SALAH
 SQL:
SELECT
* FROM R1,R2;

R2 NoCli Nom NoCom Date


NoCom Date 1 AMEUR 108 12/04/02
1 AMEUR 105 15/02/01
108 12/04/02
1 AMEUR 107 16/04/01
105 15/02/01
2 BEN SALAH 108 12/04/02
107 16/04/01
2 BEN SALAH 105 15/02/01
2 BEN SALAH 107 16/04/01

17
La clause DISTINCT

 La clause DISTINCT permet d'éliminer les doublons.

Exemple 1 : Localité
SELECT Localité Carthage
FROM Client Tunis
Ariana
WHERE Catégorie= 1; Tunis

Exemple 2 :
SELECT DISTINCT Localité Localité
FROM Client Carthage
Tunis
WHERE Catégorie= 1; Ariana

18
Requêtes avec comparaisons (1)

 La clause WHERE peut utiliser :


 des comparateurs: =, >, <, >=, <=,<>
 des opérateurs logiques: AND, OR, NOT
 des prédicats: IN

 Ces opérateurs s’appliquent aux valeurs numériques, aux


chaînes de caractères, et aux dates.

 Les chaînes de caractères et les dates doivent être


encadrées par '...' contrairement aux nombres.

19
Requêtes avec comparaisons (2)

Exemple 1 :
SELECT Nom, Adresse, Compte Nom Adresse Compte
FROM Client
MRABET 112, r. d’Athène 0.000
WHERE Localité = 'Ariana' AND Compte <= 0;

Exemple 2 :
SELECT Nom, Adresse, Compte
FROM Client Nom Adresse Compte
WHERE Compte between 100 AND 500; JELALI 72, r. de la Gare 320.000
AMEUR 23, a. Carthage 125.000
Exemple 3 :
SELECT Nom, Adresse, Compte
FROM CLIENT Nom Adresse Compte
WHERE Nom LIKE 'BEN%'; BEN SALAH 25, r. du Caire -230.000

Rq: '…..%' ⇒ commence par …..


'%…..%' ⇒ contient …..
20
Requêtes avec comparaisons (3)

Exemple 4 : Nom Adresse Compte


SELECT Nom, Adresse, Compte BEN SALAH 25, r. du Caire -230.000
MRABET 112, r. d’Athène 0.000
FROM Client KRAIEM 5, a. de Madrid 0.000
WHERE Localité IN ('Ariana','Tunis'); LABIDI 180, r. de Rome 72.000
JELALI 72, r. de la Gare 320.000
ROUISSI 65, r. Lafayette 35.000
Exemple 5 :
SELECT Nom, Adresse, Compte
Nom Adresse Compte
FROM Client
AMEUR 23, a. Carthage 125.000
WHERE Localité NOT IN ('Ariana','Tunis'); CHAOUACHI 3, a. des Roses -258.000
GAFSI 14, r. de l’Eté 870.000
Exemple 6 :
SELECT NoCom, QteCommandée NoCom QteCommandée
FROM LigneCommande 101
WHERE QteCommandée IS NULL;
Champ non renseigné 21
Requêtes avec regroupement (1)
 La clause GROUP BY permet de créer des sous-ensembles
(regroupements) de lignes pour lesquels la valeur d'une (ou
plusieurs) colonne est identique.

 La sélection sur les regroupements se fait en utilisant la clause


HAVING.

SELECT …
FROM …
GROUP BY expr, ... [HAVING conditions];

22
Requêtes avec regroupement
(2)
 Regroupement simple:
 La commande GROUP BY regroupe à l’affichage les
données sur le champ spécifié.

23
Requêtes avec regroupement (3)

 Regroupement avec calcul


 La commande GROUP BY est utilisée pour réaliser
des calculs concernant un même enregistrement.
Exemple : Calculer le chiffre d’affaires total réalisé
pour chaque entreprise
SELECT Entreprise, SUM(Ventes)
FROM Visites
GROUP BY Entreprise

24
Requêtes avec regroupement (4)

25
Requêtes avec regroupement (5)

 Regroupement limitation : HAVING


 La commande HAVING jointe à un calcul permet de restreindre
l’affichage uniquement aux sociétés qui satisfont un critère.
Exemple : Calculer le total des ventes pour chaque entreprise et
afficher les résultats uniquement pour les entreprises dont le chiffre
d’affaires est supérieur à 3 000 €.
SELECT Entreprise, SUM(Ventes)
FROM Visites
GROUP BY Entreprise
HAVING SUM(Ventes) > 3000

26
Requêtes avec regroupement (6)

27
Remarques

 Tous les attributs placés derrière la clause GROUP BY


doivent être présents derrière la clause SELECT .
 La clause GROUP BY est obligatoire dès lors qu'il y a
à la fois des attributs et des fonctions de calcul
derrière la clause SELECT par suite, tout champ du
select, autre que les fonctions statistiques, doit se
retrouver dans le GROUP BY(Rq).

28
Requêtes avec regroupement (2)
Rqs:
 Tout champ du select, autre que les fonctions statistiques, doit
se retrouver dans le GROUP BY:
SELECT Champ1, Champ2, Count(*)
FROM ...
WHERE ...
GROUP BY Champ1, Champ2;
 Généralement, tout champ de regroupement (du GROUP BY)
est présent dans la clause SELECT
Exemple :
Cette requête va créer
SELECT Catégorie autant de sous-ensembles
FROM Client que de valeurs possibles
GROUP BY Catégorie; de l'attribut Catégorie: 3
sous-ensembles : 1, 2, 3.

29
La clause ORDER BY

 La clause ORDER BY permet de trier le résultat affiché.

SELECT …
FROM …
ORDER BY attribut1 [ASC], attribut2 DESC, ... ;
 Pour afficher un ordre décroissant il suffit de préciser DESC
derrière la colonne citée dans le tri . L’ordre croissant (ASC) étant
celui par défaut.
 Le nom de colonne peut être remplacé par la position de la
colonne derrière la clause SELECT.

SELECT attribut1, attribut2


Ordre décroissant
FROM table
selon l’attribut1
ORDER BY 1 DESC;

30
La clause ORDER BY (Exemples)

Exemple 1: NoCli Nom


3 MRABET
SELECT NoCli, Nom 5 LABIDI
FROM Client 4 KRAIEM
8 JELALI
ORDER BY Nom DESC; 7 GAFSI
6 CHAOUACHI
2 BEN SALAH
1 AMEUR

Exemple 2:
NoCli Nom Localité
SELECT NoCli, Nom, Localité 3 MRABET Ariana
FROM Client 1 AMEUR Carthage
6 CHAOUACHI La Marsa
WHERE Catégorie IN (1,2) 2 BEN SALAH Tunis
4 KRAIEM Tunis
ORDER BY 3; 5 LABIDI Tunis
31
Notion d’ALIAS

 Permet de renommer des attributs ou des tables.

SELECT attribut1 AS alias1, attribut2 AS alias2, ...


FROM table alias, ...;
 Désormais le nom de la table n’est plus reconnu que par
l’alias dans la totalité de la requête.
 Pour les attributs, l’alias correspond aux titres des colonnes
affichées dans le résultat de la requête.
 La notion d’alias pour les attributs est souvent utilisée
lorsqu’il s’agit d’attributs calculés.

32
Notion d’ALIAS (Exemples)

Exemple 1: Numéro_Client Nom


SELECT NoCli AS Numéro_Client, Nom 1 AMEUR
2 BEN SALAH
FROM Client C 3 MRABET
WHERE C.Catégorie IN (1,2); 4 KRAIEM
5 LABIDI
6 CHAOUACH

N°Cde NoProd Total-DNT


Exemple 2:
100 10 5.100,000
SELECT NoCom AS N°Cde, NoProd, 100 17 15.625,000
QteCommandée*Prix AS Total-DNT 101 12 5.500,000
102 12 19.250,000
FROM LigneCommande LC, Produit P 102 17 5.625,000
103 11 5.300,000
WHERE LC.NoProd = P.NoProd; 104 14 10.750,000
104 15 2.640,000
104 16 7.125,000
104 17 23.625,000

33
Les fonctions d'agrégation
 Elles sont utilisées avec les opérateurs de calcul et de
regroupement. SELECT fonction1(att1), fonction2(att2), ...
FROM table;

Les fonctions statistiques de base La fonction de comptage


SUM(attribut) : total des valeurs d'un attribut. COUNT(*) : nombre de n-uplets.
AVG(attribut) : moyenne des valeurs d'un COUNT(DISTINCT attribut) :
attribut. nombre de valeurs différentes de
MIN(attribut) : plus petite valeur d'un attribut. l'attribut.

MAX(attribut) : plus grande valeur d'un


attribut.
Rq : les valeurs NULL sont ignorées.
34
Les fonctions statistiques (1)

Exemple 1: SUM
SELECTNoProd, SUM(QteCommandée) AS Qte-Totale
FROM LigneCommande
GROUP BY NoProd;
 Quantité totale commandée pour chaque produit.
Exemple 2: AVG
SELECT NoProd, AVG(QteCommandée) AS Qte-Moyenne
FROM LigneCommande
GROUP BY NoProd;

 Quantité moyenne commandée pour chaque produit.

35
Les fonctions statistiques (2)

Exemple 3: MIN
SELECTNoCli, Nom, MIN(Compte) AS Compte-Min
FROM Client;

 Les clients dont la valeur des comptes est minimale.

Exemple 4: MAX
SELECT NoProd, MAX(QteStock) AS Stock-Max
FROM Produit ;

 Les produits dont la quantité en stock est maximale.

36
La fonction de comptage
Exemple 1: Nombre total de commandes.

SELECTCount( ) AS Nbre-Total-Cdes
*
FROM Commande;
Exemple 2: Quantité moyenne commandée pour les produits faisant
l’objet de plus de 3 commandes.
SELECTNoProd, AVG(QteCommandée)
FROM LigneCommande
GROUP BY NoProd

HAVING Count( ) > 3;


*

37

Вам также может понравиться