Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

exo SQL

8 réponses
Avatar
irmr
Bonsoir,


Je suis HYPER novice, qqu'un peut il m'aider sur les questions suivantes.
J'ai essayé de répondre aux questions mais ???

1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux aussi
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ASC ;

Langage algébrique relationnel
R1=PROJECTION FOURNISSEUR(NOMFOURNISSEUR, TELEPHONEFOURNISSEUR) TRIE PAR
VILLEFOURNISSEUR

2. Établir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Créer un champ calculé avec AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
WHERE PRIXPUBLIC*0.95

Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC)
R2=PROJECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC*0.95)


3. Établir la valeur d'inventaire totale des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Utiliser SUM et AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
SUM (PRIXPUBLIC*0.95)

Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC)
R2=PROJECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC*0.95)



--

8 réponses

Avatar
Antoun
irmr wrote:
Bonsoir,


Je suis HYPER novice, qqu'un peut il m'aider sur les questions suivantes.
J'ai essayé de répondre aux questions mais ???

1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux aussi
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ASC ;



OK, à ceci près que ton énoncé est ambigu : est-ce une liste alpha des
fournisseurs ou une liste des fournisseur par ordre alpha des villes ?

Langage algébrique relationnel
R1=PROJECTION FOURNISSEUR(NOMFOURNISSEUR, TELEPHONEFOURNISSEUR) TRIE PAR
VILLEFOURNISSEUR

2. Établir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Créer un champ calculé avec AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
WHERE PRIXPUBLIC*0.95



SELECT NOMPRODUIT, PRIXPUBLIC * 0.95 AS PRIXINVENTAIRE
FROM PRODUITS

"Where" a pour fonction de filtrer, càd d'éliminer les données qui ne
correspondent pas aux conditions que tu poses.

Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC)



à quoi te sert cette R1 ? (ceci dit je ne connais rien au langage
algébrique relationnel)

R2=PROJECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC*0.95)



tu vois, ta projection correspond terme à terme au SELECT

3. Établir la valeur d'inventaire totale des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Utiliser SUM et AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
SUM (PRIXPUBLIC*0.95)



SELECT SUM (PRIXPUBLIC * 0.95) AS VALEURINVENTAIRETOTALE
FROM PRODUITS

attention à ton énoncé, qui ne te demande pas la valeur de chaque
produit, mais le total tous produits confondus, ce qui implique de ne
pas faire apparaître le détail des produits.

Sur la traduction de l'aglèbre relationnelle au SQL, cf. le site-culte
de Fred Brouard :
http://sql.developpez.com/divrelationnelle/
Avatar
Antoun
irmr wrote:
Bonsoir,


Je suis HYPER novice, qqu'un peut il m'aider sur les questions suivantes.
J'ai essayé de répondre aux questions mais ???

1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux aussi
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ASC ;



OK, à ceci près que ton énoncé est ambigu : est-ce une liste alpha des
fournisseurs ou une liste des fournisseur par ordre alpha des villes ?

Langage algébrique relationnel
R1=PROJECTION FOURNISSEUR(NOMFOURNISSEUR, TELEPHONEFOURNISSEUR) TRIE PAR
VILLEFOURNISSEUR

2. Établir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Créer un champ calculé avec AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
WHERE PRIXPUBLIC*0.95



SELECT NOMPRODUIT, PRIXPUBLIC * 0.95 AS PRIXINVENTAIRE
FROM PRODUITS

"Where" a pour fonction de filtrer, càd d'éliminer les données qui ne
correspondent pas aux conditions que tu poses.

Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC)



à quoi te sert cette R1 ? (ceci dit je ne connais rien au langage
algébrique relationnel)

R2=PROJECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC*0.95)



tu vois, ta projection correspond terme à terme au SELECT

3. Établir la valeur d'inventaire totale des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Utiliser SUM et AS)
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
SUM (PRIXPUBLIC*0.95)



SELECT SUM (PRIXPUBLIC * 0.95) AS VALEURINVENTAIRETOTALE
FROM PRODUITS

attention à ton énoncé, qui ne te demande pas la valeur de chaque
produit, mais le total tous produits confondus, ce qui implique de ne
pas faire apparaître le détail des produits.

