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

SQL FINDER Operatør for begyndere

I SQL er EXISTS operator specificerer en underforespørgsel, der skal teste for eksistensen af ​​rækker. Det returnerer TRUE når underforespørgslen returnerer en eller flere rækker.

En underforespørgsel er en forespørgsel, der er indlejret i en anden forespørgsel (eller endda en anden underforespørgsel)

Denne artikel indeholder nogle grundlæggende eksempler på EXISTS operatør.

Kildetabeller

Følgende tabeller bruges til eksemplerne på denne side.

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)

Eksempel

Her er et eksempel for at demonstrere 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       |
+-------------+-----------+

Dette eksempel viser os, hvor mange kæledyrstyper der er på vores kæledyrshotel. Der er faktisk fire kæledyrstyper, men kun tre af dem matcher med et faktisk kæledyr i Pets tabel.

Dette giver det samme resultat, som vi ville have fået med følgende forespørgsel, der bruger IN operatør.

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

Brug af NOT EXISTS

Vi kunne tilføje NOT operatør for at afvise resultaterne og se, hvor mange kæledyrstyper der ikke er på vores dyrehotel.

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 dette tilfælde indeholder vores database en kæledyrstype Rabbit , men vi har i øjeblikket ingen kaniner som kæledyr.


  1. Sådan slettes eller slettes alle triggere fra en database i SQL Server

  2. Fejl under kortlægning af postgres-arrays i Spring JPA

  3. SQL count(*) ydeevne

  4. Indsamlingsmetode:FINDER Funktion i Oracle-databasen