0% ont trouvé ce document utile (0 vote)
6 vues22 pages

Comprendre les jointures SQL et requêtes

Transféré par

Khalid Ela
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues22 pages

Comprendre les jointures SQL et requêtes

Transféré par

Khalid Ela
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Les jointures

 Principe :
– Joindre plusieurs tables
– On utilise les informations communes des tables

elazami © 2024-2025 1
Les jointures
 Prenons pour exemple un ouvrage de V. Hugo
 Si l'on souhaite des informations sur la cote d'un
exemplaire il faudrait le faire en 2 temps:

– 1) je récupère l'id de l'ouvrage :


SELECT id FROM ouvrage where auteur LIKE 'V. Hugo'

– 2) Je récupère la ou les cote avec l'id récupéré


SELECT cote FROM exemplaire WHERE ouvrageId = id_récupéré

elazami © 2024-2025 2
Les jointures
 On peux faire tout ça (et plus encore) en une seule requête
 C'est là que les jointures entrent en jeu:

SELECT [Link]
FROM exemplaire
INNER JOIN ouvrage ON [Link] = [Link]
WHERE [Link] LIKE 'V. Hugo' ;

elazami © 2024-2025 3
Les jointures

elazami © 2024-2025 4
Les jointures
Ville Email

INNER JOIN

LEFT JOIN

RIGHT JOIN

elazami © 2024-2025 5
SQL
Requêtes avec blocs emboîtés

elazami © 2024-2025 6
Jointure par blocs emboîtés
BD exemple:
 Produit(np,nomp,couleur,poids,prix) les produits
 Usine(nu,nomu,ville,pays) les usines
 Fournisseur(nf,nomf,type,ville,pays) les fournisseurs
 Livraison(np,nu,nf,quantité) les livraisons
 np référence [Link]
 nu référence [Link]
 nf référence [Link]

elazami © 2024-2025 7
Jointure par blocs emboîtés
Requête: Nom et couleur des produits livrés par le fournisseur 1
 Solution 1 : la jointure déclarative
SELECT nomp, couleur FROM Produit,Livraison
WHERE ([Link] = [Link]) AND nf = 1 ;
 Solution 2 : la jointure procédurale (emboîtement)
Nom et couleur des produits livrés par le fournisseur 1

SELECT nomp, couleur FROM Produit


WHERE np IN
(SELECT np FROM Livraison WHERE nf = 1) ;

Numéros de produits livrés par le fournisseur 1

elazami © 2024-2025 8
Jointure par blocs emboîtés
 SELECT nomp, couleur FROM Produit
WHERE np IN
( SELECT np FROM Livraison WHERE nf = 1) ;

 IN compare chaque valeur de np avec l'ensemble (ou multi-ensemble)


de valeurs retournés par la sous-requête
 IN peut aussi comparer un tuple de valeurs:
SELECT nu FROM Usine
WHERE (ville, pays) IN (SELECT ville, pays FROM Fournisseur);

elazami © 2024-2025 9
Composition de conditions
Requête: Nom des fournisseurs qui approvisionnent une usine de
Londres ou de Paris en un produit rouge