Sur la traduction de l'aglèbre relationnelle au SQL, cf. le site-culte
de Fred Brouard :
http://sql.developpez.com/divrelationnelle/#L0
Avatar
irmr
MErci beaucoup de ton aide
Peux tu voir les rectifications
ISabelle




"Antoun" a écrit dans le message news:

irmr wrote:
> Bonsoir,

> Je suis HYPER novice, qqu'un peut il m'aider sur les questions


suivantes.
> J'ai essayé de répondre aux questions mais ???
>
> 1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux


aussi
> classé par ordre alpha à l'intérieur de chaque ville)
> Langage SQL
> SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
> FROM FOURNISSEUR
> ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ASC ;

OK, à ceci près que ton énoncé est ambigu : est-ce une liste alpha des
fournisseurs ou une liste des fournisseur par ordre alpha des villes ?


En fait il faut lister les villes et ensuite à l'intérieur de chaque ville
les fournisseurs.
J'hésite sur le ASC

> Langage algébrique relationnel
> R1=PROJECTION FOURNISSEUR(NOMFOURNISSEUR, TELEPHONEFOURNISSEUR) TRIE PAR
> VILLEFOURNISSEUR
>
> 2. Établir la liste des valeurs d'inventaire des produits en stock. La
> valorisation s'effectuera à partir du prix public avec un abattement de


5%
> (Créer un champ calculé avec AS)
> Langage SQL
> SELECT NOMPRODUIT, PRIXPUBLIC
> FROM PRODUITS
> WHERE PRIXPUBLIC*0.95

SELECT NOMPRODUIT, PRIXPUBLIC * 0.95 AS PRIXINVENTAIRE
FROM PRODUITS

"Where" a pour fonction de filtrer, càd d'éliminer les données qui ne
correspondent pas aux conditions que tu poses.


A ce moment là, je trouve un ordre numérique et j'utilise AS
et je supprime la dernière ligne et je change la première ligne :
SELECT SUM(PRIXPUBLIC*0.95) AS NOMPRODUIT

> Langage algébrique relationnel
> R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC)

à quoi te sert cette R1 ? (ceci dit je ne connais rien au langage
algébrique relationnel)

> R2=PROJECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC*0.95)

tu vois, ta projection correspond terme à terme au SELECT

> 3. Établir la valeur d'inventaire totale des produits en stock. La
> valorisation s'effectuera à partir du prix public avec un abattement de


5%
> (Utiliser SUM et AS)
> Langage SQL
> SELECT NOMPRODUIT, PRIXPUBLIC
> FROM PRODUITS
> SUM (PRIXPUBLIC*0.95)

SELECT SUM (PRIXPUBLIC * 0.95) AS VALEURINVENTAIRETOTALE
FROM PRODUITS

attention à ton énoncé, qui ne te demande pas la valeur de chaque
produit, mais le total tous produits confondus, ce qui implique de ne
pas faire apparaître le détail des produits.

Sur la traduction de l'aglèbre relationnelle au SQL, cf. le site-culte
de Fred Brouard :
http://sql.developpez.com/divrelationnelle/#L0
Avatar
Antoun
1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ASC ;



OK, à ceci près que ton énoncé est ambigu : est-ce une liste alpha des
fournisseurs ou une liste des fournisseur par ordre alpha des villes ?



En fait il faut lister les villes et ensuite à l'intérieur de chaque ville
les fournisseurs.



c'est bien ce que tu fais.

J'hésite sur le ASC



par défaut, chaque tri se fait en ordre croissant (ASCending). La
mention de ASC est donc facultative dans tous les cas. Tu peux écrire
indifféremment

ORDER BY VILLEFOURNISSEUR, NOMFOURNISSEUR ASC ;
ORDER BY VILLEFOURNISSEUR ASC , NOMFOURNISSEUR ASC ;
ORDER BY VILLEFOURNISSEUR ASC, NOMFOURNISSEUR ;
ORDER BY VILLEFOURNISSEUR, NOMFOURNISSEUR ;

