[SQL] probleme de requetes

probleme de requetes [SQL] - Programmation

Marsh Posté le 24-02-2002 à 16:29:51    

Voici mes 3ere questions en SQL de newbies.
La seule commande SQL que je connaisse est SELECT * FROM client.
J'ai deux tables dans une base de données Oracle, client (qui contient l'ID, le nom (unique), + d'autres infos) et transaction (qui contient toutes les transactions entre un vendeur et un client ID, nom du client(meme que client.nom), flag + d'autres infos)
 
1. Je voudrai inserer (ou plutot ajouter) un nouveau champ dans une table existante (client). Le nom du nouveau champ est 'status' et est sur 3 caractères.
A quoi va ressembler ma requete:
INSERT status FROM client ??? (ou je mets le type du champ VARCHAR(3))
 
2. Je voudrai maintenant faire une selection des clients contenu dans la table transaction (ou faire la listes des clients) mais sans avoir tous les boublons (parce que je peux avoir plusieurs transactions pour le meme clients), il me faut uniquement la liste des clients
SELECT transaction.nom FROM transaction WHERE ??? (quel est le critere pour n'avoir que les noms des clients)
Ex:  
DUPOND
RICHARD
DUPOND
DUPOND
RICHARD
TREMBLAY
 
resultat escompté  
DUPOND
RICHARD
TREMBLAY
 
 
3. Et pour finir je voudrai affecter (ou appliquer) un status a mon flag (de la table transaction) lorsque le client a un status actif (par exemple 'A';) Si le status du client (table client) est de type 'A' je veux mettre toutes les transactions associées a ce client à 'V' (V comme valide)
UPDATE transaction.flag SET 'V' WHERE client.nom=transaction.nom AND client.status='S' (je ne sais pas si la syntaxe est bonne mais ca donne une idee du resultat souhaité)
 
 
Si vous pouvez me donner une syntaxe exacte ca serai super cool  
Si vous n'avez rien compris, faites le moi savoir
 
 
Voila vous avez 1 heure pour y repondre
 
Merci beaucoup pour les reponses
 
 
Question supplementaire
Quel logiciel (client oracle) utilisez vous acceder à Oracle ?
J'utilise presentement PL/SQL, TOAD ne marche pas il reste gelé a son lancement (si quelqu'un a une solution pour ca)

Reply

Marsh Posté le 24-02-2002 à 16:29:51   

Reply

Marsh Posté le 24-02-2002 à 16:43:06    

Ngok a écrit a écrit :

 
1. Je voudrai inserer (ou plutot ajouter) un nouveau champ dans une table existante (client). Le nom du nouveau champ est 'status' et est sur 3 caractères.
A quoi va ressembler ma requete:
INSERT status FROM client ??? (ou je mets le type du champ VARCHAR(3))



 
INSERT INTO client VALUES + les valeurs de tes champs dans l'ordre entre () pour rajouter une ligne (enregistrement),
ALTER TABLE pour rajouter une colonne (champ)
 

