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 :

requête jointure et sous requete


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 115
    Par défaut requête jointure et sous requete
    j'ai une requête pour afficher nom et fonction des employés ayant le même chef et la même fonction que martin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Select Nom,Fonction
    from EMPLOYE
    where Chef=all(select Chef 
                         from EMPLOYE 
                         where Nom='Martin' 
                              AND Fonction=all(select Fonction
                                                      from EMPLOYE
                                                      where Nom='Martin'));
     
     
    select Nom,Fonction
    from EMPLOYE
    where Chef=all(select Chef from EMPLOYE where Nom='Martin')
         AND Fonction=all(select Fonction from EMPLOYE where Nom='Martin')
    Ces deux requêtes sont fait la même résultat,est-ce qu'ils sont correct??

    c'est quoi la différence entre les deux requete quand il execute??



    SVP, vous pouvez me corriger un peu.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    l'utilisation "=ALL" est une hérésie... En effet ALL ANY et SOME sont des opérateurs ensemblistes destinés à une inégalité. Sinon il faut utiliser le IN.

    Une requête correcte est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Nom, Fonction
    FROM   EMPLOYE
    WHERE  Chef IN (SELECT Chef 
                    FROM   EMPLOYE 
                    WHERE  Nom='Martin' 
                      AND  Fonction In (SELECT Fonction
                                        FROM EMPLOYE
                                        WHERE Nom='Martin'));
    mais elle est d'une écriture malheureuse !!!

    Voici une écriture plus directe et plus performante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT E1.Nom, E1.Fonction
    FROM   EMPLOYE E1
           INNER JOIN EMPLOYE E2
                 ON E1.Chef = E2.Chef
                    AND E1.Fonction  = E2.Fonction
                    AND E1.nom <> E2.nom    
    WHERE  E2.nom = 'Martin'
    -- peut se lire : je joins les employés (t1) aux employés t2)
    -- pour ceux qui ont un même chef et une même fonction,
    -- mais pas le même nom, en considérant que t2 est restreint
    -- à l'employé de nom 'Martin'

    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/ * * * * *

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 115
    Par défaut
    INNER JOIN EMPLOYE E2

    peut tu me explique un peut ce code?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    Il s'agit de commandes de base du langage SQL qui sont décrites dans les Cours sur les Jointures en SQL
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jointure et sous-requetes ?
    Par somasimple dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/07/2011, 10h59
  2. sous-requetes ou jointure ?
    Par kumkum74 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/02/2008, 16h06
  3. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 11h03
  4. [Oracle] jointure et sous requete
    Par K_!!! dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/06/2006, 09h24
  5. Réponses: 15
    Dernier message: 14/04/2006, 15h34

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