[MySQL] Problème d'exécution d'une requête SQL

Problème d'exécution d'une requête SQL [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 07-02-2012 à 09:22:14    

Bonjour,  
 
Tout d'abord, merci beaucoup pour vos réponses et vos remarques.
 
1) Je voulais savoir l'emplacement de la base et ses tables associés après leur création.
Où se trouve exactement la base créée dans le répertoire d'installation de MySQL parce que je n'ai pas trouver dans C:\Program Files\MySQL\MySQL Server 5.5\data ?
 
2) Je voulais savoir le rôle d'ordre SQL "commit" puisque même sans "commit" on aura la persistance des données ou bien il faut "commit" pour valider les différentes manipulations effectuées sur la base de données créée ?
 
3) Est ce que on peut mettre de commentaires en SQL comme dans les autres langages de programmation ?  
 
4) Je trouve de difficultés pour formuler les requêtes suivantes :
 
 

Citation :

a) Intitulé des services ayant en commande au moins une pièce de couleur rouge.
b) Intitulé des services n'ayant pas en commande la pièce P5.
c) Numéro des services ayant en commande toutes les pièces.
d) Numéro des services ayant en commande au moins toutes les pièces commandées au service S3.


 
 
Voici le schéma relationnel :
 

Citation :

CLIENT (NumC, NOM, ADRESSE)  
SERVICE (NumS, INTITULE, LOCALISATION)  
PIECE (NumP, DESIGNATION, COULEUR, POIDS)
ORDRE (#NumP, #NumS, #NumC, QUANTITE)


 
 
Merci

Reply

Marsh Posté le 07-02-2012 à 09:22:14   

Reply

Marsh Posté le 07-02-2012 à 11:15:27    

c'est pas bien de faire faire ses devoirs

Reply

Marsh Posté le 07-02-2012 à 14:07:28    

Je suis d'accord avec vous.
J'ai besoin des indications si c'est possible.

Reply

Marsh Posté le 07-02-2012 à 14:19:10    

1/ c'est indiqué dans le fichier de conf de mysql (' mais je ne sais pas ou ile st sous windows )
2/ une requete hors transaction n'a aps besoin d'un commit
3/ oui, dans les requetes, les procédures et la structure des table
4/ tu as fait quoi comme requetes ?µ

Reply

Marsh Posté le 07-02-2012 à 17:21:20    

Citation :

1/ c'est indiqué dans le fichier de conf de mysql (' mais je ne sais pas ou ile st sous windows )
 


Pardon, je n'ai pas trouvé même le fichier conf de mysql.
Voici la liste des dossiers trouvés sous "C:\Program Files\MySQL\MySQL Server 5.5" :
Bin, include, dta, lin et share
 

Citation :

2/ une requete hors transaction n'a aps besoin d'un commit


 
Je n'ai pas compris une requête hors transaction.
Quelle est la différence entre une requête et une transaction ?
Je suis en train d'exécuter des requêtes de LDD, LMD et LID.  
Est ce que ce type de requêtes besoin de "commit" ou de "rollback"  ?
 

Citation :

3/ oui, dans les requetes, les procédures et la structure des table


 
Comment on note les commentaires en SQL ?
Exemple c'est possible ?
 

Citation :

4/ tu as fait quoi comme requetes ?µ


 

Citation :

a) Intitulé des services ayant en commande au moins une pièce de couleur rouge.


Code :
  1. Select INTITULE
  2. from SERVICE s, ORDRE o, PIECE p
  3. where s.NumS=o.NumS
  4. and p.NumP=o.NumP
  5. and p.COULEUR='rouge';


 

Citation :

b) Intitulé des services n'ayant pas en commande la pièce P5.


Code :
  1. Select INTITULE
  2. from SERVICE
  3. where NumS not in
  4. (Select INTITULE
  5. from SERVICE s, ORDRE o, PIECE p
  6. where s.NumS=o.NumS
  7. and p.NumP=o.NumP
  8. and p.NumP='P5');


 

Citation :

c) Numéro des services ayant en commande toutes les pièces.


Code :
  1. Select s.NumS
  2. from SERVICE s, ORDRE o, PIECE p
  3. where s.NumS=o.NumS
  4. and p.NumP=o.NumP;


 

Citation :

d) Numéro des services ayant en commande au moins toutes les pièces commandées au service S3.


Code :
  1. Select INTITULE
  2. from SERVICE s, ORDRE o, PIECE p
  3. where s.NumS=o.NumS
  4. and p.NumP=o.NumP
  5. and s.NumS='S3';


Reply

Marsh Posté le 07-02-2012 à 22:22:52    

En fait, une transaction, c'est une série d'instruction qui vont modifier ta base de données. Tu vas vouloir utiliser une transaction quand t'as peur qu'un souci vienne foutre le bordel dans les opérations que tu fais dessus. Un exemple :
 
Tu as un site de vente en ligne, et tu enregistres un nouvel article. Cela se traduit dans ta BDD par des inserts dans plusieurs tables différentes. Si en plein milieux de tes 12 inserts, t'as un problème (coupure de courant/internet), ça peut te mettre ta base de données dans un état que tu ne connais pas (et accessoirement foutre le bordel, imagines que t'enregistres une télé plasma, mais que ça plante au moment ou tu insères le prix. Tu peux te retrouver à vendre des TV gratos :p ). La transaction va "envelopper" toutes ces opérations, et si l'une d'entre elle échoue, alors aucune autre ne sera validée, et ta BDD restera inchangée.
 
Mais si tu débutes dans les BDD, je pense pas que tu voies masse de transactions.
 
Pour les requêtes, j'utiliserait les jointures, ça caractérise pas mal les choses déja.  
 
Par exemple, pour la première

Code :
  1. SELECT INTITULE
  2. FROM SERVICE s INNER JOIN ORDRE o ON s.NumS=o.NumS
  3.         INNER JOIN PIECE p ON p.NumP=o.NumP
  4. WHERE p.COULEUR = 'rouge'


 
Dis nous si ça marche (et si t'as d'autres questions :) )
Nico

Reply

Marsh Posté le 17-02-2012 à 12:55:14    

Citation :

d) Numéro des services ayant en commande au moins toutes les pièces commandées au service S3.


 
Voici ma proposition :

Code :
  1. SELECT NumS
  2. FROM ORDRE
  3. Group By NumS
  4. Having count(distinct NumP) >= (Select count(distinct NumP)
  5. From ORDRE where NumS='S3');


 
Mais, il n'affiche pas tous les résultats. Il y a un service qui répond au requête posée mais ce service n'apparait pas dans le résultat final.
 
Pourquoi ?
A mon avis, a part le nombre de pièces il faut aussi comparer entre les noms de pièces. Si oui, comment on procède ?
 
Merci.


Message édité par chabn le 17-02-2012 à 13:07:31
Reply

Marsh Posté le 17-02-2012 à 16:16:44    

flo850 a écrit :

1/ c'est indiqué dans le fichier de conf de mysql (' mais je ne sais pas ou ile st sous windows )
2/ une requete hors transaction n'a aps besoin d'un commit
3/ oui, dans les requetes, les procédures et la structure des table
4/ tu as fait quoi comme requetes ?µ


Pour le 2 c'est un peu incomplet car :
- les requêtes DDL (Data Definition Langage) n'ont jamais besoin de commit pour être effective
- les requêtes DML (Data Modification Langage) ont toujours besoin de commit pour pour être effective
 
Après ce n'est pas parce que les SGBD utilisent par défaut un mode "auto-commit" qu'il n'y a pas eu de transaction et de commit. :spamafote:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

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