sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server NÅGON operatör förklaras

I SQL Server kan du använda SOME logisk operator för att jämföra ett skalärt värde med en uppsättning värden i en kolumn som returneras av en underfråga.

Den kan användas med underfrågor som har en resultatuppsättning av en kolumn.

SOME operatorn är motsvarigheten till ANY logisk operator.

Exempel

Föreställ dig att vi har två bord; Cats och Dogs

Katter

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

Hundar

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

Låt oss nu köra en underfråga med ANY operatör.

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

Resultat:

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

SOME kontra ANY

Som nämnts, SOME är motsvarigheten till ANY .

Så vi kunde ändra vår fråga till att använda ANY istället för SOME .

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

Resultat:

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

SOME kontra IN

Vi skulle få samma resultat om vi skulle ändra frågan så att den använder IN operator istället för SOME .

Här använder den IN operatör.

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

Resultat:

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

SOME kontra EXISTS

Vi skulle kunna göra samma sak med EXISTS operatör.

Här använder den 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    |
+---------+-----------+

Fel 116?

Om du får fel 116 när du använder SOME , beror det förmodligen på att du väljer flera kolumner i din underfråga. SOME operatorn kan endast användas med underfrågor som har en resultatuppsättning av en kolumn.

Här är ett exempel på hur vi kan orsaka detta fel.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName = SOME (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.

Vi skulle få samma fel med IN . Om du måste returnera flera kolumner i din underfråga, använd EXISTS .


  1. Hur man konverterar Excel-ark till SQLite-databas i Android

  2. Hur exporterar jag frågeresultat till Excel i Oracle SQL Developer?

  3. VÄLJ FÖR XML AUTO och returnera datatyper

  4. mysqli::query():Det gick inte att hämta mysqli