Aide pour requêtes en SQL

Aide pour requêtes en SQL - SQL/NoSQL - Programmation

Marsh Posté le 26-03-2003 à 13:32:46    

J'ai besoin de 2 codes SQL, je suis débutant et j'avoue avoir un peu de mal sur ces deux là...  :?  
 
la base comporte les 4 quatres relations suivantes:
 
CLIENTS (NumClient cp, NomClient, Designation)
PRODUITS (NumProduit cp, Libelle, PrixBrut)
LIVRAISONS (NumProduit cp, NumClient cp, Quantité)
CATEGORIES (Designation cp, Reduction)
  cp=clé primaire
 
et voici les 2 interrogations:
 - Les noms des clients ayant été livrés de tous les produits qui n'ont jamais été livrés à des clients de catégories E.
 - Les numéros et prix des produits qui ont un prix supérieur aux prix de tous les produits livrés chez au moins 2 clients.
 
Si qql pouvait m'aider...
 
Merci

Reply

Marsh Posté le 26-03-2003 à 13:32:46   

Reply

Marsh Posté le 26-03-2003 à 14:41:26    

Groomy a écrit :

J'ai besoin de 2 codes SQL, je suis débutant et j'avoue avoir un peu de mal sur ces deux là...  :?  
 
la base comporte les 4 quatres relations suivantes:
 
CLIENTS (NumClient cp, NomClient, Designation)
PRODUITS (NumProduit cp, Libelle, PrixBrut)
LIVRAISONS (NumProduit cp, NumClient cp, Quantité)
CATEGORIES (Designation cp, Reduction)
  cp=clé primaire
 
et voici les 2 interrogations:
 - Les noms des clients ayant été livrés de tous les produits qui n'ont jamais été livrés à des clients de catégories E.
 - Les numéros et prix des produits qui ont un prix supérieur aux prix de tous les produits livrés chez au moins 2 clients.
 
Si qql pouvait m'aider...
 
Merci


 
C'est tes devoir pour demain ?
 
Attend je reflechi...
 
EDIT : c tres tordu comme requete !
la premiere je pige pas  :pt1cable:  
la deuxieme aussi est bizarre


Message édité par mauvais_karma le 26-03-2003 à 14:46:50
Reply

Marsh Posté le 26-03-2003 à 14:48:31    

Mauvais_Karma a écrit :


 
C'est tes devoir pour demain ?
 
Attend je reflechi...
 
EDIT : c tres tordu comme requete !
la premiere je pige pas  :pt1cable:  
la deuxieme aussi est bizarre


 
 
ou alors.... les profs devraient toujours penser a empecher l'acces au net pendant les interrogations
 
 
c'est vrai que c'est tordu, j'ai commence a reflechir aussi mais bon pas facile comme ca

Reply

Marsh Posté le 26-03-2003 à 14:49:01    

facile comme tout toutes les deux.
 
si j'ai 5 minutes, je vous réponds. mais là j'ai trio de taff, je ne fais que passer.

Reply

Marsh Posté le 26-03-2003 à 14:58:29    

SELECT NomClient
FROM CLIENTS (CL), PRODUITS (P), LIVRAISONS (L), CATEGORIES (CA)
WHERE CL.NumClient = L.NumClient;
AND   L.NumProduit = P.NumProduit;
AND   CA.Designation = CL.Designation;
AND   CA.Designation != 'E';
AND   P.Libelle = *;
 
* pour dire all
!= pour dire different
 
Pour la 1, explication : premierement on fait des liens entre chaque table car elle nous sera tous utils.
Ensuite on fais des filtres en fonction des donnés...
 
PS : c'est pas forcement juste mais comme cela que j'aurais fais.

Reply

Marsh Posté le 26-03-2003 à 15:00:12    

:hello:
 
Je connais la réponse, mais il faut que tu me dises si c'est pour un devoir ou non (discrétion oblige ;))


---------------
Je code en série et en parallèle
Reply

Marsh Posté le 26-03-2003 à 15:03:45    

1)
 

SELECT DISTINCT CLIENTS.NomClient FROM CLIENTS, LIVRAISONS, (SELECT PRODUITS.NumProduit FROM PRODUITS WHERE PRODUITS.NumProduit NOT IN (SELECT PRODUITS.NumProduit FROM PRODUITS, LIVRAISONS, CLIENTS WHERE CLIENTS.Designation = 'E' AND LIVRAISONS.NumClient = CLIENTS.NumClient AND PRODUITS.NumProduit = LIVRAISONS.NumProduit)) AS TMP WHERE CLIENTS.NumClient = LIVRAISONS.NumClient AND LIVRAISONS.NumProduit = TMP.NumProduits


 
Tout simple.
 
PS: j'ai fais exprès d'écrire ça comme un gros porc. Si c'est pour un devoir, c'est la bulle assurée. Si c'est sérieux et pour ton job, alors ça marche sous Oracle 8i et SQL Server 2000 (les autres SGBD, je sais pas, mais ça ne fonctionne pas sur les versions antérieures de ces deux-là)

Reply

Marsh Posté le 26-03-2003 à 15:05:34    

guiotv2 a écrit :

SELECT NomClient
FROM CLIENTS (CL), PRODUITS (P), LIVRAISONS (L), CATEGORIES (CA)
WHERE CL.NumClient = L.NumClient;
AND   L.NumProduit = P.NumProduit;
AND   CA.Designation = CL.Designation;
AND   CA.Designation != 'E';
AND   P.Libelle = *;
 
