[RESOLU] Requête SQL étudiante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Requête SQL étudiante

Re: Requête SQL étudiante

par @rthur » 07 févr. 2021, 23:57

Bonjour et bienvenue sur PHPfrance,

Voici quelques petites remarques/idées :
:arrow: Attention à bien respecter la syntaxe du nom de tes champs (ex : libelle/Libellé ; EMPLOYE/Employé).

:arrow: Évite les accents et caractères spéciaux dans le nom de tes tables et de tes champs.

:arrow: Idem pour la casse, il faut respecter les majuscules et minuscules (ex : Stockage/STOCKAGE). Certains systèmes de base de données (comme Oracle) y sont sensibles.

:arrow: Je ne sais pas si ton schéma de données t'as été fourni ou si c'est toi qui l'a créé, mais il me semble bizarre que dans ta table ENTREPOT tu aies un champ NumSS qui correspond à 1 seul employé.
Si un entrepôt peut avoir plusieurs employés, alors il faudrait que tu crées une nouvelle table qui servirait juste à faire le lien entre les numEntrepot et les NumSS.
Par ailleurs, dans ta table STOCKAGE, tu redéfinis NomVille, alors que NomVille est une caractéristique de l'entrepôt à mon avis, donc c'est une info redondante.

:arrow: "la liste des employés (tous les attributs) ", ça se fait avec une étoile. Du coup si ta table employés a comme alias "E", tu peux juste utiliser SELECT E.* ...

:arrow: L'opérateur "inférieure ou égale à" s'écrit <= (et pas =<)
Idem pour l'opérateur "supérieure ou égale à" qui s'écrit >=

:arrow: "libelle = ‘pesticides » " c'est peut-être une erreur de copier-coller mais attention à bien utiliser des guillemets droites ou doubles.

:arrow: Pour rechercher dans un champ texte, il faut que tu mettes des guillemets : AND classe = "A"

:arrow: "SELECT COUNT(*)" permet de compter le nombre de lignes d'une requête, mais pour compter le nombre de produits dans un entrepôt, il faut que tu additionnes tous les NumProduit, ça se fait avec l'opérateur SUM(), du coup SUM(NumProduit)
https://sql.sh/fonctions/agregation/sum

Je n'ai pas relu toutes tes requêtes dans le détail, la meilleure façon de vérifier ça serait que tu crées tes tables et un jeu de données de test pour pouvoir les tester et les déboguer. :-D

Requête SQL étudiante

par croussel » 07 févr. 2021, 20:48

Bonjour à tous ! Je suis étudiante et je suis encore débutante dans le language SQL ! Pouvez-vous me dire si j'ai fait des fautes :)


PRODUIT (numProduit, libelle, prix)
VILLE (NomVille, superficie, population)
EMPLOYE (NumSS, nom, prénom, age)
ENTREPOT (numEntrepot, NomVille, NumSS, adresse, capacite, classe)
STOCKAGE (numEntrepot, NomVille, numProduit, quantite)


1. Donner la liste des produits (libelle, prix) stockés dans des entrepôts de la ville de Paris.

SELECT Libellé, prix
FROM Stockage S, Produit P
WHERE S.numProduit = P.numProduit
AND NomVille = ‘Paris’


2. Donner la liste des employés (nom, prénom) de plus de 30 ans n’assurant la responsabilité d’aucun entrepôt.

SELECT EM.nom, EM.prénom
FROM Employé EM
WHERE age = > 30
WHERE NumSS IN
(SELECT EM.NumSS
FROM Employé EM
MINUS
SELECT EN.NumSS
WHERE Entrepot EN)


3. Donner la liste des employés (tous les attributs) responsables d’au moins un entrepôt d’une grande ville et stockant le produit de libellé « pesticides » pour une quantité inférieure à 50. Une grande ville est caractérisée par une population de plus de 100 000 habitants.

SELECT Num SS, nom, prénom, age
FROM Employé E, Produit P, Stockage S, Ville V
WHERE P.NumProduit = S.NumProduit
AND V.NomVille = S.NomVille
AND libelle = ‘pesticides »
AND quantité = < 50
AND population = > 100 000


4. Pour chaque ville de plus de 50 000 habitants, donner le nombre de grands entrepôts de classe A qu’elle comporte. Un grand entrepôt est d’une capacité supérieure à 2000.


SELECT NumEntrepot, COUNT (*)
FROM VILLE V, ENTREPOT E
WHERE V.nomVille = E.nomVille
AND Population = > 50 000
AND classe = A
AND capacité = > 2 000
GROUP BY NumEntrepot


5. Pour chaque produit (numProduit, libelle), donner le nombre d’entrepôts dans lesquels il est stocké. On ne s’intéresse qu’aux produits stockés dans plus de 4 entrepôts.

SELECT NumProduit, libelle, COUNT(*)
FROM Produit P, Stockage S
WHERE P.numProduit, S.numProduit
HAVING COUNT (DISTINCT numEntrepot) >= 4
GROUP BY NumProduit, libelle


6. Donner le nombre total de produits stockés dans les entrepôts de la ville de Paris.

SELECT NumProduit, COUNT (*)
FROM Stockage
WHERE NomVille = ‘Paris’