0% ont trouvé ce document utile (0 vote)
32 vues12 pages

Les Quantificateurs en SQL

Ce document fournit une explication détaillée des quantificateurs en SQL, notamment EXISTS, ALL, et ANY/SOME, en les reliant à des concepts mathématiques. Il inclut des définitions, des syntaxes SQL, des algorithmes d'exécution, des exemples pratiques, ainsi que des erreurs communes et leurs solutions. Le cours se termine par des exercices pratiques et des conseils d'optimisation pour améliorer les performances des requêtes SQL.

Transféré par

oyono ovono cedric
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)
32 vues12 pages

Les Quantificateurs en SQL

Ce document fournit une explication détaillée des quantificateurs en SQL, notamment EXISTS, ALL, et ANY/SOME, en les reliant à des concepts mathématiques. Il inclut des définitions, des syntaxes SQL, des algorithmes d'exécution, des exemples pratiques, ainsi que des erreurs communes et leurs solutions. Le cours se termine par des exercices pratiques et des conseils d'optimisation pour améliorer les performances des requêtes SQL.

Transféré par

oyono ovono cedric
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 Quantificateurs en SQL

Explication Ultra-Détaillée Pas à Pas

Cours SQL Avancé


8 juin 2025

Table des matières


1 Introduction aux Quantificateurs 3
1.1 Correspondance Mathématiques - SQL . . . . . . . . . . . . . . . . . . . . 3

2 Quantificateur Existentiel : EXISTS 3


2.1 Définition Mathématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Syntaxe SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Algorithme d’Exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Exemple Détaillé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Quantificateur Universel : ALL 5


3.1 Définition Mathématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 Syntaxe SQL Directe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3 Exemple avec ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 Quantificateur Universel avec NOT EXISTS 6


4.1 Principe de la Double Négation . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2 Pattern de Division Relationnelle . . . . . . . . . . . . . . . . . . . . . . . 6
4.3 Exemple Ultra-Détaillé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

5 Quantificateur ANY/SOME 7
5.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Exemple ANY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6 Comparaison des Approches 8

7 Erreurs Communes et Solutions 8


7.1 Erreur 1 : Oubli de Corrélation . . . . . . . . . . . . . . . . . . . . . . . . 8
7.2 Erreur 2 : Gestion des Valeurs NULL . . . . . . . . . . . . . . . . . . . . . 9
7.3 Erreur 3 : Confusion ALL vs ANY . . . . . . . . . . . . . . . . . . . . . . 9

8 Méthode Infaillible en 6 Étapes 10

9 Exercices Pratiques 10
9.1 Exercice 1 : Clients Fidèles . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
9.2 Exercice 2 : Produits Universels . . . . . . . . . . . . . . . . . . . . . . . . 11

1
Cours Détaillé Quantificateurs SQL

10 Optimisation et Performance 11
10.1 Index Recommandés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
10.2 Conseils de Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

11 Conclusion 11

2
Cours Détaillé Quantificateurs SQL

1 Introduction aux Quantificateurs


Définition
Un quantificateur est un opérateur logique qui exprime une quantité ou une éten-
due. En mathématiques et en SQL, nous utilisons principalement deux types :

∃ : quantificateur existentiel (“il existe”) (1)


∀ : quantificateur universel (“pour tout”) (2)
(3)

1.1 Correspondance Mathématiques - SQL


Mathématiques SQL Signification
∃x : P (x) EXISTS Il existe au moins un
∀x : P (x) ALL Pour tous
∀x : P (x) NOT EXISTS + NOT Pour tous (alternative)
∃x : P (x) ANY/SOME Au moins un (comparaison)

2 Quantificateur Existentiel : EXISTS


2.1 Définition Mathématique
Définition
Soit E un ensemble et P (x) une propriété. On note :

∃x ∈ E : P (x)

qui se lit : “Il existe au moins un élément x dans E tel que la propriété P (x) soit
vraie.”

2.2 Syntaxe SQL

Listing 1 – Syntaxe générale EXISTS


1 SELECT colonnes
2 FROM table_principale
3 WHERE EXISTS (
4 SELECT 1
5 FROM table_secondaire
6 WHERE condition_de_liaison
7 );

3
Cours Détaillé Quantificateurs SQL

2.3 Algorithme d’Exécution


Méthode
Algorithme EXISTS :
1. Pour chaque ligne de la table principale
2. Exécuter la sous-requête avec les valeurs de la ligne courante
3. Si la sous-requête retourne au moins une ligne :
→ Inclure cette ligne dans le résultat
4. Sinon :
→ Exclure cette ligne du résultat

2.4 Exemple Détaillé


Exemple
Contexte : Tables clients et commandes
Question : Quels clients ont passé au moins une commande ?
Étape 1 - Formulation mathématique :

∃c ∈ Commandes : c.client_id = client.id

Étape 2 - Code SQL :


1 SELECT c . nom , c . email
2 FROM clients c
3 WHERE EXISTS (
4 SELECT 1
5 FROM commandes cmd
6 WHERE cmd . client_id = c . id
7 );

Étape 3 - Exécution manuelle :