SELECT nomf
FROM Livraison, Produit, Fournisseur, Usine
WHERE
couleur = 'rouge'
AND [Link] = [Link]
AND [Link] = [Link]
AND [Link] = [Link]
AND ([Link] = 'Londres’ OR [Link] = 'Paris');

elazami © 2024-2025 10
Composition de conditions
Requête: Nom des fournisseurs qui approvisionnent une usine de Londres
ou de Paris en un produit rouge

SELECT nomf FROM Fournisseur


WHERE nf IN

(SELECT nf FROM Livraison


WHERE np IN (SELECT np FROM Produit
WHERE couleur = 'rouge')

AND nu IN
(SELECT nu FROM Usine
WHERE ville = 'Londres' OR ville = 'Paris')
);

elazami © 2024-2025 11
Quantificateur ALL
Requête: Numéros des fournisseurs qui ne fournissent que des
produits rouges

SELECT nf FROM Fournisseur


WHERE 'rouge' = ALL (SELECT couleur FROM Produit
WHERE np IN (SELECT np FROM Livraison
WHERE [Link] = [Link] ) ) ;

 La requête imbriquée est ré-évaluée pour chaque tuple de la requête (ici


pour chaque nf)
 ALL: tous les éléments de l'ensemble doivent vérifier la condition

elazami © 2024-2025 12
Condition sur des ensembles : EXISTS
 Test si l’ensemble n’est pas vide (E  )
Exemple : Noms des fournisseurs qui fournissent au moins un produit
rouge
SELECT nomf
FROM Fournisseur
WHERE EXISTS ce fournisseur
( SELECT *
FROM Livraison, Produit
WHERE [Link] = [Link]
AND [Link] = [Link] Le produit fourni
AND [Link] = 'rouge' ); est rouge
elazami © 2024-2025 13
Blocs emboîtés - récapitulatif
SELECT …
FROM …
WHERE …
attr IN requête
attr NOT IN requête

attr opérateur ALL requête

EXISTS requête
NOT EXISTS requête
elazami © 2024-2025 14
SQL
Traitement des résultat

elazami © 2024-2025 15
Fonctions sur les colonnes
 Attributs calculés
 Exemple : SELECT nom, population*1000/surface FROM Pays

 Opérateurs sur attributs numériques


 SUM: somme des valeurs des tuples sélectionnés
 AVG: moyenne

Opérateurs
 Opérateurs sur tous types d’attributs d'agrégation
 MIN: minimum
 MAX: maximum
 COUNT: nombre de tuples sélectionnés
elazami © 2024-2025 16
Opérateurs d'agrégation
pays
Nom Capitale Population Surface Continent
Irlande Dublin 5 70 Europe
Autriche Vienne 10 83 Europe
UK Londres 50 244 Europe
Suisse Berne 7 41 Europe
USA Washington 350 441 Amérique

SELECT MIN(population), MAX(population), AVG(population),


SUM(surface), COUNT(*)
FROM Pays WHERE continent = ‘Europe’
Donne le résultat :
MIN(population) MAX(population) AVG(population) SUM(surface) COUNT(*)

5 50 18 438 4

elazami © 2024-2025 17
DISTINCT
pays
Nom Capitale Population Surface Continent
Irlande Dublin 5 70 Europe
Autriche Vienne 10 83 Europe
UK Londres 50 244 Europe
Suisse Berne 7 41 Europe
USA Washington 350 441 Amérique

Suppression des doubles


SELECT DISTINCT continent
FROM Pays
Donne le résultat : Continent

Europe
Amérique
elazami © 2024-2025 18
ORDER BY
Tri des tuples du résultat: 2 possibilités ASC / DESC
SELECT continent, nom, population
FROM Pays
Tri des tuples par condition:
WHERE surface > 60
ORDER BY continent, nom ASC SELECT continent, nom, population
FROM Pays
ORDER BY
Continent Nom Population (CASE
WHEN Capital IS NULL THEN continent
Amérique USA 350
ELSE Capital
Europe Autriche 10 END);
Europe Irlande 5
Europe UK 50

elazami © 2024-2025 19
GROUP BY
Partition de l'ensemble des tuples en groupes homogènes:

SELECT continent, MIN(population), MAX(population),AVG(population),


SUM(surface), COUNT(*)
FROM Pays GROUP BY continent ;

Continent MIN(population) MAX(population) AVG(population) SUM(surface) COUNT(*)

Europe 5 50 18 438 4

Amérique 350 350 350 441 1

A noter : cette commande doit toujours s’utiliser après la commande WHERE et avant la
commande HAVING.

elazami © 2024-2025 20
HAVING
Conditions sur les fonctions d'agrégation
• Il n'est pas possible d'utiliser la clause WHERE pour faire des conditions sur une
fonction d'agrégation.
• Donc, si l'on veut afficher les pays dont on possède plus de 3 individus, la requête
suivante ne fonctionnera pas.
SELECT continent, COUNT(*)
FROM Pays
WHERE COUNT(*) > 3
GROUP BY continent ;

• Il faut utiliser HAVING qui se place juste après le GROUP BY


SELECT continent, COUNT(*)
FROM Pays
GROUP BY continent
HAVING COUNT(*) > 3;

elazami © 2024-2025 21
Renommage des attributs : AS
SELECT MIN(population) AS min_pop,
MAX(population) AS max_pop,
AVG(population) AS avg_pop,
SUM(surface) AS sum_surface,
COUNT(*) AS count
FROM Pays
WHERE continent = ‘Europe’ ;

min_pop max_pop avg_pop sum_surface count

5 50 18 438 4

elazami © 2024-2025 22

Vous aimerez peut-être aussi