Partie I
SQL de base
142
© Éditions Eyrolles
Le tableau suivant présente deux écritures d’un produit cartésien (seul l’ordre d’affichage des
colonnes change) :
Division
La division est un opérateur algébrique et non ensembliste. Cet opérateur est semblable sur le
principe à l’opération qu’on apprend au CM2 (oubliée plus tard en terminale à cause des
calculettes). La division est un opérateur binaire comme la jointure, car il s’agit de diviser une
table (ou partie de) par une autre table (ou partie de). Il est possible d’opérer une division à
partir d’une seule table, en ce cas on divise deux parties de cette table (analogue aux autojointures).
L’opérateur de division n’est pas fourni par MySQL (ni par aucun de ses concurrents d’ailleurs).
Il n’existe donc malheureusement pas d’instruction DIVIDE.
Est-ce la complexité ou le manque d’intérêt qui freinent les éditeurs de logiciels à programmer
ce concept ? La question reste en suspens, alors si vous avez un avis à ce sujet, faites-moi signe !
Cet opérateur permet de traduire le terme « pour tous les » des requêtes qu’on désire programmer en SQL.
On peut aussi dire que lorsque vous voulez comparer un ensemble avec un groupe de référence, il faut programmer une division.
La division peut se programmer sous MySQL à l’aide d’une différence (NOT IN) et la fonction
NOT EXISTS.
Tableau 4-49 Produit cartésien
Besoin
Jointures SQL2 et résultat
Combinaison de toutes les lignes
des deux tables.
SELECT * FROM Naviguant
;
-- équivalent à
SELECT * FROM VolsControle
+--------+----------------+---------+--------+--------+--------+------------+
| brevet | nom
| nbHVol | typeAv | brevet | typeAv | validite
|
+--------+----------------+---------+--------+--------+--------+------------+
| PL-1
| Pierre Lamothe | 450.00 | NULL
| PL-1
| A320
| 2005-06-24 |
| PL-2
| Didier Linxe
| 900.00 | A320
| PL-1
| A320
| 2005-06-24 |
| PL-3
| Henri Alquié
| 3400.00 | A380
| PL-1
| A320
| 2005-06-24 |
| PL-1
| Pierre Lamothe | 450.00 | NULL
| PL-2
| A320
| 2006-04-04 |
...
15 rows in set
Web
CROSS JOIN VolsControle
CROSS JOIN Naviguant;
SQL de base
142
© Éditions Eyrolles
Le tableau suivant présente deux écritures d’un produit cartésien (seul l’ordre d’affichage des
colonnes change) :
Division
La division est un opérateur algébrique et non ensembliste. Cet opérateur est semblable sur le
principe à l’opération qu’on apprend au CM2 (oubliée plus tard en terminale à cause des
calculettes). La division est un opérateur binaire comme la jointure, car il s’agit de diviser une
table (ou partie de) par une autre table (ou partie de). Il est possible d’opérer une division à
partir d’une seule table, en ce cas on divise deux parties de cette table (analogue aux autojointures).
L’opérateur de division n’est pas fourni par MySQL (ni par aucun de ses concurrents d’ailleurs).
Il n’existe donc malheureusement pas d’instruction DIVIDE.
Est-ce la complexité ou le manque d’intérêt qui freinent les éditeurs de logiciels à programmer
ce concept ? La question reste en suspens, alors si vous avez un avis à ce sujet, faites-moi signe !
Cet opérateur permet de traduire le terme « pour tous les » des requêtes qu’on désire programmer en SQL.
On peut aussi dire que lorsque vous voulez comparer un ensemble avec un groupe de référence, il faut programmer une division.
La division peut se programmer sous MySQL à l’aide d’une différence (NOT IN) et la fonction
NOT EXISTS.
Tableau 4-49 Produit cartésien
Besoin
Jointures SQL2 et résultat
Combinaison de toutes les lignes
des deux tables.
SELECT * FROM Naviguant
;
-- équivalent à
SELECT * FROM VolsControle
+--------+----------------+---------+--------+--------+--------+------------+
| brevet | nom
| nbHVol | typeAv | brevet | typeAv | validite
|
+--------+----------------+---------+--------+--------+--------+------------+
| PL-1
| Pierre Lamothe | 450.00 | NULL
| PL-1
| A320
| 2005-06-24 |
| PL-2
| Didier Linxe
| 900.00 | A320
| PL-1
| A320
| 2005-06-24 |
| PL-3
| Henri Alquié
| 3400.00 | A380
| PL-1
| A320
| 2005-06-24 |
| PL-1
| Pierre Lamothe | 450.00 | NULL
| PL-2
| A320
| 2006-04-04 |
...
15 rows in set
Web
CROSS JOIN VolsControle
CROSS JOIN Naviguant;