Seule la mention DESC, pour les tris décroissants, est obligatoire.

2. Établir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de




5%

SELECT NOMPRODUIT, PRIXPUBLIC * 0.95 AS PRIXINVENTAIRE
FROM PRODUITS

"Where" a pour fonction de filtrer, càd d'éliminer les données qui ne
correspondent pas aux conditions que tu poses.



A ce moment là, je trouve un ordre numérique



c'est quoi un ordre numérique ?

et j'utilise AS



que veut donc dire AS pour toi ???

et je supprime la dernière ligne



si tu parles du FROM, tu n'obtiendras plus grand-chose si tu n'indiques
même pas la table à utiliser !

et je change la première ligne :
SELECT SUM(PRIXPUBLIC*0.95) AS NOMPRODUIT



attends, c'est au troisième exercice qu'on te demande une somme ! Ta
ligne (à supposer qu'elle soit suivie de FROM PRODUITS) te donnerait
qqch comme ça :

NOMPRODUIT
----------
12345,67
Avatar
irmr
Je reprends, je corrige MERCI de ton aide

1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux aussi
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ;

Langage algébrique relationnel
R1=PROJECTION FOURNISSEUR(NOMFOURNISSEUR, TELEPHONEFOURNISSEUR) TRIE PAR
VILLEFOURNISSEUR

2. Etablir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Créer un champ calculé avec AS)
Langage SQL
SELECT (QUANTITEENSTOCK*PRIXPUBLIC*0.95) AS VALEUR D'INVENTAIRE
FROM PRODUITS ;
Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC ,QUANTITEENSTOCK)
R2=PROJECTION PRODUIT(NOMPRODUIT,QUANTITEENSTOCK *PRIXPUBLIC*0.95)


3. Etablir la valeur d'inventaire totale des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Utiliser SUM et AS)
Langage SQL
SELECT SUM (QUANTITEENSTOCK *PRIXPUBLIC*0.95) AS VALEUR TOTALE D'INVENTAIRE
FROM PRODUITS ;


Langage algébrique relationnel
R1=SELECTION PRODUIT(NOMPRODUIT ,PRIXPUBLIC , QUANTITEENSTOCK)
R2=PROJECTION PRODUIT(NOMPRODUIT , QUANTITEENSTOCK *PRIXPUBLIC*0.95)

4. Liste des commandes non encore expédiées (numéro et date de la
commande).(Utiliser IS NULL)
Langage SQL
SELECT NUMCOMMANDE , DATECOMMANDE
FROM COMMANDES
WHERE DATEEXPEDITION ISNULL ;

Langage algébrique relationnel
R1=SELECTION COMMANDES (DATEEXPEDITION= « » )
R2=JOINTURE R1,COMMANDES (R1.NUMCOMMANDE=COMMANDES.NUMCOMMANDE)
R 3=PROJECTION R2(NUMCOMMANDE, DATECOMMANDE )

5. Quels sont les produits dont le prix public est inférieur au prix proposé
par un fournisseur
Langage SQL
SELECT PRIXPUBLIC , PRIXFOURNISSEUR
FROM PRODUITS, FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR ;

Langage algébrique relationnel
R1=JOINTURE PRODUITS, FOURNISSEURS (PRODUITS.
PRIXPUBLIC< FOURNISSEURS.PRIXFOURNISSEUR )
R2= PROJECTION R1(NUMPRODUIT)
Avatar
Antoun
irmr wrote:

Je reprends, je corrige MERCI de ton aide