— Client 1 (Jean) : Chercher dans commandes où client_id = 1
→ Trouvé 2 commandes ⇒ INCLUS
— Client 2 (Marie) : Chercher dans commandes où client_id = 2
→ Aucune commande ⇒ EXCLU

4
Cours Détaillé Quantificateurs SQL

3 Quantificateur Universel : ALL


3.1 Définition Mathématique
Définition
Soit E un ensemble et P (x) une propriété. On note :

∀x ∈ E : P (x)

qui se lit : “Pour tout élément x dans E, la propriété P (x) est vraie.”

3.2 Syntaxe SQL Directe

Listing 2 – Syntaxe ALL avec opérateur


1 SELECT colonnes
2 FROM table
3 WHERE colonne operateur ALL ( sous_requete ) ;

où operateur peut être : >, <, >=, <=, =, <>

3.3 Exemple avec ALL


Exemple
Question : Quels produits sont plus chers que TOUS les produits électroniques ?
Formulation mathématique :

∀pe ∈ Produits_Électroniques : prix > pe .prix

Code SQL :
1 SELECT nom , prix
2 FROM produits
3 WHERE prix > ALL (
4 SELECT prix
5 FROM produits
6 WHERE categorie = ’ lectronique ’
7 AND prix IS NOT NULL
8 );

Exécution manuelle :
— Sous-requête retourne : [100€, 200€, 300€]
— Pour chaque produit, vérifier : prix > 100 ET prix > 200 ET prix > 300
— Équivalent à : prix > MAX(100, 200, 300) = prix > 300€

5
Cours Détaillé Quantificateurs SQL

4 Quantificateur Universel avec NOT EXISTS


4.1 Principe de la Double Négation
Définition
En logique, nous avons l’équivalence :

∀x : P (x) ≡ ¬∃x : ¬P (x)

Traduction : “Pour tout x, P (x) est vrai” équivaut à “Il n’existe pas de x tel que
P (x) soit faux”.

4.2 Pattern de Division Relationnelle

Listing 3 – Template pour la division relationnelle


1 -- Trouver les X qui sont l i s TOUS les Y
2 SELECT x . id
3 FROM table_X x
4 WHERE NOT EXISTS (
5 SELECT y . id
6 FROM table_Y y
7 WHERE NOT EXISTS (
8 SELECT 1
9 FROM table_liaison l
10 WHERE l . x_id = x . id
11 AND l . y_id = y . id
12 )
13 );

6
Cours Détaillé Quantificateurs SQL

4.3 Exemple Ultra-Détaillé


Exemple
Question : Quels clients ont commandé TOUS les produits de la catégorie “Livre” ?
Reformulation : Quels clients pour lesquels il n’existe AUCUN livre qu’ils n’ont
pas commandé ?
Formulation mathématique :

¬∃l ∈ Livres : ¬∃c ∈ Commandes : (c.client_id = client.id) ∧ (c.produit_id = l.id)

Code SQL :
1 SELECT c . nom
2 FROM clients c
3 WHERE NOT EXISTS (
4 -- Il n ’ existe pas de livre ...
5 SELECT p . id
6 FROM produits p
7 WHERE p . categorie = ’ Livre ’
8 AND NOT EXISTS (
9 -- ... que ce client n ’ a pas c o m m a n d
10 SELECT 1
11 FROM commandes cmd
12 WHERE cmd . client_id = c . id
13 AND cmd . produit_id = p . id
14 )
15 );

Algorithme d’exécution pour un client donné :


1. Lister tous les livres : [Livre1, Livre2, Livre3]
2. Pour chaque livre :
— Vérifier si le client l’a commandé
— Si NON → STOP, ce client ne satisfait pas la condition
3. Si tous les livres ont été commandés → inclure ce client

5 Quantificateur ANY/SOME
5.1 Définition
Définition
ANY et SOME sont synonymes et équivalent à un EXISTS avec comparaison :

∃x ∈ E : valeur opérateur x

7
Cours Détaillé Quantificateurs SQL

5.2 Exemple ANY


Exemple
Question : Produits moins chers qu’au moins un produit de luxe
1 SELECT nom , prix
2 FROM produits
3 WHERE prix < ANY (
4 SELECT prix
5 FROM produits
6 WHERE categorie = ’ Luxe ’
7 );

Équivalence avec EXISTS :


1 SELECT nom , prix
2 FROM produits p1
3 WHERE EXISTS (
4 SELECT 1
5 FROM produits p2
6 WHERE p2 . categorie = ’ Luxe ’
7 AND p1 . prix < p2 . prix
8 );

6 Comparaison des Approches


Quantificateur Condition Équivalent Performance
EXISTS Au moins un IN (sans NULL) Excellente
ALL Tous (comparaison) MAX/MIN Bonne
NOT EXISTS Tous (liaison) Division relationnelle Variable
ANY/SOME Au moins un (comp.) EXISTS Bonne

7 Erreurs Communes et Solutions


7.1 Erreur 1 : Oubli de Corrélation
Attention
Code incorrect :
1 -- Pas de lien entre la r e q u t e principale et la sous -
requ te
2 WHERE EXISTS ( SELECT 1 FROM commandes WHERE total > 100)

