[SQL] Requêtes SQL, faux ou correct ?

Requêtes SQL, faux ou correct ? [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 02-05-2009 à 16:03:29    

Bonjour,
 
Je voudrais savoir si mes requêtes (à faire en modèle relationnel)sont justes?  
Je vous remercie beaucoup d'avance,
 
Agréable journée à vous :
 
 
Voici mon schéma relationnel  
 
* CLIENT(NoClient, NomC, PrénomC, VilleC)
* ARTICLE (NoArt, NomArt, PoidsArt, Couleur, PrixAchat, PrixVente, NoFourn)
* FOURNISSEUR (NoFourn, NomFourn, Adresse)
* VENTE (NoClient, NoArt, QtéVendue, DateVente)

 
 
 
Lister le numéro des clients auxquels ont été vendus plus de 10 articles:
 
R1 = RESTRICT (VENTE/ NbVendu=10)
Q1 = PROJET ( R1/ N°Client)
 
 
 
Lister le numéro et le nom des clients qui ont acheté des articles seulement entre le 01/12/04 et aujourd'hui
 
R1=RESTRICT ( VENTE / DateVente>1/10/2004 )
R2=Join (R1/CLIENT )
Q2=PROJECT ( CLIENT / Nomclient Numclient)
 
 
 
 
Lister les noms des clients qui ont acheté l'article N°1 et N°2:
 
R1 = Restrict (VENTE / NoArt=1)
R2 = Restrict (R1/ NoArt=2)
R3=Join (R2/CLIENT )
Q1= PROJECT (CLEINT, NomC)
 
 
Lister les noms des articles qui ont été vendus au client N°1 ou au client N°2
 
R1 = Restrict (VENTE/ NoClient=1)
R1'=PROJECT(R1/NoCLient)
R2 = Restrict (VENTE/ NoClient=2)
R2'=PROJECT ( R2/NoClient)
R3 = Union (R1/ R2)
R4=Join (R3/ARTICLE )
Q1= PROJECT (ARTICLE, NomArt)

Reply

Marsh Posté le 02-05-2009 à 16:03:29   

Reply

Marsh Posté le 05-05-2009 à 12:12:31    

faboun_21 a écrit :

Bonjour,
 
Je voudrais savoir si mes requêtes (à faire en modèle relationnel)sont justes?  
Je vous remercie beaucoup d'avance,
 
Agréable journée à vous :
 
 
Voici mon schéma relationnel  
 
* CLIENT(NoClient, NomC, PrénomC, VilleC)
* ARTICLE (NoArt, NomArt, PoidsArt, Couleur, PrixAchat, PrixVente, NoFourn)
* FOURNISSEUR (NoFourn, NomFourn, Adresse)
* VENTE (NoClient, NoArt, QtéVendue, DateVente)

 
 
 
Lister le numéro des clients auxquels ont été vendus plus de 10 articles:
 
R1 = RESTRICT (VENTE/ NbVendu=10)
Q1 = PROJET ( R1/ N°Client)
Un même client peut avoir commandé plusieurs articles.
Il faut donc d'abord compter le nombre d'articles qu'il a commandé.
R1= PROJ (VENTE;N°Client,TOTCDE=Somme(Nbvendu)
Il te reste à sélectionner les clients dont le TOTCDE est supérieur à 10
R2= REST (R1;TOTCDE>10) soit la requête SQL:
Q1= SELECT DISTINCT N°CLIENT, SUM(NBVENDU) AS TOTCDE FROM VENTE WHERE SUM(NBVENDU)>10 GROUP BY N°CLIENT
 
 
Lister le numéro et le nom des clients qui ont acheté des articles seulement entre le 01/12/04 et aujourd'hui
 
R1=RESTRICT ( VENTE / DateVente>1/10/2004 )
R2=Join (R1/CLIENT )
Q2=PROJECT ( CLIENT / Nomclient Numclient)
 
On ne te demande pas depuis le 01/10/2004 mais depuis le 01/12/04 :étourdi!
Dans ta jointure tu dois préciser la condition minimum R1.N°client=CLIENT.N°client
Si tu fais ta requête finale sur la table client, tu obtiens la liste de tous les clients: étourdi 2 fois!!
Il faut la faire sur R2 évidemment.
 
Lister les noms des clients qui ont acheté l'article N°1 et N°2:
 
R1 = Restrict (VENTE / NoArt=1)   Tu as là les lignes de la table vente ou apparaissent l'article N°1
R2 = Restrict (R1/ NoArt=2)      Tu as là les lignes de la table vente ou apparaissent l'article N°2
R3=Join (R2/CLIENT )          Ici tu n'a que les clients qui ont commandé l'article N°2 et il te manque une condition.
Q1= PROJECT (CLEINT, NomC)   Ici tu as la liste des noms de tous les clients.
 
C'est archi faux, tu dois réfléchir un peu avant que je te donne la réponse.
Je n'ai pas l'intention de faire tout le boulot à ta place.
 
Lister les noms des articles qui ont été vendus au client N°1 ou au client N°2
 
R1 = Restrict (VENTE/ NoClient=1)
R1'=PROJECT(R1/NoCLient)
R2 = Restrict (VENTE/ NoClient=2)
R2'=PROJECT ( R2/NoClient)
R3 = Union (R1/ R2)
R4=Join (R3/ARTICLE )
Q1= PROJECT (ARTICLE, NomArt)


 
Idem précédemment

Reply

Marsh Posté le 05-05-2009 à 14:14:11    

C'est pas du SQL ça !?
Qu'est-ce que c'est ?
 


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 05-05-2009 à 14:28:17    

c'est un truc algebre relationnel je crois,

Reply

Marsh Posté le 06-05-2009 à 09:35:27    

infoman64 a écrit :

c'est un truc algebre relationnel je crois,


Je confirme, c'est de l'algèbre relationnel.
 
Quand tu démarre sur les bases de données, tu commence par apprendre à créer des shémas conceptuels de type entité/association.
 
Puis les schémas relationnels, puis l'algèbre relationnel, puis les requêtes SQL.

Reply

Marsh Posté le 06-05-2009 à 09:54:09    

J'ai un parcours IG, et je n'ai jamais fait d'algèbre relationnel.
 
Ca fait partie de Merise ? Si oui, c'est un passage que j'ai dû râter :/


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 06-05-2009 à 11:00:39    

kao98 a écrit :

J'ai un parcours IG, et je n'ai jamais fait d'algèbre relationnel.
 
Ca fait partie de Merise ? Si oui, c'est un passage que j'ai dû râter :/


 
Affirmatif c'est la base de toutes les gestions de base de données, a fortiori Merise.
Toi ou ton formateur avez du effectivement squizer quelques cours.

Reply

Marsh Posté le 06-05-2009 à 11:09:47    

wakat a écrit :


 
Affirmatif c'est la base de toutes les gestions de base de données, a fortiori Merise.
Toi ou ton formateur avez du effectivement squizer quelques cours.


Exagère pas non plus.
J'ai vérifié. Dans Merise : point d'algèbre relationnelle.
Et c'est tellement la base de tout modèle relationnel qu'on en croise, d'ailleurs, à tous les coins des forums et du web ! :sarcastic:
 
Et vu comment ça a l'air super utile, je regrette pas forcément de ne pas m'être attardé sur ce sujet.
Ca ressemble à un truc de mathématicien.


Message édité par kao98 le 06-05-2009 à 11:18:24

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 06-05-2009 à 11:17:11    

c'est vrai que moi aussi dans ma formation je n'est jamais vu cette partie,
et jamais entendu parlé.
J'etait juste tombe dessus par hasard, sur le net
 
ca a une utilité cette forme de notation?
ca aide a mieux comprendre les requetes?
 je pense que ca doit servir a quelque chose.

Reply

Marsh Posté le 06-05-2009 à 11:18:35    

En fait, si j'ai bien compris, c'est un concept différent de Merise, une approche plus mathématique de la modèlisation des données.
Mes cours à l'époque, et mon expérience depuis, étant plutôt tourné vers Merise/2, je comprends que j'ai pu passer à côté.
 
Ca peut être intéressant pour avoir une approche plus ensembliste des données.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 06-05-2009 à 11:18:35   

Reply

Marsh Posté le 06-05-2009 à 11:22:00    

ah ok, mais comme je sais pas ce qu'est merise :)

Reply

Marsh Posté le 06-05-2009 à 12:15:44    

infoman64 a écrit :

ah ok, mais comme je sais pas ce qu'est merise :)


 
En effet on peut dire que ça aide à mieux comprendre les requêtes.
Exemple:
RAH0=PROJ(Detail ;No_Command;No_Article Comme “001025”)
CETTE REQUETE SERA UTILISEE COMME SOUS REQUETE.
 
RAH1=JOIN (Ventes, Clientel ; Ventes.No_Client=Clientel.No_Client Et Ventes.No_Command Dans(Rah0) ; No_Client, Societe, Nom, Prenom)
 
RAH= SELECT DISTINCT Clientel.No_Client, Societe, Nom, Prenom  
FROM Ventes, Clientel  
WHERE Ventes.No_Client=Clientel.No_Client  
AND Ventes.No_Command IN (SELECT DISTINCT No_Command
 FROM Detail WHERE No_Article LIKE"001025" );
 
Avec l'algèbre relationnel, tu vois clairement quelle a été le cheminement intellectuel du programmeur pour obtenir sa requête.
 
Quand tu enchaines projection(s) + jointure(s) + restriction(s) + union(s) pour arriver à tes fins et que tu l'exprime par une seule requête, c'est bien utile pour comprendre et surtout pour modifier ta requête.
 
Chacun sa technique!
 

Reply

Marsh Posté le 06-05-2009 à 12:28:12    

Mwé, m'enfin, ce n'est pas de l'algèbre relationnel pur. Y a peut être le cheminement intellectuel pour obtenir la requête, mais aucunement les propriétés de complexité, de décidabilité et d'optimisation de l'algèbre relationnel.

Reply

Marsh Posté le 06-05-2009 à 14:03:58    

ah ouais c'est pas mal comme truc ca,
mais apres pour moi c'est pareil que l'autres(peut etre et meme surement que j'ai pas assez de recul sur cette technique)
 
c'est beaucoup utiliser?


Message édité par infoman64 le 06-05-2009 à 14:04:11
Reply

Marsh Posté le 06-05-2009 à 16:34:12    

Je ne sais pas si c'est beaucoup utilisé mais je peux te dire que nos formateurs ne jurent que par ça quand il s'agit de structurer une requête.
Et pourtant ce sont des gars qui maitrisent parfaitement SQL.
 
J'ai pour exemple la dernière mise en situation qu'ils nous ont donné à faire, je t'assure qu'ils nous ont précisés que dans le rapport, les requêtes étaient facultatives mais pas l'algèbre!!!
 
D'après eux, une ligne d'algèbre bien faite peut être traduite dans n'importe quel langage de programmation de base de données. Après c'est juste un problème de syntaxe de la commande.

Reply

Marsh Posté le 06-05-2009 à 17:27:12    

Il y a une équivalence entre l'algèbre relationnel et le calcul relationnel. Par ailleurs, toute requête écrite en algèbre ou en calcul est écrivable en SQL (l'inverse est faux). L'avantage de l'algèbre, c'est que c'est procédural, le calcul est déclaratif et le SQL est un mélange ignoble des deux :-)

Reply

Marsh Posté le 06-05-2009 à 17:29:09    

ah ouais c'est vrai que j'avais pas vu cet aspect

Reply

Sujets relatifs:

Leave a Replay

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