1. Liste alphabétique des fournisseurs avec leur nom et téléphone (eux aussi
classé par ordre alpha à l'intérieur de chaque ville)
Langage SQL
SELECT VILLEFOURNISSEUR , NOMFOURNISSEUR, TELEPHONEFOURNISSEUR
FROM FOURNISSEUR
ORDER BY VILLEFOURNISSEUR , NOMFOURNISSEUR ;



OK

2. Etablir la liste des valeurs d'inventaire des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Créer un champ calculé avec AS)
Langage SQL
SELECT (QUANTITEENSTOCK*PRIXPUBLIC*0.95) AS VALEUR D'INVENTAIRE
FROM PRODUITS ;



OK, sauf que ton alias VALEUR D'INVENTAIRE ne devrait contenir ni espace
ni apostrophes (à moins d'être écrit entre guillemets dans certains
dialectes).

3. Etablir la valeur d'inventaire totale des produits en stock. La
valorisation s'effectuera à partir du prix public avec un abattement de 5%
(Utiliser SUM et AS)
Langage SQL
SELECT SUM (QUANTITEENSTOCK *PRIXPUBLIC*0.95) AS VALEUR TOTALE D'INVENTAIRE
FROM PRODUITS ;



OK, même remarque que pour le 2.

4. Liste des commandes non encore expédiées (numéro et date de la
commande).(Utiliser IS NULL)
Langage SQL
SELECT NUMCOMMANDE , DATECOMMANDE
FROM COMMANDES
WHERE DATEEXPEDITION ISNULL ;



IS NULL en deux mots, OK sinon.

5. Quels sont les produits dont le prix public est inférieur au prix proposé
par un fournisseur
Langage SQL
SELECT PRIXPUBLIC , PRIXFOURNISSEUR
FROM PRODUITS, FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR ;



- tu oublies le NOMPRODUIT dans ton SELECT

- tu n'indique pas la jointure entre tes deux tables. Je n'en sais pas
assez sur ton modèle de données pour te donner la solution... S'il n'y a
qu'un fournisseur par produit, cela donnerait qqch comme ça :

SELECT P.NOMPRODUIT, F.NOMFOURNISSEUR, P.PRIXPUBLIC , F.PRIXFOURNISSEUR
FROM PRODUITS AS P
INNER JOIN FOURNISSEURS AS F
ON P.IDFOURNISSEUR = F.IDFOURNISSEUR
WHERE P.PRIXPUBLIC < F.PRIXFOURNISSEUR

Si par contre il y a plusieurs fournisseur par produit, cela implique
une table PRODUITS_FOURNISSEURS qui te donne le prix du produit pour
chaque fournisseur, avec deux clés IDPRODUIT et IDFOURNISSEUR :

SELECT P.NOMPRODUIT, P.PRIXPUBLIC , PF.PRIXFOURNISSEUR
FROM PRODUITS AS P
INNER JOIN PRODUITS_FOURNISSEURS AS PF
ON P.IDPRODUIT = PF.IDPRODUIT
INNER JOIN FOURNISSEURS AS F
ON PF.IDFOURNISSEUR = F.IDFOURNISSEUR
WHERE P.PRIXPUBLIC < PF.PRIXFOURNISSEUR
Avatar
irmr
Bonjour, Merci beaucoup de tes explications.

5. Quels sont les produits dont le prix public est inférieur au prix proposé
par un fournisseur
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
UNION
SDELECT NOMPRODUIT , PRIXFOURNISSEUR
FROM FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR
6. Dresser la lise des produits par ordre d'importance de la marge en %
entre le prix public et le prix fournisseur (n° produit, n°fournisseur, prix
public, prix fournisseur, marge) (le taux de marge a comme base le prix
public) à utiliser WHERE ET ORDER BY
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
UNION
SELECT NOMPRODUIT , PRIXFOURNISSEUR
FROM FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR ;
ORDER BY (PRODUITS. PRIXPUBLIC/ FOURNISSEURS.PRIXFOURNISSEUR ) AS MARGE

7. Pour chaque salarié qui effectue des ventes, fournir le nombre de
commandes dont il est responsable.
à utiliser COUNT ET GROUP BY
Langage SQL
SELECT DISTINCT NOMSALARIE
FROM SALARIES, COMMANDES
WHERE SALARIES.NOMSALARIE =COMMANDE.NOMSALARIE
COUNT COMMANDE.NUMCOMMANDE GROUP BY NOMSALARIE

8. Pour chaque salarié qui effectue des ventes, fournir le CA dont il est
responsable.
à utiliser SUM et une Jointure
Langage SQL
SELECT DISTINCT NOMSALARIE
FROM SALARIES, COMMANDES
UNION
SELECT PRIXUNITAIRE , QUANTITECOMMANDEE , NUMCOMMANDE
FROM DETAILCOMMANDES, COMMANDES
SUM(PRIXUNITAIRE *QUANTITECOMMANDEE ) AS CA
WHERE SALARIES.NOMSALARIE =COMMANDE.NOMSALARIE
AND WHERE COMMANDES.NUMCOMMANDE ÞTAILCOMMANDES.NUMCOMMANDE
GROUP BY NOMSALARIE,CA ;

--

"Antoun" a écrit dans le message news:

irmr wrote:

>
Avatar
Antoun
irmr wrote:
Bonjour, Merci beaucoup de tes explications.

5. Quels sont les produits dont le prix public est inférieur au prix proposé
par un fournisseur
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
UNION
SDELECT NOMPRODUIT , PRIXFOURNISSEUR
FROM FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR



non, tu ne peux absolument pas remplacer une jointure par une Union.

L'union consiste à faire deux requêtes ayant le même nombre de colonnes,
et à fusionner leurs résultats (en éliminant ou non les doublons, selon
que tu écris UNION ALL ou UNION DISTINCT, selon ton SGBD si tu ne
précises pas).

Si tu lances ta requête, tu obtiendras une erreur du genre
"PRODUITS.PRIXPUBLIC inconnu".

si tu virais le Where, tu obtiendrais qqch comme ça :

NOMPRODUIT PRIXPUBLIC
bordeaux 12
bordeaux 8
champagne 22
champagne 17

alors que ce que tu cherches c'est ça (toujours en oubliant le Where
pour se concentrer sur la structure) :

