Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requétes SQL , sous requétes

    2 décembre 2010 à 21:16:48

    Bonsoir,

    Voila j'ai beaucoup de mal à saisir le fonctionnement des sous requétes, c'est pourquoi j'ai trouvé un site tuto concernant bien ces sous requetes.

    Voici le lien ici

    Question posée:

    Exemple2 : On veut le numéro et nom des départements où les employés ont un salaire supérieur à 140000


    Voici la réponse du tuto:


    Select distinct nodep, distinct nomdep
    From DEPARTEMENT
    Where nodep IN (Select nodep
    From EMPLOYES
    Where sala > 140000);
    


    Moi, je vous demande pourquoi etre obliger d'utiliser une sous requete et ne pouvons nous pas faire comme ceci:

    SELECT nodep, nomemp
    FROM EMPLOYES, DEPARTEMENT
    WHERE EMPLOYES.nodep=DEPARTEMENT.nodep
    AND sala>140000;
    


    Voila n'est ce pas possible ceci ?

    Merci de votre aide ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2010 à 21:54:57

      Oui tu peux faire comme ça. Dans bien des cas il y a plusieurs solutions pour effectuer une même requête. Celle que tu proposes est correct toutefois je te conseille de rajouter un DISTINCT dans le SELECT pour n'avoir les départements qu'une seul fois.
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2010 à 14:28:32

        Si tu fais une jointure (d'ailleurs tu pourrais utiliser la norme SQL 2 qui existe depuis 1992) tu fais appel à un type de plan de requête différent de la requête imbriquée.
        De plus, comme le dit fort justement PEC++, tu n'auras pas le résultat escompté (duplication de lignes).
        En fait, la requête imbriquée est beaucoup plus rapide que la jointure (même si elle a lieu sur des colonnes indexées - c'est encore plus vrai avec l'opérateur =), mais ton moteur de base de données optimise (en quelque sorte "transforme" ta jointure en requête imbriquée) et ton plan sera quasi similaire.

        SELECT distinct nodep, nomemp
            FROM EMPLOYES INNER JOIN DEPARTEMENT
            ON (EMPLOYES.nodep=DEPARTEMENT.nodep)
                WHERE sala>140000;
        
        • Partager sur Facebook
        • Partager sur Twitter

        Requétes SQL , sous requétes

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown