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)
Nous aurons 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 à éviter car elle est lente et elle fournit des doublons .
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; 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,categorie;
Les jointures :
SELECT nom FROM article_librairie INNER JOIN catégorie ON article_librairie.codec=categorie.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 façon on peut utiliser l'opérateur NOT IN