NOMPRODUIT PRIXPUBLIC PRIXFOURNISSEUR
bordeaux 12 8
champagne 22 17


6. Dresser la lise des produits par ordre d'importance de la marge en %
entre le prix public et le prix fournisseur (n° produit, n°fournisseur, prix
public, prix fournisseur, marge) (le taux de marge a comme base le prix
public) à utiliser WHERE ET ORDER BY
Langage SQL
SELECT NOMPRODUIT, PRIXPUBLIC
FROM PRODUITS
UNION
SELECT NOMPRODUIT , PRIXFOURNISSEUR
FROM FOURNISSEURS
WHERE PRODUITS. PRIXPUBLIC<FOURNISSEURS.PRIXFOURNISSEUR ;
ORDER BY (PRODUITS. PRIXPUBLIC/ FOURNISSEURS.PRIXFOURNISSEUR ) AS MARGE



Je prends l'hypothèse qu'il n'y a qu'un fournisseur par produit (cf. mon
post précédent) :

SELECT NUMPRODUIT
, NUMFOURNISSEUR
, PRIXPUBLIC
, PRIXFOURNISSEUR
, (PRIXPUBLIC - PRIXFOURNISSEUR) / PRIXPUBLIC * 100 AS TAUXMARGE
FROM PRODUITS AS P
INNER JOIN FOURNISSEURS AS F
ON P.NUMFOURNISSEUR = F.NUMFOURNISSEUR
ORDER BY (PRIXPUBLIC - PRIXFOURNISSEUR) / PRIXPUBLIC

Les erreurs que tu fais :
- union à la place de INNER JOIN (ou de Where, cf qq lignes plus bas)
- l'énoncé te donne la liste des colonnes à sortir, tu ne la respectes
pas "(n° produit, n°fournisseur, prix public, prix fournisseur, marge)"
- mauvaise formule de calcul du % de marge
- tu mets le AS MARGE dans le ORDER BY alors qu'il doit être dans le SELECT

