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 :

Une question SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Une question SQL
    Je veux afficher la liste des employés (MAT,NOM) qui ont travaillé au moins dans deux services
    Images attachées Images attachées  

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select	MAT, 
    	NOM 
    from EMPLOYE
    where exists	(	select 1 
    			from AFFECTATION AFF1 
    			inner join AFFECTATION AFF2	on	AFF1.MAT# = AFF2.MAT#
    							and	AFF1.CODE_SER# <> AFF2.CODE_SER#
    			where	AFF1.MAT# = MAT
    		)
    ;
    C'est pas forcément le plus optimiser ni le plus propre, mais ca devrait fonctionner.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 184
    Points : 12 733
    Points
    12 733
    Par défaut
    Bonjour,
    Ca sent tout de même une demande de solution pour un exercice...
    Et si tu nous montrait plutôt ce que tu as tenté de faire, histoire qu'on te donne des pistes à creuser ?
    Le but d'un forum comme celui-ci n'est pas de faire les devoirs des autres, il me semble...

    Tatayo.

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Je suis d'accord avec toi, mais ca ne me pose pas particulièrement de problème d'éthique lol ^^

    dès lors que ca m'amuse d'écrire une minuscule requête, ca me gène pas de le faire.
    Après, l'auteur s'arrange avec sa conscience, et surtout, s'arrange avec ses futures compétences professionnelles.

    Mais la prochaine fois, je penserai à balancer un easter egg dans les requêtes que je ponds, c'est une bonne idée pour voir si la personne comprend qlq chose ou si elle recopie betement.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    @bstevy ta solution est de mon point de vue "surprenante"
    ayant été prof dans un passé lointain, ce devoir m'aurait mis la puce à l'oreille et j'aurais senti la "triche"
    une solution à base de GROUP BY/HAVING mâtinée d'une petite jointure m'aurait suffit je pense

    Citation Envoyé par bstevy Voir le message
    Mais la prochaine fois, je penserai à balancer un easter egg dans les requêtes que je ponds, c'est une bonne idée pour voir si la personne comprend qlq chose ou si elle recopie bêtement.
    j'aimerais bien voir ça
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour ,
    Merci pour vos réponses , en effet mon prof nous a envoyé la correction mais j'ai pas compris son raisonnement donc j'ai voulu voir d'autres version pour faire une comparaison afin de comprendre . Enfin je vous montre la correction dans la figure ci-dessous ,
    et voila mon essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select Mat, Nom 
    From employe , affectation
    where employe.Mat = affectation.Mat
    Having ( count(*) from affectation > 2 )
    Nom : Capture.PNG
Affichages : 128
Taille : 22,5 Ko

  7. #7
    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 763
    Points
    30 763
    Par défaut
    Tu diras à ton prof de notre part que depuis le siècle dernier les jointures s'écrivent en utilisant l'opérateur JOIN.
    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.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ma réponse est-elle correcte ?

  9. #9
    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 763
    Points
    30 763
    Par défaut
    Si tu as essayé de l'exécuter avec un SGBD, tu sais déjà qu'elle est incorrecte.
    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.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Où est la clause GROUP BY ?
    et bien sur j'abonde dans le sens de al1_24 un JOIN bien écrit serait un plus
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    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 763
    Points
    30 763
    Par défaut
    Je n'avais pas fait attention mais la clause GROUP BY est aussi absente de la correction
    Rassure-moi : ce n'est pas une formation diplômante, avec des examens reconnus, que tu suis ?
    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.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Si , mais le prof a pris son diplôme l'année dernière

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 017
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    bonjour,

    qui ont travaillé au moins dans deux services
    ne s'exprime pas Having count(*) from affectation > 2 mais HAVING count(*) >= 2
    on peut aussi lire "au moins dans deux services" par "plus d'un service" donc HAVING count(*)>1

    clôturons cette discussion par une solution partielle

    Obtenir le nombre d'affectation par matricule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1. SELECT MAT,count(*) FROM AFFECTATION GROUP BY MAT
    Obtenir les matricules ayant travaillé dans au moins 2 services
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2. SELECT MAT FROM AFFECTATION GROUP BY MAT HAVING COUNT(*)>1
    Obtenir le nom d'un matricule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    3. SELECT A.MAT,E. NOM FROM AFFECTATION A INNER JOIN EMPLOYE E ON A.MAT=E.MAT
    Combinons 2 et 3 , plusieurs solutions possibles, les plus élégantes à mon avis seraient celle-ci
    Notez que pour des raisons pratiques j'utilise des noms d'alias pour les tables
    que j'ai mis la table AFFECTATION en premier dans la jointure parce que le "travail" se fait principalement sur cette dernière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.MAT AS Merci,E.NOM AS developpez ,count(*) AS  net 
    FROM AFFECTATION INNER JOIN EMPLOYE E ON A.MAT=E.MAT    // expression de Jointure
    GROUP BY MAT,NOM                                                               // expression de groupage
    HAVING COUNT(*) >1                                                             // sélection de résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // en utilisant une sous-requête telle que défini dans la norme SQL-99 
    WITH T AS (SELECT MAT,COUNT(*) AS N FROM AFFECTATION GROUP BY MAT)  // obtenir le nombre d''affectations par matricule 1
     
    SELECT T.MAT AS Merci,E.NOM as developpez,T.N AS net FROM T INNER JOIN EMPLOYE E ON t.MAT=E.MAT   // faire la jointure 2
    WHERE T.N>1 // au moins 2 , c.a.d plus d'une  affectation
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Une question aux Grands du Sql, sur les jointures externes
    Par tonton67 dans le forum Développement
    Réponses: 3
    Dernier message: 26/01/2009, 10h08
  2. [INSTALLATION]SQL server 2008, une question de droit
    Par sarapis dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/07/2008, 10h06
  3. Question sur les performance d'une transaction SQL
    Par SlashEne dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/04/2008, 23h41
  4. [SQL] Une question simple de débutant
    Par Jedge dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/12/2007, 19h58

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