Subtilité SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Subtilité SQL

par albat » 01 nov. 2005, 16:25

Et le [Résolu] ? ;)

par kivan » 01 nov. 2005, 15:44

oki merci ! :D

par albat » 01 nov. 2005, 15:24

N'oublie pas d'afficher ton code formaté grâce aux balises
 ou [code ], merci.
[php]$rq_01 = "SELECT DISTINCT D.id_date, C.id_concert
          FROM concert_date D, concert C, concert_groupe G
          WHERE D.id_concert = C.id_concert
            AND G.id_concert = C.concert
          ORDER BY $tri
          LIMIT $deb, $fin";

$rq_02 = "SELECT DISTINCT D.id_date, C.id_concert
          FROM concert C INNER JOIN concert_date D on (D.id_concert = C.id_concert)
                         INNER JOIN concert_groupe G on (G.id_concert = C.id_concert)
          ORDER BY $tri
          LIMIT $deb, $fin";
Les résultats de tes requêtes seront identiques.
Ces deux requêtes sont donc équivalentes.

Cependant, la 2e est effectivement plus "élégante"
car les jointures sont plus vite traitées que les clauses WHERE
(que l'on devrait n'utiliser que pour des tests de valeurs)

C'est donc une question d'optimisation.
Mais les différences de performances risquent fort d'être imperceptibles.

Tu as donc le choix entre ces deux écritures. ;)

par kivan » 01 nov. 2005, 15:01

mince petite erreure, en faite la première requête était :

$rq="SELECT DISTINCT D.id_date,C.id_concert FROM concert_date
D,concert C,concert_groupe G WHERE D.id_concert=C.id_concert AND G.id_concert=C.concert ORDER BY $tri LIMIT $deb,$fin";


là y a-t-il une différence avec :

$rq="SELECT DISTINCT D.id_date,C.id_concert FROM concert C
INNER JOIN concert_date D on (D.id_concert = C.id_concert)
INNER JOIN concert_groupe G on (G.id_concert = C.id_concert)
ORDER BY `$tri` LIMIT $deb,$fin";

par albat » 01 nov. 2005, 14:36

Je ne dirai pas que la seconde est "plus propre",
je dirais plutot que la première est une hérésie. ;)

Tu vas nous générer un magnifique produit cartésien.
Et c'est très mal. :evil:

Je ne crois pas que tes deux requêtes donnent le même résultat.

Subtilité SQL

par kivan » 01 nov. 2005, 13:21

Bonjour, j'aimerai qu'on m'explique une subtilité du SQL, ces deux requêtes semblent faire la même chose, et pourtant
il parait que la deuxième est "plus propre" que la première... Purquoi cela ?

$rq="SELECT DISTINCT D.id_date,C.id_concert FROM concert_date
D,concert C,concert_groupe G ORDER BY $tri LIMIT $deb,$fin";



$rq="SELECT DISTINCT D.id_date,C.id_concert FROM concert C
INNER JOIN concert_date D on (D.id_concert = C.id_concert)
INNER JOIN concert_groupe G on (G.id_concert = C.id_concert)
ORDER BY `$tri` LIMIT $deb,$fin";

merci d'avance,