BDW - Jointures SQL
Fabien Duchateau
[Link] [at] [Link]
Université Claude Bernard Lyon 1
2024 - 2025
[Link]
Positionnement dans BDW
Ces diapositives utilisent le genre féminin (e.g., chercheuse, développeuses) plutôt
que l’écriture inclusive (moins accessible, moins concise, et pas totalement inclusive)
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 2 / 31
Requêtes sur plusieurs tables
Interrogation de plusieurs tables en utilisant la clause from
I Produit cartésien
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 3 / 31
Types de jointure
Si l’on met une ou plusieurs conditions entre attributs de différentes
tables, on ne parle plus de produit cartésien mais de jointure
I Jointure interne
I Jointure externe
I Semi-jointure
I Auto-jointure
[Link]
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 4 / 31
Conditions de jointure
Les conditions de jointures spécifient comment les tables sont
jointes (quels attributs et quelle comparaison)
I Équi-jointure : la condition de jointure est une égalité
I Theta-jointure : la condition de jointure n’est pas (forcément)
une égalité (>, …, ≤, in, like, …)
I Naturelle : la condition de jointure applique une égalité entre
les attributs identiques (même label) des deux tables
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 5 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
SELECT att1 , att2 , …
FROM nom_table1 , nom_table2 , … ;
I Plusieurs tables séparées par des virgules = produit cartésien
entre ces différentes tables
I Si la requête utilise un attribut att présent dans plusieurs
tables, on doit l’écrire nom_table.att ou utiliser un alias de
table [Link]
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 7 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de produit cartésien
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les paires de nom d’université et de nom d’élève
nomU nomE
INSA Ana
SELECT nomU,nomE UCB Ana
FROM Universite, Eleve; UJF Ana Total de 48
UJM Ana
INSA Bob tuples (12 × 4)
… …
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 8 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
SELECT att1 , att2 , …
FROM nom_table1 JOIN nom_table2
USING(attcx , …, attcy )
[ WHERE autres_conditions ] ;
I Soient attc1 , …, attck les attributs communs des tables
nom_table1 et nom_table2 , et {attcx , …, attcy } ∈ {attc1 , …,
attck }
I Les instances de nom_table1 et nom_table2 qui possèdent des
valeurs égales sur le sous-ensemble de leurs attributs
communs attcx , …, attcy sont ”assemblées” en un tuple qui est
ajouté dans le résultat
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 10 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure naturelle
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les élèves avec plus de 19 de moyenne qui ont candidaté
SELECT DISTINCT [Link], nomE,
idE nomE moyenneLycee nomU
,→ moyenneLycee, nomU 123 Ana 19.5 INSA
FROM Eleve e JOIN Candidature c 123 Ana 19.5 UCB
123 Ana 19.5 UJM
,→ USING(idE) 876 Irene 19.5 UCB
WHERE moyenneLycee > 19; 876 Irene 19.5 UJF
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 11 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
La jointure interne est fréquemment utilisée : seuls les tuples qui
respectent la condition de jointure sont conservés
SELECT att1 , att2 , …
FROM nom_table1 INNER JOIN nom_table2
ON nom_table1 .attx Θ nom_table2 .attx
[ WHERE autres_conditions ] ;
I Soit Θ un opérateur parmi =, 6=, <, >, ≤, ≥, like, …
I La condition de jointure nom_table1 .attx Θ nom_table2 .attx
s’exprime avec le mot-clé on
I Les autres conditions s’expriment dans le where et sont
appliquées après la condition de jointure
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 13 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure interne
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les élèves qui ont candidaté dans une université grenobloise
SELECT [Link], nomE
FROM Eleve e INNER JOIN Candidature c ON [Link] = idE nomE
,→ [Link] 345 Chloe
543 Chloe
INNER JOIN Universite u ON [Link] = [Link] 876 Irene
WHERE [Link] = 'Grenoble'; 876 Irene
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 14 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe obsolète de jointure interne
SELECT att1 , att2 , …
FROM nom_table1 , nom_table2 , …
WHERE nom_table1 .attx Θ nom_table2 .attx
[ AND autres_conditions ] ;
I Jointure interne ≡ sélection sur le produit cartésien
I La condition de jointure nom_table1 .attx Θ nom_table2 .attx
s’exprime ici dans le where
Syntaxe obsolète, à éviter !
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 15 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure interne obsolète
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les élèves qui ont candidaté dans une université grenobloise
SELECT [Link], nomE idE nomE
FROM Eleve e, Candidature c, Universite u 345 Chloe
543 Chloe
WHERE [Link] = [Link] AND [Link] = [Link] AND 876 Irene
,→ [Link] ='Grenoble'; 876 Irene
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 16 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure interne obsolète
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les élèves qui ont candidaté dans une université grenobloise
SELECT [Link], nomE idE nomE
FROM Eleve e, Candidature c, Universite u 345 Chloe
543 Chloe
WHERE [Link] = [Link] AND [Link] = [Link] AND 876 Irene
,→ [Link] ='Grenoble'; 876 Irene
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 16 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
SELECT att1 , att2 , …
FROM nom_table1 < LEFT | RIGHT | FULL >
[ OUTER ] JOIN nom_table2
ON nom_table1 .attx = nom_table2 .attx
[ WHERE autres_conditions ] ;
I Non exprimable en Algèbre Relationnelle
I Une requête avec jointure outer join retourne les tuples qui
remplissent la condition de la jointure, mais aussi certains
tuples qui ne la satisfont pas
I Ces tuples qui ne satisfont pas la condition de jointure
dépendent du mot-clé left, right ou full
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 18 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe (2)
Sélection des tuples de la jointure externe :
I left (ou right) : les tuples de la table de gauche (ou de
droite) sans correspondance dans l’autre table sont inclus dans
le résultat avec un null pour les attributs de l’autre table
I full : toutes les lignes de chacune des tables sont retournées.
Les lignes sans correspondance ont leurs attributs complétés
par des null
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 19 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure externe à gauche
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les élèves avec une moyenne supérieure à 19 et les éventuelles
universités où ils/elles ont candidaté
idE nomE nomU
SELECT DISTINCT [Link], nomE, nomU 123 Ana INSA
123 Ana UCB
FROM Eleve e LEFT OUTER JOIN 123 Ana UJM
,→ Candidature c 456 Damien NULL
654 Ana NULL
ON [Link] = [Link] 876 Irène UCB
WHERE moyenneLycee > 19; 876 Irène UJF
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 20 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure externe complète
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Requête identique, mais avec un full outer join
idE nomE nomU
SELECT [Link], nomE, nomU 123 Ana UJM
FROM Eleve e FULL OUTER JOIN 123 Ana INSA
123 Ana UCB
,→ Candidature c 456 Damien NULL
ON [Link] = [Link] 654 Ana NULL
876 Irène UJF
WHERE moyenneLycee > 19; 876 Irène UCB
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 21 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de jointure externe complète (2)
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Pourquoi la requête full outer join donne le même résultat
que celle avec left outer join ?
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 22 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
SELECT nom_table2 .*
FROM nom_table1 JOIN nom_table2 USING(attcx , …) ;
I Une semi-jointure est une jointure qui ne garde dans le
résultat que les attributs d’une seule table (ici les attributs de
nom_table2 )
I Construite avec nom_table.* dans la clause select (tous
types de jointures acceptés, i.e., interne, externe)
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 24 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple de semi-jointure
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les informations sur les élèves qui ont candidaté dans une
université grenobloise
SELECT e.*
idE nomE moyenneLycee effectifLycee
FROM Eleve e JOIN Candidature 345 Chloe 17.5 500
,→ c USING(idE) 543 Chloe 17 2000
876 Irene 19.5 400
JOIN Universite USING(nomU) 876 Irene 19.5 400
WHERE ville = 'Grenoble';
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 25 / 31
Plan
Produit cartésien
Jointure naturelle
Jointure interne
Jointure externe
Semi-jointure
Auto-jointure
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Syntaxe
SELECT t1.att1 , t2.att1 , …
FROM nom_table1 t1 JOIN nom_table1 t2
USING(attcx , …) ;
I Auto-jointure = jointure d’une table avec elle même (tous
types de jointures acceptés, i.e., interne, externe), en utilisant
des alias de table (ici t1 et t2)
I Exemples fréquents d’auto-jointure : personne/parents,
employée/supérieure hiérarchique, pièce/composant
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 27 / 31
Produit cartésien Jointure naturelle Jointure interne Jointure externe Semi-jointure Auto-jointure
Exemple d’auto-jointure
idE nomE moyenneLycée effectifLycée idE nomU département décision
123 Ana 19.5 1000 123 INSA informatique O
234 Bob 18 1500 123 UCB électronique N
345 Chloé 17.5 500 123 UCB informatique O
456 Damien 19.5 1000 123 UJM électronique O
543 Chloé 17 2000 234 INSA biologie N
567 Éléonore 14.5 2000 345 UJF bioinformatique O
654 Ana 19.5 1000 345 UJM bioinformatique N
678 Farid 19 200 345 UJM électronique N
765 Joana 14.5 1500 345 UJM informatique O
789 Gisèle 17 800 543 UJF informatique N
876 Irène 19.5 400 678 UCB histoire O
898 Hector 18.5 800 765 UCB histoire O
765 UJM histoire N
Table Élève 765 UJM psychologie O
876 UCB informatique N
nomU ville effectif 876 UJF biologie O
INSA Lyon 36000 876 UJF biologie marine N
UCB Lyon 15000 898 INSA informatique O
UJF Grenoble 10000 898 UCB informatique O
UJM Saint-Étienne 21000
Table Candidature
Table Université
Les paires d’élèves qui ont candidaté dans la même université
et le même département
SELECT DISTINCT [Link], [Link] [Link] [Link]
FROM Candidature c1 INNER JOIN Candidature c2 ON 123 898
123 876
,→ [Link] = [Link] 123 345
AND [Link] = [Link] 678 765
876 898
AND [Link] < [Link];
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 28 / 31
Classification des jointures
I La condition = naturelle,
équi-jointure, θ-jointure
I Les n-uplets conservés dans le
résultat = jointure interne,
jointures externes (et produit
cartésien)
I Les attributs conservés dans le
résultat = semi-jointure
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 29 / 31
En résumé
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 30 / 31
Un moment de réflexion
Qu’est ce que l’hypothèse du monde clos ? Quel opérateur
permet de “contrer” cette hypothèse ?
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 31 / 31
Un moment de réflexion
Qu’est ce que l’hypothèse du monde clos ? Quel opérateur
permet de “contrer” cette hypothèse ?
Hypothèse du monde clos : l’absence d’information (null)
implique de filtrer le n-uplet (e.g., si on requête les universités de
Lyon, une université qui n’a pas de ville n’est pas retournée).
La jointure externe et/ou une condition ”OR att IS NULL”
permettent de contrer cette hypothèse en retournant les n-uplets
qui ont un null ou aucune correspondance de jointure
BDW - Base de données et programmation web // Jointures SQL UCBL Lyon 1 31 / 31