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

SQL IN operátor pro začátečníky

V SQL, IN Operátor umožňuje filtrovat výsledky dotazu na základě seznamu hodnot.

Můžete jej také použít k porovnání jakékoli hodnoty vrácené poddotazem (poddotaz je dotaz, který je vnořen do jiného dotazu).

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í IN operátor.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Stejného výsledku bychom mohli dosáhnout použitím dvou OR operátoři:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Nicméně IN operátor je stručnější způsob, jak to udělat. IN Operátor je zvláště výhodný, když máte dlouhý seznam hodnot, se kterými můžete porovnávat.

IN Operátor se téměř vždy provádí rychleji než více OR operátorů, zejména u větších datových souborů.

Číselné hodnoty

Hodnoty nejsou omezeny pouze na řetězce. Můžete například použít IN na seznamu číselných hodnot.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 5);

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+

Data

Zde je příklad, který používá seznam dat.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE DOB IN (
    '2020-11-20', 
    '2018-10-01', 
    '2015-10-01'
    );

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
+---------+-----------+------------+

Pomocí IN s poddotazy

Další výhoda IN operátor je, že může obsahovat další SELECT seznam. Toto je známé jako poddotaz . Poddotaz je dotaz, který je vnořen do jiného dotazu (nebo dokonce jiného poddotazu).

Zde je příklad.

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

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.

Pomocí NOT IN

Mohli bychom přidat NOT operátora otočte a uvidíte, kolik typů mazlíčků ne je v našem zvířecím hotelu.

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

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.

Výrazy

Uvedené hodnoty jsou seznamem výrazů. Proto můžete dělat věci jako toto:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetId IN (1, 3, 2 + 3);

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 3       | Scratch   | 2018-10-01 |
| 5       | Tweet     | 2020-11-28 |
+---------+-----------+------------+

  1. Při kopírování hierarchických dat zachovejte vztahy rodiče a potomka

  2. PDO::PARAM pro typ desítkové?

  3. Chyba serveru SQL:Řetězec nebo binární data by byla zkrácena

  4. Jak přepsat IS DISTINCT FROM a IS NOT DISTINCT FROM?