IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Aide contrôle SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Aide contrôle SQL
    Bonsoir,

    Il y a une semaine, on a eu un devoir d'une heure sur SQL, et visiblement, toute la classe l'a raté. Du coup, le prof dans son infinie bonté, nous a proposé de le refaire chez nous. Et il fera la moyenne des deux notes...

    Du coup, j'aurais bien besoin d'aide, histoire d'avoir 20. Bien entendu, je vais aussi chercher de mon côté, j'ai jusqu'à mercredi. Mais si vous savez répondre à des questions, j'accepterai volontiers vos réponses.

    Voici le contrôle en question :

    Nom : 1508099074-sql.png
Affichages : 576
Taille : 107,1 Ko

    Je vous remercie d'avance !
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Bonsoir CRhodes7,

    Ce n'est pas un service à te rendre que faire ce contrôle à ta place.
    Surtout que tu ne seras certainement pas quitte avec SQL à si bon compte ! Tu risques fort de le retrouver sur ton chemin, alors autant dompter la bête maintenant.
    Tu as des tutoriels sur le site, comme ceux-ci.
    Si tu ne comprends pas un des points du cours, ou si tu veux valider une solution, avec plaisir.

    Cordialement,
    Paraffine.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonsoir,

    Tu as raison, c'est pour ça que je viens d'essayer de le faire seul. Du coup, j'aurais juste besoin d'un avis sur ces réponses :

    13. Diminuer l'emprunt de tous les clients habitant 'Marseille' de 5% (3 pts)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE EMPRUNT
    SET E.Montant = E.Montant * 0.95
    FROM CLIENT CL, EMPRUNT E
    WHERE E.Num_Client = CL.Num_Client
    AND CL.Ville_Client = “Marseille” ;
    14. Fermer les comptes du client 'CLOE' (1 pt)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE 
    FROM CLIENT
    WHERE Nom_Client = “CLOE” ;
    C'est correct ? Merci d'avance !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    La syntaxe UPDATE ... FROM n'est pas normalisée. Elle n'est reconnue que par quelques SGBD qui font des entorses à la norme.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par CRhodes7 Voir le message
    13. Diminuer l'emprunt de tous les clients habitant 'Marseille' de 5% (3 pts)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE EMPRUNT
    SET E.Montant = E.Montant * 0.95
    FROM CLIENT CL, EMPRUNT E
    WHERE E.Num_Client = CL.Num_Client
    AND CL.Ville_Client = “Marseille” ;
    Comme a dit al1_24, ce n'est pas normalisé de faire ainsi.

    Autre remarque concernant cette requête : Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre ! Je suis sidéré qu'on vous apprenne encore l'ancienne syntaxe !

    Revenons au problème qui consiste donc à écrire correctement la clause de restriction (WHERE)...
    Il faut faire une sous-requête réalisant la jointure entre CLIENT et EMPRUNT pour restreindre la requête aux clients habitant Marseille.
    Je vous donne donc la piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE EMPRUNT
    SET Montant = Montant * 0.95
    WHERE Num_Emprunt IN
    (
        SELECT e.Num_Emprunt
        FROM EMPRUNT e
        INNER JOIN -- et là je vous laisse continuer ;)
    14. Fermer les comptes du client 'CLOE' (1 pt)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE 
    FROM CLIENT
    WHERE Nom_Client = “CLOE” ;
    C'est correct ?
    Non. Là vous supprimez le client ; ce n'est pas ce qui est demandé.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    En sus une chaine de caractères ne se délimite pas par des guillemets ( " ) mais par des apostrophes ( ' )

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Je suis désolé, c'est pourtant ce qu'on nous apprend... Du coup, je vais modifier tout ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE EMPRUNT
    SET Montant = Montant * 0.95
    WHERE Num_Emprunt IN (
     	SELECT E.Num_Emprunt
     	FROM EMPRUNT E
     	INNER JOIN CLIENT CL ON E.Num_Client = CL.Num_Client
     	WHERE CL.Ville_Client = ‘Marseille’ ;
    Sinon, clôturer le compte, on peut faire comment avec ces tables ? En gros, on peut rien Delete, il faut toujours que les données soient visibles, même si le compte est fermé ? Je suis désolé, je me sens vraiment bête pour le coup.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    On peut supposer que clôturer les comptes d'un client consiste à mettre à jour le solde de chaque compte du client pour le mettre à zéro
    Il faut avouer que l'énoncé sur ce point n'est pas très précis, et la précision des règles de gestion est l'une des choses les plus importantes dans un projet informatique (pan dans la tronche du prof )
    Dans la vraie vie, un compte clôturé est identifié par un statut particulier et/ou une date de clôture.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    J'ai demandé à mon prof par mail, et pour lui, cloturer le compte, c'est supprimer le compte client. Du coup, je dois juste faire un delete sur le numero client du client 'CLOE' ?

    PS : Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE 
    FROM COMPTE
    WHERE Num_Client IN (
    	SELECT Num_Client
    	FROM CLIENT
    	WHERE Nom_Client = ‘CLOE’ ;
    Selon vous, c'est juste ?

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il manque la parenthèse fermante mais c'est ça.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CRhodes7 Voir le message
    Bonjour,

    J'ai demandé à mon prof par mail, et pour lui, cloturer le compte, c'est supprimer le compte client. Du coup, je dois juste faire un delete sur le numero client du client 'CLOE' ?

    PS : Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE 
    FROM COMPTE
    WHERE Num_Client IN (
    	SELECT Num_Client
    	FROM CLIENT
    	WHERE Nom_Client = ‘CLOE’ ;
    Selon vous, c'est juste ?
    C'est juste techniquement, à la parenthèse près comme indiqué par Cinéphil
    Par contre : si Nom_client ne fait pas l'objet d'une contrainte "UNIQUE", et c'est très rarement le cas sur une colonne libellé, vous risquez de détruire les comptes de plusieurs clients !

    Exemple : je suis fournisseur de boissons pour les bars et restaurant, dois-je supprimer les comptes de tous les "cafés des sports" ou "hotel Bellevue" de France et de Navarre ? Ca risque de faire beaucoup de delete

    On ne fait jamais de mise à jour (surtout s'il s'agit d'un delete) sur un critère de filtrage par libellé, mais toujours sur un ou une liste d'identifiant(s) unique(s), par exemple le n° de compte !

    Encore une fois vous n'y êtes pour rien, c'est l'énoncé qui est inapproprié.

Discussions similaires

  1. [oracle 10g] aide connection sql
    Par isidore dans le forum Oracle
    Réponses: 8
    Dernier message: 15/02/2006, 11h11
  2. besoin d'aide pl/SQL
    Par toome dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/12/2005, 15h26
  3. Besoin d'aide requete sql
    Par dinde dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/10/2005, 09h09
  4. [Aide requete SQL]
    Par viny dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/04/2005, 17h00
  5. aide PL/SQL syntaxes [debutant] [mauvaise doc]
    Par sdeb dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/01/2004, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo