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

SQL IN-operatør for begyndere

I SQL er IN operator giver dig mulighed for at filtrere dine forespørgselsresultater baseret på en liste med værdier.

Du kan også bruge den til at matche enhver værdi, der returneres af en underforespørgsel (en underforespørgsel er en forespørgsel, der er indlejret i en anden forespørgsel).

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 til at demonstrere IN operatør.

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

Resultat:

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

Vi kunne opnå det samme resultat ved at bruge to OR operatører:

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

Men IN operatør er en mere kortfattet måde at gøre det på. IN operator er især fordelagtig, når du har en lang liste af værdier, som du kan sammenligne med.

IN operator udfører næsten altid hurtigere end flere OR operatører, især på større datasæt.

Numeriske værdier

Værdierne er ikke begrænset til kun strenge. For eksempel kan du bruge IN på en liste over numeriske værdier.

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

Resultat:

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

Datoer

Her er et eksempel, der bruger en liste over datoer.

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

Resultat:

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

Brug af IN med underforespørgsler

En anden fordel ved IN operator, er, at den kan indeholde en anden SELECT liste. Dette er kendt som en underforespørgsel . En underforespørgsel er en forespørgsel, der er indlejret i en anden forespørgsel (eller endda en anden underforespørgsel).

Her er et eksempel.

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

Resultat:

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

Dette eksempel viser os, hvor mange kæledyrstyper der er på vores kæledyrshotel.

Ved brug af NOT IN

Vi kunne tilføje NOT operatør til at vende dette rundt og se, hvor mange kæledyrstyper der ikke er i vores dyrehotel.

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

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.

Udtryk

De angivne værdier er en liste over udtryk. Derfor kan du gøre ting som dette:

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

Resultat:

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

  1. Hvordan caster jeg json-array til tekst-array?

  2. Sådan beskytter du dine PostgreSQL-databaser mod cyberangreb med SQL Firewall

  3. Sådan forbinder du to tabeller ved hjælp af en kommasepareret liste i sammenføjningsfeltet

  4. RMAN-kommandoer fejler med ORA-00904:"BS".."GUID":ugyldig identifikator