Code correct :
1 -- C o r r l a t i o n avec la table principale
2 WHERE EXISTS ( SELECT 1 FROM commandes
3 WHERE client_id = c . id AND total > 100)

8
Cours Détaillé Quantificateurs SQL

7.2 Erreur 2 : Gestion des Valeurs NULL


Attention
Problème avec ALL :
— Si la sous-requête retourne des NULL, ALL peut retourner NULL
— Si la sous-requête est vide, ALL retourne TRUE
Solution :
1 WHERE prix > ALL (
2 SELECT prix
3 FROM produits
4 WHERE categorie = ’ Test ’
5 AND prix IS NOT NULL -- Filtrer les NULL
6 )
7 AND EXISTS ( -- V r i f i e r que la sous - r e q u t e n ’ est pas vide
8 SELECT 1 FROM produits WHERE categorie = ’ Test ’
9 );

7.3 Erreur 3 : Confusion ALL vs ANY


Pour “plus cher que le moins Pour “plus cher que le plus
cher” cher”
prix > ANY (sous-requête) prix > ALL (sous-requête)
≡ prix > MIN(...) ≡ prix > MAX(...)

9
Cours Détaillé Quantificateurs SQL

8 Méthode Infaillible en 6 Étapes


Méthode
Algorithme de résolution :
1. Traduire en français la question posée
— Identifier les mots-clés : “au moins un”, “tous”, “chaque”
2. Identifier le quantificateur approprié
— “Au moins un” → EXISTS ou ANY
— “Tous” → ALL ou NOT EXISTS
3. Écrire la logique en pseudo-code
— Décomposer la question en étapes simples
4. Convertir en SQL étape par étape
— Commencer par la sous-requête
— Ajouter les corrélations
5. Tester avec des données simples
— Exécution manuelle sur 2-3 exemples
6. Optimiser si nécessaire
— Ajouter des index
— Vérifier le plan d’exécution

9 Exercices Pratiques
9.1 Exercice 1 : Clients Fidèles
Question : Trouver les clients qui ont commandé chaque mois de 2024.
Solution :
1 SELECT c . nom
2 FROM clients c
3 WHERE NOT EXISTS (
4 SELECT m . numero_mois
5 FROM ( VALUES (1) ,(2) ,(3) ,(4) ,(5) ,(6) ,
6 (7) ,(8) ,(9) ,(10) ,(11) ,(12) ) AS m ( numero_mois )
7 WHERE NOT EXISTS (
8 SELECT 1
9 FROM commandes cmd
10 WHERE cmd . client_id = c . id
11 AND YEAR ( cmd . date_commande ) = 2024
12 AND MONTH ( cmd . date_commande ) = m . numero_mois
13 )
14 );

10
Cours Détaillé Quantificateurs SQL

9.2 Exercice 2 : Produits Universels


Question : Trouver les produits commandés par tous les clients.
Solution :
1 SELECT p . nom
2 FROM produits p
3 WHERE NOT EXISTS (
4 SELECT c . id
5 FROM clients c
6 WHERE NOT EXISTS (
7 SELECT 1
8 FROM commandes cmd
9 WHERE cmd . client_id = c . id
10 AND cmd . produit_id = p . id
11 )
12 );

10 Optimisation et Performance
10.1 Index Recommandés

Listing 4 – Création d’index pour les quantificateurs


1 -- Pour les jointures dans EXISTS
2 CREATE INDEX idx_co mmandes_cl ient_id ON commandes ( client_id ) ;
3 CREATE INDEX i dx _co mm an de_ pr od uit s_ id s
4 ON commande_produits ( commande_id , produit_id ) ;
5

6 -- Pour les conditions de filtrage


7 CREATE INDEX idx_produits_categorie ON produits ( categorie ) ;
8 CREATE INDEX idx_commandes_date ON commandes ( date_commande ) ;
9

10 -- Index c o m p o s s pour les r e q u t e s complexes


11 CREATE INDEX i dx _co mm an des _c li ent _d at e
12 ON commandes ( client_id , date_commande ) ;

10.2 Conseils de Performance


1. EXISTS vs IN : Préférer EXISTS pour les sous-requêtes corrélées
2. SELECT 1 vs SELECT * : Toujours utiliser SELECT 1 dans EXISTS
3. Filtrage précoce : Ajouter des conditions restrictives dans les sous-requêtes
4. Index appropriés : Créer des index sur les colonnes de jointure
5. EXPLAIN PLAN : Analyser le plan d’exécution pour les requêtes complexes

11 Conclusion
Les quantificateurs SQL permettent d’exprimer des requêtes complexes de manière
élégante et efficace. La maîtrise de ces concepts nécessite :

11
Cours Détaillé Quantificateurs SQL

— Une compréhension solide de la logique mathématique sous-jacente


— Une pratique régulière avec des exemples concrets
— Une attention particulière aux détails (corrélations, NULL, etc.)
— L’application systématique de la méthode en 6 étapes
Avec ces outils, vous serez capable de résoudre tous les problèmes de quantification en
SQL, même les plus complexes.

12

Vous aimerez peut-être aussi