FST Tanger
Département Génie Informatique
La jointure va nous permettre de sélectionner des informations dans plusieurs
tables grâce aux relations existant entre ces tables(via des clés étrangères).
1 / 30
La jointure va nous permettre de sélectionner des informations dans plusieurs
tables grâce aux relations existant entre ces tables(via des clés étrangères).
1 / 30
1 / 30
La jointure va nous permettre de sélectionner des informations dans plusieurs
tables grâce aux relations existant entre ces tables(via des clés étrangères).
Il va néanmoins falloir indiquer comment se fait la relation entre ces tables.
Exemple: récupérer le nom et le prénom du client ayant passé la commande n°1:
SELECT nom, prenom
FROM Clients, Commande
WHERE Commande.num_client=Client.num_client AND num_commande = 1;
La clause WHERE indique que le numéro de commande doit être égal à 1 et que
la jointure va se faire sur le numéro de client : une fois que SQL va trouver la
commande n° 1 dans la table commande, il va prendre le numéro de client
contenu dans l'enregistrement et avec ce numéro, aller chercher dans la table
Clients le nom et le prénom correspondants à ce numéro.
1 / 30
1 / 30
Nous allons d'abord faire une jointure entre les tables Clients et Commande, et
ajouter la clause
DISTINCT sur le champ ou la répétition peut se produire :
SELECT client.code_cli,nom_cli,pre_cli
FROM Client, Commande
WHERE Commande.code_cli= Client.code_cli;
1 / 30
En indiquant la clause DISTINCT avant le champ num_client, on indique à SQL qu'on
ne veut pas voir apparaître plusieurs fois un client ayant ce numéro dans la sélection
renvoyée.
Requête :
SELECT DISTINCT client.code_cli,nom_cli,pre_cli
FROM Client, Commande
WHERE Commande.code_cli= Client.code_cli;
Résultat :
1 / 30
On peut même rendre le résultat de la sélection plus agréable à la lecture en
utilisant la clause
ORDER BY :
Requête:
SELECT client.code_cli,nom_cli,pre_cli
FROM Client, Commande
WHERE Commande.code_cli= Client.code_cli
order by nom_cli, pre_cli ;
1 / 30
SQL a cinq fonctions importantes : SUM, AVG, MAX, MIN et COUNT. On les appelle
fonctions d'ensemble parce qu'elles résument le résultat d'une requête plutôt
que de renvoyer une liste d'enregistrements.
1 / 30
Requête 1 :
SELECT MIN(prix_art) as Prix_minimum , MAX(prix_art)as
Prix_maximum,AVG(prix_art) as Moyenne_Prix
FROM Article;
Résultat 1 : la requête affiche le prix le plus petit de la table Article, le prix le plus
élevé et la moyenne des prix.
1 / 30
Requête 2 :
SELECT COUNT (*) as NB_article
FROM Article
WHERE Nom_art LIKE 'S*';
Résultat 2 : la requête retourne le nombre de produits dont le nom commence
par la lettre 'S'.
1 / 30
Une des utilisations les plus courantes de la clause GROUP BY est son association
avec une fonction d'ensemble (le plus souvent COUNT, pour compter le nombre
d'enregistrements dans chaque groupe).
Par exemple, si nous voulons la liste des clients, avec pour chaque client le
nombre de commandes qu'il a passé :
Abréviations des noms des tables
Requête :
SELECT c.cod_cli, nom_cli, count(*) AS [Nombre de commandes]
FROM client AS c, commande AS co
WHERE c.cod_cli=co.cod_cli
GROUP BY c.cod_cli, nom_cli;
Résultat:
1 / 30
On peut imbriquer autant de requêtes que l'on veut. La condition après la clause
WHERE peut porter sur le résultat d'une autre requête (ou sous-requête).
Supposons que l’on veuille afficher les clients qui ont commandé le produit 2 ;
select distinct nom_cli,pre_cli,vil_cli,code_cli from client
where code_cli in ( select code_cli
from commande as c, contenucommande as cc where c.num_cmd=cc.num_cmd
and cc.code_art=2 ;
) ;
Résultat :
1 / 30
Sous-requête renvoyant une seule valeur
Exemple : pour afficher les commandes d’un client (par exemple ‘ALAMI’) on peut
utiliser une sous-requête.
Requête :
SELECT num_cmd, date_cmd
FROM commande
WHERE code_cli in ( SELECT code_cli
FROM client
where nom_cli=‘alami');
Résultat :
1 / 30
Les sous-requêtes qui renvoient une liste de valeurs peuvent être naturellement
utilisées par l’opérateur IN.
Exemple : on veut les commandes de tous les clients dont le nom commence
par E.
Requête :
SELECT num_cmd, date_cmd
FROM commande
WHERE code_cli IN ( SELECT code_cli
FROM client
where nom_cli like 'E*'
);
Résultat :
1 / 30
Lorsqu'on veut que les résultats de plusieurs requêtes soient combinés entre eux, on
utilise la clause UNION.
UNION va fusionner les résultats des requêtes.
Par exemple, supposons que nous voulions afficher les clients habitant
Tanger et les clients habitant Rabat:
SELECT *
FROM Client
WHERE vil_cli='Tanger'
UNION
SELECT *
FROM Client
WHERE vil_cli='Rabat’;
Résultat:
1 / 30
Mais on peut utiliser d’autres fonctions, le langage SQL offre d’autres mot-clé pour
ce type de sous-requête, qui sont résumés dans le tableau suivant
1 / 30