142
Chapitre 6 • SQL avancé
que la norme SQL3 ajoute encore quelques formes supplémentaires de jointures
relatives notamment aux clés étrangères, chacune plus indispensable que les autres.
d) Retour sur la notion de condition de non association
À la section 5.4.6, nous avions observé qu’une condition d’association pouvait
s’exprimer indifférement par une sous-requête ou par une jointure (sans parler de la
forme exists). En revanche, une condition de non-association ne pouvait être traduite
qu’en une sous-requête ou une forme not exists. Il est en fait possible de l’exprimer
en passant pas le mécanisme de jointure externe. Les clients qui n’ont pas passé de
commandes peuvent s’obtenir par les trois requêtes suivantes :
select NCLI,NOM
from
CLIENT
where NCLI not in (select NCLI from COMMANDE)
select NCLI,NOM
from
CLIENT C
where not exists (select * from COMMANDE
where NCLI = C.NCLI)
select NCLI,NOM
from
CLIENT C left outer join COMMANDE M
on (C.NCLI = M.NCLI)
where M.NCOM is null
e) Synthèse sur la forme des requêtes SFW
Ces extensions, ajoutées aux formes de base pourraient donner du langage SQL une
image de complexité et d’incohérence. Bien que cette critique soit en partie méritée,
les nouvelles constructions augmentent fortement la régularité du langage et simplifient ce dernier. Pour dire les choses plus concrètement, la probabilité qu’une
requête construite par un rédacteur naïf soit correcte 10 et s’interprète comme prévu,
est plus grande qu’auparavant !
Une requête SFW comporte principalement deux parties (pour simplifier, on
ignorera les clauses group by, having, order by et les fonctions agrégatives) :
select liste-valeurs
from
expression-de-table
où liste-valeurs désigne une liste d’expressions définissant chacune
une valeur pour chaque ligne de la table expression-de-table;
et expression-de-table est une expression définissant une table réelle
ou virtuelle (vue).
10. Un exemple concret : là où il est permis de mentionner une table, il est désormais possible d’y
introduire une expression dont l’évaluation produit une table.
Précédent

- 142/436

Suivant