Il n'y a pas de différence entre ces deux états, et l'optimiseur va transformer l' IN
de la =
lorsque IN
ont juste un élément en elle.
Mais quand vous avez une question comme ça, il suffit d'exécuter les deux déclarations, exécuter leur plan d'exécution et de voir les différences. Ici vous ne trouverez pas.
Après une grosse recherche en ligne, j'ai trouvé un document sur SQL à l'appui de cette(je suppose qu'il s'applique à tous les SGBD):
Si il n'y a qu'une seule valeur à l'intérieur de la parenthèse, ce félicitons est équivalent à
OÙ "column_name" = 'valeur1
Voici le lien vers le document.
Voici le plan d'exécution de deux requêtes à l'Oracle (la Plupart des SGBD va traiter ce le même) :
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number = '123456789'
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
Et pour IN()
:
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number in('123456789');
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
Comme vous pouvez le voir, les deux sont identiques. C'est sur une colonne indexée. En va de même pour une colonne indexée (juste full table scan) .