Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1444 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1880186
faboun_21
Posté le 02-05-2009 à 16:03:29  profilanswer
 

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)

mood
Publicité
Posté le 02-05-2009 à 16:03:29  profilanswer
 

n°1881026
wakat
Posté le 05-05-2009 à 12:12:31  profilanswer
 

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

n°1881073
kao98
...
Posté le 05-05-2009 à 14:14:11  profilanswer
 

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


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1881082
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 05-05-2009 à 14:28:17  profilanswer
 

c'est un truc algebre relationnel je crois,

n°1881288
wakat
Posté le 06-05-2009 à 09:35:27  profilanswer
 

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.

n°1881297
kao98
...
Posté le 06-05-2009 à 09:54:09  profilanswer
 

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
n°1881342
wakat
Posté le 06-05-2009 à 11:00:39  profilanswer
 

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.

n°1881346
kao98
...
Posté le 06-05-2009 à 11:09:47  profilanswer
 

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
n°1881348
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 06-05-2009 à 11:17:11  profilanswer
 

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.

n°1881351
kao98
...
Posté le 06-05-2009 à 11:18:35  profilanswer
 

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
mood
Publicité
Posté le 06-05-2009 à 11:18:35  profilanswer
 

n°1881355
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 06-05-2009 à 11:22:00  profilanswer
 

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

n°1881387
wakat
Posté le 06-05-2009 à 12:15:44  profilanswer
 

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!
 

n°1881389
guybrush02
Posté le 06-05-2009 à 12:28:12  profilanswer
 

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.

n°1881408
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 06-05-2009 à 14:03:58  profilanswer
 

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
n°1881487
wakat
Posté le 06-05-2009 à 16:34:12  profilanswer
 

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.

n°1881551
guybrush02
Posté le 06-05-2009 à 17:27:12  profilanswer
 

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 :-)

n°1881554
infoman64
JE SUIS LA POUR TOI MON AMI
Posté le 06-05-2009 à 17:29:09  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
Afficher le resultat d'une requête SQL (VBA access)[SQL] Etablir un MCD des relations d'une base relationnelle[HELP]
requêtes d'insertions inexécutable concat date + comparaison avec nom[SQL] tri dans une requette
[SQL]Calculer le nombre de lundi entre 2 datesProblème connexion BDD SQl
[SQL] Supprimer les entrées d'1 table selon critère d'1 autre tableAide pour Requêtes SQL
[Troll] Join SQL traditionnel ou ANSI ? 
Plus de sujets relatifs à : [SQL] Requêtes SQL, faux ou correct ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR