sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Enhver operatør forklaret

I SQL Server kan du bruge ANY logisk operator til at sammenligne en skalarværdi med et enkelt-kolonne sæt værdier, der returneres af en underforespørgsel.

Det kan bruges med underforespørgsler, der har et resultatsæt på én kolonne.

ANY operator svarer til SOME logisk operator.

Eksempel

Antag, at vi har to tabeller; Cats og Dogs

Katte

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

Hunde

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

Lad os nu køre en underforespørgsel ved hjælp af ANY operatør.

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

Resultat:

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

ANY vs SOME

Vi ville få det samme resultat, hvis vi ændrede forespørgslen, så den bruger SOME operator i stedet for ANY .

Her bruger den SOME operator i stedet for ANY .

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

Resultat:

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

ANY vs IN

Vi kunne også bruge IN operatør for at få det samme resultat.

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

Resultat:

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

ANY vs EXISTS

Vi kunne gøre det samme med EXISTS operatør.

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

Resultat:

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

Fejl 116?

Hvis du får fejl 116, når du bruger ANY , er det sandsynligvis fordi du vælger flere kolonner i din underforespørgsel. ANY operator kan kun bruges med underforespørgsler, der har et resultatsæt på én kolonne.

Her er et eksempel på, hvordan vi kan forårsage denne fejl.

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

Resultat:

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.

I denne forstand er ANY operatoren minder mere om IN operatør end den er til EXISTS operatør. Vi ville få den samme fejl med IN .

Hvis du skal returnere flere kolonner i din underforespørgsel, skal du bruge EXISTS .


  1. LEFT() vs SUBSTRING() i SQL Server:Hvad er forskellen?

  2. Sådan opretter du visning i SQL

  3. ORA-28040:Ingen matchende godkendelsesprotokol undtagelse

  4. Hvordan udskriver man 1 til 10 uden at bruge Loop i PL/SQL?