sql >> Databasteknik >  >> RDS >> Database

SQL FINNS Operatör för nybörjare

I SQL, EXISTS operatorn anger en underfråga för att testa förekomsten av rader. Den returnerar TRUE när underfrågan returnerar en eller flera rader.

En underfråga är en fråga som är kapslad i en annan fråga (eller till och med en annan underfråga)

Den här artikeln innehåller några grundläggande exempel på EXISTS operatör.

Källtabeller

Följande tabeller används för exemplen på denna sida.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Resultat:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+
(4 rows affected)
+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Exempel

Här är ett exempel för att visa EXISTS operatör.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Resultat:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Det här exemplet visar hur många djurtyper som finns på vårt djurhotell. Det finns faktiskt fyra husdjurstyper, men bara tre av dem matchar ett verkligt husdjur i Pets bord.

Detta ger samma resultat som vi skulle ha fått med följande fråga som använder IN operatör.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Med NOT EXISTS

Vi skulle kunna lägga till NOT operatör för att förneka resultaten och se hur många husdjurstyper som inte är i vårt djurhotell.

SELECT 
    pt.PetTypeId,
    pt.PetType
FROM PetTypes pt
WHERE NOT EXISTS ( 
    SELECT p.PetTypeId 
    FROM Pets p 
    WHERE p.PetTypeId = pt.PetTypeId 
    );

Resultat:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

I det här fallet innehåller vår databas en husdjurstyp av Rabbit , men vi har för närvarande inga kaniner som husdjur.


  1. Hur man installerar SQL Server på Red Hat 8

  2. Finns det en prestandaskillnad mellan CTE , Sub-Query, Temporary tabell eller Tabellvariabel?

  3. Fulltextsökningar i MySQL:The Good, the Bad and the Ugly

  4. SQL Server bcp Utility och den numeriska datatypen