MySQL - Jointure et In
Tutoriel écrit par KOogar et Phreakman
Ecrit le 20 Sep 2005 - modifié le 12 Nov 2006
Sommaire :
Ecrit le 20 Sep 2005 - modifié le 12 Nov 2006
Dans ce tuto vous aller voir les différentes solutions pour sélectionner des enregistrements qui ont un point commun sur plusieurs table en même temps. Le produit cartesien est le plus simple à mettre en place mais il demande beaucoup en ressource serveur, je vous recommande les jointures ou les rêquetes imbriquées qui vont beaucoup plus vite en traitement.
Pour sélectionner des enregistrements dans des tables différentes, il existe 3 solutions :
- Le produits cartésiens
- Les jointures
- Les requêtes imbriquées
Sommaire :
MySQL - Jointure et In
Mysql - Le produit cartésien.
Soit: table1(attribut1,attribut2) et table2(attribut2,attribut3)
Le produit cartésien produira :
table1*table2(table1.attribut1,table1.attribut2,table2.attribut2,table2.attribut3)
on aura donc
table1 a 1 b 2
table2 1 300 2 400
table1*table2
a 1 1 300
a 1 2 400
b 2 1 300
b 2 2 400
SELECT nomattribut1,...,nomattributN FROM nomdetable1,nomdetable2,....,nomdetableN WHERE condition;
Cependant cette méthode est à eviter car elle est lente et elle fournit des doublons .
Mysql - Les jointures
table1
a 1
b 2
table2
1 300
2 400
table
a 1 300
b 2 400
L'exemple ci-dessus est le cas d'une jointure dite NATURELLE, elle est associative et commutative.
Cas théorique d'une jointure naturelle, c'est à dire table1.attribut2=table2.attribut2
SELECT nomattribut1,...,nomattributN FROM nomdetable1 INNER JOIN nomdetable2 ON nomdetable1.nomattribut=nomdetable2.nomattribut WHERE conditions;
Mysql - Les requêtes imbriquées
A savoir
Les requêtes imbriquées se lisent de bas en haut (on lit d'abord la dernière requête) et elles peuvent être remplacées par des jointures mais la réciproque est fausse.
SELECT nomattribut FROM nomdetable WHERE nomattribut IN(SELECT nomattribut FROM nomdetable WHERE condition);
Exemple
Article_librairie(idl,nom,#codec)
Categorie(codec,prix)
Le produit cartésien
SELECT nom FROM article_librairie,catégorie;
Les jointures
SELECT nom FROM article_librairie INNER JOIN catégorie ON article_librairie.codec=catégorie.codec;
Les requêtes imbriquées
SELECT prix FROM catégorie WHERE codec IN (SELECT codec FROM article_librairie WHERE nom='mybook');
Remarque
De la même facon on peut utiliser l'opérateur NOT IN
© Copyright: Les tutoriels sont exclusifs et sont la propriétés des auteurs.
Reproduction interdite.
Connexion
PHP
- Introduction
- Installation
- Echo
- Les variables
- Les chaîne de Caractères
- Les Opérateurs
- La fonction Include
- If
- If Else
- If - Else if - Else
- Switch
- Boucle For
- Boucle Foreach
- Boucle While
- Boucle Do While
- Break et Continue
- Magic Quotes
- GET & POST
- htmlentities
- SESSIONS
- Cookies
- Dates et Heures
- Fichier texte
- Newsletters
- Les Modulos