L'énoncé commet lui aussi une erreur en te demandant un Where alors
qu'il n'y a pas de condition (càd qu'il te demande tous les produits, et
pas seulement une sélection d'entre eux). Ou alors, tu es dans un
système comme Oracle 8 qui ne connaît pas la syntaxe normalisée des
jointures (mon INNER JOIN) et avec lequel on doit écrire les conditions
jointures dans le Where :

SELECT NUMPRODUIT
, NUMFOURNISSEUR
, PRIXPUBLIC
, PRIXFOURNISSEUR
, (PRIXPUBLIC - PRIXFOURNISSEUR) / PRIXPUBLIC * 100 AS TAUXMARGE
FROM PRODUITS AS P, FOURNISSEURS AS F
WHERE P.NUMFOURNISSEUR = F.NUMFOURNISSEUR
ORDER BY (PRIXPUBLIC - PRIXFOURNISSEUR) / PRIXPUBLIC


7. Pour chaque salarié qui effectue des ventes, fournir le nombre de
commandes dont il est responsable.
à utiliser COUNT ET GROUP BY
Langage SQL
SELECT DISTINCT NOMSALARIE
FROM SALARIES, COMMANDES
WHERE SALARIES.NOMSALARIE =COMMANDE.NOMSALARIE
COUNT COMMANDE.NUMCOMMANDE GROUP BY NOMSALARIE



Voilà, là tu mets bien une condition de jointure (WHERE
SALARIES.NOMSALARIE =COMMANDE.NOMSALARIE). Tu utilises l'écriture dans
le Where ; si tu as un SGBD qui l'accepte, il est préférable d'utiliser
l'écriture normalisée avec INNER JOIN, mais ce n'est pas très important.

Sinon, ton GROUP BY est impeccable, mais Count n'est pas une clause
(comme From, Where, etc.) mais une fonction, qui va te donner une
colonne calculée, exactement comme le calcul de marge ci-dessus.

Cela nous donne donc :

SELECT NOMSALARIE, COUNT(COMMANDE.NUMCOMMANDE) AS NBVENTES
FROM SALARIES, COMMANDES
WHERE SALARIES.NOMSALARIE = COMMANDE.NOMSALARIE
GROUP BY NOMSALARIE

ou plus simple :

SELECT NOMSALARIE, COUNT(*) AS NBVENTES
FROM SALARIES AS S, COMMANDES AS C
WHERE S.NOMSALARIE = C.NOMSALARIE
GROUP BY NOMSALARIE

ou encore, avec une jointure normalisée :

SELECT NOMSALARIE, COUNT(*) AS NBVENTES
FROM SALARIES AS S
INNER JOIN COMMANDES AS C
ON S.NOMSALARIE = C.NOMSALARIE
GROUP BY NOMSALARIE


8. Pour chaque salarié qui effectue des ventes, fournir le CA dont il est
responsable.
à utiliser SUM et une Jointure
Langage SQL
SELECT DISTINCT NOMSALARIE
FROM SALARIES, COMMANDES
UNION
SELECT PRIXUNITAIRE , QUANTITECOMMANDEE , NUMCOMMANDE
FROM DETAILCOMMANDES, COMMANDES
SUM(PRIXUNITAIRE *QUANTITECOMMANDEE ) AS CA
WHERE SALARIES.NOMSALARIE =COMMANDE.NOMSALARIE
AND WHERE COMMANDES.NUMCOMMANDE ÞTAILCOMMANDES.NUMCOMMANDE
GROUP BY NOMSALARIE,CA ;



c'est la même requête que la 7., mais en ajoutant DETAILCOMMANDES,
toujours en jointure, et pas en UNION :

SELECT NOMSALARIE, SUM(PRIXUNITAIRE *QUANTITECOMMANDEE ) AS CA
FROM SALARIES AS S
INNER JOIN COMMANDES AS C
ON S.NOMSALARIE = C.NOMSALARIE
INNER JOIN DETAILCOMMANDES AS D
ON C.NUMCOMMANDE =D.NUMCOMMANDE
GROUP BY NOMSALARIE

ou avec les jointures dans le Where :

SELECT NOMSALARIE, SUM(PRIXUNITAIRE *QUANTITECOMMANDEE ) AS CA
FROM SALARIES AS S
, COMMANDES AS C
, DETAILCOMMANDES AS D
WHERE S.NOMSALARIE = C.NOMSALARIE
AND C.NUMCOMMANDE =D.NUMCOMMANDE
GROUP BY NOMSALARIE

- tu ne dois pas regrouper par CA, puisqu'au contraire le CA est ce que
tu calcules et non la catégorie qui te dis comment calculer.

- tu ne dois pas répéter Where, mais écrire Where truc AND machin AND
bidule...