sql >> Database >  >> RDS >> Sqlserver

SQL Server ELKE Operator uitgelegd

In SQL Server kunt u de ANY logische operator om een ​​scalaire waarde te vergelijken met een reeks waarden met één kolom die door een subquery worden geretourneerd.

Het kan worden gebruikt met subquery's die een resultatenset van één kolom hebben.

De ANY operator is het equivalent van de SOME logische operator.

Voorbeeld

Stel dat we twee tabellen hebben; Cats en Dogs

Katten

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+

Honden

+---------+-----------+
| DogId   | DogName   |
|---------+-----------|
| 1       | Fetch     |
| 2       | Fluffy    |
| 3       | Wag       |
+---------+-----------+

Laten we nu een subquery uitvoeren met de ANY telefoniste.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ANY (SELECT DogName FROM Dogs);

Resultaat:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY vs SOME

We zouden hetzelfde resultaat krijgen als we de query zouden veranderen zodat deze de SOME . gebruikt operator in plaats van ANY .

Hier gebruikt het de SOME operator in plaats van ANY .

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = SOME (SELECT DogName FROM Dogs);

Resultaat:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY vs IN

We kunnen ook de IN . gebruiken operator om hetzelfde resultaat te krijgen.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName IN (SELECT DogName FROM Dogs);

Resultaat:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

ANY vs EXISTS

We zouden hetzelfde kunnen doen met de EXISTS telefoniste.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Resultaat:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 2       | Fluffy    |
+---------+-----------+

Fout 116?

Als je fout 116 krijgt bij het gebruik van ANY , komt dit waarschijnlijk omdat u meerdere kolommen in uw subquery selecteert. De ANY operator kan alleen worden gebruikt met subquery's die een resultatenset van één kolom hebben.

Hier is een voorbeeld van hoe we deze fout kunnen veroorzaken.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = ANY (SELECT * FROM Dogs);

Resultaat:

Msg 116, Level 16, State 1, Line 5
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

In die zin is de ANY operator lijkt meer op de IN operator dan het is naar de EXISTS exploitant. We zouden dezelfde fout krijgen met IN .

Als u meerdere kolommen in uw subquery moet retourneren, gebruikt u EXISTS .


  1. Maak de prestaties van SQL Server eenvoudig

  2. UUID of SEQUENTIE voor primaire sleutel?

  3. Het zit 'm in de details

  4. Een enkel eindpunt maken voor uw PostgreSQL-replicatie-installatie met behulp van HAProxy