sql >> Database >  >> RDS >> Database

SQL IN-operator voor beginners

In SQL is de IN Met operator kunt u uw queryresultaten filteren op basis van een lijst met waarden.

U kunt het ook gebruiken om elke waarde te matchen die wordt geretourneerd door een subquery (een subquery is een query die in een andere query is genest).

Brontabellen

De volgende tabellen worden gebruikt voor de voorbeelden op deze pagina.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Resultaat:

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

Voorbeeld

Hier is een voorbeeld om de IN . te demonstreren telefoniste.

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

Resultaat:

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

We zouden hetzelfde resultaat kunnen bereiken door twee OR . te gebruiken operators:

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

Echter, de IN operator is een beknoptere manier om dit te doen. De IN operator is vooral handig als u een lange lijst met waarden hebt waarmee u kunt vergelijken.

De IN operator voert bijna altijd sneller uit dan meerdere OR operators, vooral bij grotere datasets.

Numerieke waarden

De waarden zijn niet beperkt tot alleen strings. U kunt bijvoorbeeld IN . gebruiken op een lijst met numerieke waarden.

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

Resultaat:

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

Datums

Hier is een voorbeeld dat een lijst met datums gebruikt.

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

Resultaat:

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

Gebruik IN met subquery's

Een ander voordeel van de IN operator, is dat het een andere SELECT . kan bevatten lijst. Dit staat bekend als een subquery . Een subquery is een query die is genest in een andere query (of zelfs een andere subquery).

Hier is een voorbeeld.

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

Resultaat:

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

Dit voorbeeld laat ons zien hoeveel soorten huisdieren er in ons dierenhotel zijn.

Gebruik NOT IN

We kunnen de NOT . toevoegen operator om dit om te draaien en te zien hoeveel soorten huisdieren niet zijn in ons dierenhotel.

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

Resultaat:

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

In dit geval bevat onze database het huisdiertype Rabbit , maar we hebben momenteel geen konijnen als huisdier.

Uitdrukkingen

De opgegeven waarden zijn een lijst met uitdrukkingen. Daarom kun je dit soort dingen doen:

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

Resultaat:

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

  1. De status van database-indexen analyseren

  2. SqlConnection SqlCommand SqlDataReader IDisposable

  3. PostgreSQL gecomprimeerde archieflogboeken in Windows

  4. Een CLOB-kolom opvragen in Oracle