sql >> Databáze >  >> RDS >> Database

SQL EXISTS Operátor pro začátečníky

V SQL EXISTS operátor určuje poddotaz, který má otestovat existenci řádků. Vrací TRUE když poddotaz vrátí jeden nebo více řádků.

Poddotaz je dotaz, který je vnořen do jiného dotazu (nebo dokonce jiného poddotazu)

Tento článek obsahuje některé základní příklady EXISTS operátor.

Tabulky zdrojů

Následující tabulky jsou použity pro příklady na této stránce.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Výsledek:

+-------------+-----------+
| 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)

Příklad

Zde je příklad demonstrující EXISTS operátor.

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

Výsledek:

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

Tento příklad nám ukazuje, kolik druhů zvířat je v našem hotelu pro domácí mazlíčky. Ve skutečnosti existují čtyři typy mazlíčků, ale pouze tři z nich se shodují se skutečným mazlíčkem v Pets tabulka.

To poskytuje stejný výsledek, jaký bychom dostali s následujícím dotazem, který používá IN operátor.

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

Pomocí NOT EXISTS

Mohli bychom přidat NOT operátora negovat výsledky a zjistit, kolik typů zvířat ne v našem zvířecím hotelu.

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

Výsledek:

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

V tomto případě naše databáze obsahuje mazlíčka typu Rabbit , ale v současné době nemáme žádné králíky jako domácí mazlíčky.


  1. Jak získat efektivní řešení zablokování SQL Serveru v C# pomocí ADO?

  2. Funkce zabezpečení v SQL Server 2017

  3. Upozornění:mysql_query():3 není platný prostředek MySQL-Link

  4. ORA-08177:Nelze serializovat přístup pro tuto transakci