Ngok a écrit a écrit :

 
2. Je voudrai maintenant faire une selection des clients contenu dans la table transaction (ou faire la listes des clients) mais sans avoir tous les boublons (parce que je peux avoir plusieurs transactions pour le meme clients), il me faut uniquement la liste des clients
SELECT transaction.nom FROM transaction WHERE ??? (quel est le critere pour n'avoir que les noms des clients)
Ex:  
DUPOND
RICHARD
DUPOND
DUPOND
RICHARD
TREMBLAY
 
resultat escompté  
DUPOND
RICHARD
TREMBLAY




 
SELECT DISTINCT Nom FROM Transaction
 

Ngok a écrit a écrit :

 
3. Et pour finir je voudrai affecter (ou appliquer) un status a mon flag (de la table transaction) lorsque le client a un status actif (par exemple 'A';) Si le status du client (table client) est de type 'A' je veux mettre toutes les transactions associées a ce client à 'V' (V comme valide)
UPDATE transaction.flag SET 'V' WHERE client.nom=transaction.nom AND client.status='S' (je ne sais pas si la syntaxe est bonne mais ca donne une idee du resultat souhaité)




 
UPDATE Client, Transaction SET Transaction. Flag = 'V' Where client.nom=transaction.nom AND client.status = 'S'
 

Ngok a écrit a écrit :

 
Voila vous avez 1 heure pour y repondre




 
on te répond pour te rendre service, et non par obligation...
 

Ngok a écrit a écrit :

 
Merci beaucoup pour les reponses




 
De rien

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-02-2002 à 17:58:50    

C'était juste une plaisanterie (pour faire style scolaire)
 
Ngok a écrit :
--------------------------------------------------------------------------------
Voila vous avez 1 heure pour y repondre
--------------------------------------------------------------------------------
 
on te répond pour te rendre service, et non par obligation...
 
 
 
Merci beaucoup à toi d'avoir pris la peine de repondre
merci

Reply

Marsh Posté le 24-02-2002 à 20:53:32    

pardon du dérangement...
 
La commande suivante fonctionne pas, il me dit que .nom et .status n'existe pas. Je travaille sur deux tables, UPDATE marche que pour une table ? Comment lui indiquer d'utiliser aussi la table client ?
 
UPDATE transaction SET transaction.flag='S' WHERE transaction.nom=client.nom AND client.status='S'
 
UPDATE transaction,client SET... marche pas  
 
Où puis-je trouver un jeu d'instruction SQL Oracle ?

Reply

Marsh Posté le 24-02-2002 à 21:02:58    

Ngok a écrit a écrit :

1. Je voudrai inserer (ou plutot ajouter) un nouveau champ dans une table existante (client). Le nom du nouveau champ est 'status' et est sur 3 caractères.  



Pour insérer une colonne, c'est différent.
Ca peut varier d'un SGBD à un autre mais ca ressemble souvent à ca :
ALTER TABLE client ADD 'status' VARCHAR(3)
 

Ngok a écrit a écrit :

2. Je voudrai maintenant faire une selection des clients contenu dans la table transaction (ou faire la listes des clients) mais sans avoir tous les boublons (parce que je peux avoir plusieurs transactions pour le meme clients), il me faut uniquement la liste des clients
SELECT transaction.nom FROM transaction WHERE ??? (quel est le critere pour n'avoir que les noms des clients)  




SELECT transaction.nom FROM transaction GROUP BY transaction.nom
ou peut être :
SELECT DISTINCT transaction.nom FROM transaction

 

[jfdsdjhfuetppo]--Message édité par bjbebert--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 24-02-2002 à 21:10:53    

Le GROUP BY ne fonctionne que pour les fonctions d'agrégation, comme Sum() ou Count(), etc... :ouch:  
Le SELECT DISTINCT est tout à fait adapté à ce genre de cas

 

[jfdsdjhfuetppo]--Message édité par Harkonnen--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 25-02-2002 à 15:24:39    

Ngok a écrit a écrit :

pardon du dérangement...
 
La commande suivante fonctionne pas, il me dit que .nom et .status n'existe pas. Je travaille sur deux tables, UPDATE marche que pour une table ?




Oui, hélas
 

Ngok a écrit a écrit :

 
 Comment lui indiquer d'utiliser aussi la table client ?




cf. 1ere question :)

 

[jfdsdjhfuetppo]--Message édité par irulan--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 25-02-2002 à 15:27:29    

Ngok a écrit a écrit :

Question supplementaire
Quel logiciel (client oracle) utilisez vous acceder à Oracle ?
J'utilise presentement PL/SQL, TOAD ne marche pas il reste gelé a son lancement (si quelqu'un a une solution pour ca)  




 
Oracle Worksheet (fourni avec Oracle Enterprise Manager)
TOAD : il n'y a aucun message ?
Tu travailles sous quel OS ?

Reply

Marsh Posté le 25-02-2002 à 17:24:25    

Harkonnen a écrit a écrit :

Le GROUP BY ne fonctionne que pour les fonctions d'agrégation, comme Sum() ou Count(), etc... :ouch:  



LE GROUP BY te regroupe tous les champs identiques. Pratique quand tu as un count() ou autre, mais ca marche très bien sans.
Maintenant, c'est vrai que le DISTINCT est plus 'propre', mais j'étais pas sur de cette syntaxe pour Oracle.

Reply

Sujets relatifs:

Leave a Replay

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