* pour dire all
!= pour dire different
 
Pour la 1, explication : premierement on fait des liens entre chaque table car elle nous sera tous utils.
Ensuite on fais des filtres en fonction des donnés...
 
PS : c'est pas forcement juste mais comme cela que j'aurais fais.


Marche pas ton bidule. Et c'est encore moins compatible que ce que j'ai écrit comme code :)
 
le "*", ça marche sous kel SGBD ? Sous Oracle par exemple, le "*" est très loin de vouloir dire ça.

Reply

Marsh Posté le 26-03-2003 à 15:10:13    

Les numéros et prix des produits qui ont un prix supérieur aux prix de tous les produits livrés chez au moins 2 clients.
 

SELECT PRODUITS.NumProduit, PRODUITS.PrixBrut
FROM PRODUITS
WHERE PRODUITS.NumProduit > (SELECT MAX(PRODUITS.PrixBrut)
FROM PRODUITS, LIVRAISONS
WHERE LIVRAISONS.NumProduit = PRODUITS.NumProduit
GROUP BY LIVRAISON.NumClient
HAVING COUNT(PRODUITS.NumProduit) > 0)


 
PS: Désolé, j'arrivepas à la faire trop porc...

Reply

Marsh Posté le 26-03-2003 à 15:16:46    

MagicBuzz a écrit :


Marche pas ton bidule. Et c'est encore moins compatible que ce que j'ai écrit comme code :)
 
le "*", ça marche sous kel SGBD ? Sous Oracle par exemple, le "*" est très loin de vouloir dire ça.


 
J'ai bien preciser que c'etait pas forcement bon.. :)
oui, c'etait sous oracle...
C'est koi deja pour dire "all" ?

Reply

Marsh Posté le 26-03-2003 à 15:16:46   

Reply

Marsh Posté le 26-03-2003 à 15:18:53    

guiotv2 a écrit :


 
J'ai bien preciser que c'etait pas forcement bon.. :)
oui, c'etait sous oracle...
C'est koi deja pour dire "all" ?


Je sais même pas ce que tu veux dire par "all" :D
 
PS: Sinon, pour le "*", j'ai confondu avec le "(+)". En fait c'est sous SQL Server que le "*" veut dire comme le "(+)" d'Oracle et que dont ta syntaxe me surprenait (avec SQL Server tu fait un left outer join si tu mets une * là)
 
Mais peut-être que sous Oracle le * veut bien dire "all". Ca sert à quoi au juste ? Ca pourrait peut-être simplifier mes requêtes des fois :d


Message édité par MagicBuzz le 26-03-2003 à 15:20:49
Reply

Marsh Posté le 26-03-2003 à 15:33:29    

Non, c'est pas pour un devoir. C'est pour un tp de GL, on vient de commencer SQL depuis 2 semaines  
et nous aussi on les trouve tordues les requêtes.  
 
Je vais éssayer tt ça ce soir, je n'ai pas le temps pour l'instant. Je reste tt de même ouvert à ttes nouvelles propositions...
 

Reply

Marsh Posté le 26-03-2003 à 15:38:39    

C koi la différence entre un TP et des devoirs ? :heink:
 
Je sais bien que ça fait un bout de temps que j'ai quitté l'école, mais j'ai pas souvenir de la moindre différence.
 
En tout cas, une chose est sûr, votre prof est un gros naze. J'ai jamais eu à faire un exo de ce genre en dehors d'une salle sans accès au net et hors temps limite, sinon autant donner les réponse avec, y'a toujours des malins comme toi qui font sous-traîter, c'est si facile.

Reply

Marsh Posté le 26-03-2003 à 16:28:09    

MagicBuzz a écrit :

C koi la différence entre un TP et des devoirs ? :heink:
 
Je sais bien que ça fait un bout de temps que j'ai quitté l'école, mais j'ai pas souvenir de la moindre différence.
 
En tout cas, une chose est sûr, votre prof est un gros naze. J'ai jamais eu à faire un exo de ce genre en dehors d'une salle sans accès au net et hors temps limite, sinon autant donner les réponse avec, y'a toujours des malins comme toi qui font sous-traîter, c'est si facile.


 
 
ben au moins en ayant eu la reponse et en l'ayant compris , il sera plus apte a faire ses futures requetes.
Mais il ne faut pas que ca devienne une habitude de faire sous traiter, parce que a l'exam... pas possible.
 
Mais t'inquite, les debuts en SQL c'est toujours tres difficile. Je n'ai reellement reussi a faire des requetes potables que quelques semaines avant l'examen.


Message édité par polo021 le 26-03-2003 à 16:28:53
Reply

Marsh Posté le 26-03-2003 à 16:38:56    

Groomy a écrit :

Non, c'est pas pour un devoir. C'est pour un tp de GL, on vient de commencer SQL depuis 2 semaines


Ca c'est le truc qu'il fallait pas dire ! lock + TT, les nouvelles propositions tu les liras dans un précis de SQL !
 
MagicBuzz > ça crevait les yeux que c'était pour ça ! D'ou mon drapeau bleu au début, poru garder un oeil sur le topic ! C'était pas la peine de lui filer la soluce ! La prochaine fois, je te réserve le même sort !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed