Principe d'écriture d'une requête

Une même instruction SELECT permet de combiner Sélections, Projections, Jointures.

Exemple :

Soient les relations suivantes :

CLIENT(CodeClient, NomClient, AdrClient, TélClient)
COMMANDE(N°Commande, Date, CodeClient*)

Remarque : les clés primaires sont soulignées et les clés étrangères sont marquées par *

On désire obtenir le code et le nom des clients ayant commandé le 10/06/2020 :

SELECT DISTINCT CLIENT.CodeClient, NomClient
FROM CLIENT, COMMANDE
WHERE CLIENT.CodeClient=COMMANDE.CodeClient AND Date='10/06/2020';

ou avec la clause INNER JOIN :

SELECT DISTINCT CLIENT.CodeClient, NomClient
FROM CLIENT INNER JOIN COMMANDE ON CLIENT.CodeClient=COMMANDE.CodeClient
WHERE Date='10/06/2020';

Remarque :
Si l'on ne précisait pas CLIENT.CodeClient au niveau du SELECT, la commande SQL ne pourrait pas s'exécuter. En effet, il y aurait ambiguïté sur le CodeClient à projeter étant donné que 2 attributs CodeClient (celui de CLIENT et celui de COMMANDE) sont présents à l'issue de la jointure.

Il y a encore 2 autres possibilités si le SGBDR les supportent, et dans la mesure où ici les attributs joints ont le même nom dans les 2 tables :

SELECT DISTINCT CodeClient, NomClient
FROM CLIENT INNER JOIN COMMANDE USING(CodeClient)
WHERE Date='10/06/2020';

SELECT DISTINCT CodeClient, NomClient
FROM CLIENT NATURAL JOIN COMMANDE 
WHERE Date='10/06/2020';

Dans ces 2 dernières solutions, l'attribut CodeClient n'étant pas dupliqué, il n'est pas nécessaire de le préfixer avec le nom d'une table.