Quelle est la différence entre les opérateurs IN
et ANY
en SQL?
SQL>
SQL> -- Use the ANY operator in a WHERE clause to compare a value with any of the values in a list.
SQL>
SQL> - Vous devez placer un opérateur =, <>, <,>, <= ou> = avant ANY.
SQL>
SQL> SELECT *
2 FROM employee
3 WHERE salary > ANY (2000, 3000, 4000);
Pour opérateur
SQL> -- Use the IN operator in a WHERE clause to compare a value with any of the values in a list.
mais avec le Dans vous ne pouvez pas utiliser =, <>, <,>, <= ou> =
IN-> Egal à n'importe qui dans la liste.
ANY-> Compare la valeur à chaque valeur renvoyée par la sous-requête.
ALL-> Compare la valeur à chaque valeur renvoyée par la sous-requête.
Par exemple:
IN: .__ (Q): Affichez les détails de tous les employés dont les salaires correspondent aux moins-investissements des départements?
(A): SQL> Sélectionnez Ename Sal Deptno dans Emp Where Sal IN (Sélectionnez Min (Sal) dans Emp Group by Deptno);
TOUT:
Meaans inférieur à la valeur maximale dans la liste.
(Q): Obtenir les détails de tous les employés qui gagnent moins que le plus élevé des employés, contrôlant les autres employés?
(A): SQL> Sélectionnez Empno Ename Job Sl de Emp Where Sal
N'IMPORTE QUELLE: -> Valeur supérieure à la valeur minimale indiquée dans la liste.
(Q): Obtenez les détails de tous les Emps Qui gagnent plus que le moins payé du département 10?
(A): SQL> Sélectionnez Empno Ename Job Sal à partir de Emp Où Sal> N'importe lequel (Sélectionnez Min (Sal) à partir de Emp Où Deptno 10);
TOUT: -> C'est équivalent à In Operator.
Remarque: 'Some' est également utilisé à la place de ANY.
Peut-être pour une meilleure compréhension, ces deux conditions sont équivalentes. C'est une question de goût que vous utilisez (à condition que le SGBDR les supporte tous les deux)
... WHERE x IN (SELECT Y FROM THE_TABLE)
... WHERE x =ANY (SELECT Y FROM THE_TABLE)
et ceux-ci aussi
... WHERE x NOT IN (SELECT Y FROM THE_TABLE)
... WHERE x <>ALL (SELECT Y FROM THE_TABLE)
En fait, mon habitude personnelle est d'utiliser IN
pour l'expression de liste (comme WHERE x IN (2,4,6,8)
et =ANY
, resp. <>ALL
pour les sous-requêtes.
Tout en utilisant
SELECT empno, sal FROM emp WHERE sal> ALL (2000, 3000, 4000);
EMPNO SAL
7839 5000
Il retournera un résultat équivalent à la requête:
CHOISISSEZ empno, sal FROM emp WHERE sal> 2000 AND sal> 3000 AND sal> 4000;
Tout en utilisant
SELECT empno, sal FROM emp WHERE sal> ANY (2000, 3000, 4000);
EMPNO SAL
7566 2975
7698 2850
7782 2450
7788 3000
7839 5000
7902 3000
Renvoie un résultat identique à
SELECT empno, sal DE EMP WHERE sal> 2000 OR sal> 3000 OR sal> 4000;
TOUT OPERATEUR DANS SQL SERVER 2008R2.
En utilisant> l'opérateur de comparaison comme exemple,> ALL signifie plus grand que chaque valeur, autrement dit plus grand que la valeur maximum. Par exemple,> ALL (1, 2, 3) signifie supérieur à 3.> ANY signifie supérieure à au moins une valeur, c'est-à-dire supérieure au minimum. Donc> ANY (1, 2, 3) signifie plus que 1.
De même,> ANY signifie que pour qu'une ligne satisfasse à la condition spécifiée dans la requête externe, la valeur de la colonne introduisant la sous-requête doit être supérieure à au moins une des valeurs de la liste des valeurs renvoyées par la sous-requête.
Les opérateurs ANY et ALL sont utilisés avec une clause WHERE ou HAVING.
L'opérateur ANY renvoie true si l'une des valeurs de sous-requête remplit la condition.
L'opérateur ALL renvoie true si toutes les valeurs de sous-requête remplissent la condition.
Avec ANY, vous avez besoin d'un opérateur:
WHERE X > ANY (SELECT Y FROM Z)
Avec IN, vous ne pouvez pas. C'est toujours tester pour l'égalité.
Lorsque nous comparons une valeur de colonne en utilisant "IN", un ensemble dit {value1,value2 ...}
, alors la valeur de la colonne doit être présente dans l'ensemble, mais dans le cas de ANY, nous comparons comme suit:
col.value > ANY ({value1,value2,...})
alors la valeur doit être supérieure à l'une quelconque de la valeur définie.
en cas de "ALL"
col.value> ALL({value1,value2,...})
la valeur doit être supérieure à toutes les valeurs de l'ensemble.
Reportez-vous aux images suivantes pour une meilleure compréhension: