sql >> Databasteknik >  >> RDS >> Database

SQL IN-operatör för nybörjare

I SQL, IN operatorn låter dig filtrera dina frågeresultat baserat på en lista med värden.

Du kan också använda den för att matcha alla värden som returneras av en underfråga (en underfråga är en fråga som är kapslad i en annan fråga).

Källtabeller

Följande tabeller används för exemplen på den här sidan.

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)

Exempel

Här är ett exempel för att demonstrera 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 skulle kunna uppnå samma resultat genom att använda två OR operatörer:

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

Men IN operatör är ett mer kortfattat sätt att göra det på. IN operatören är särskilt fördelaktig när du har en lång lista med värden att jämföra med.

IN operatorn körs nästan alltid snabbare än flera OR operatörer, särskilt på större datamängder.

Numeriska värden

Värdena är inte begränsade till bara strängar. Du kan till exempel använda IN på en lista med numeriska värden.

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

Datum

Här är ett exempel som använder en lista med datum.

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

Använder IN med underfrågor

En annan fördel med IN operatorn, är att den kan innehålla en annan SELECT lista. Detta är känt som en underfråga . En underfråga är en fråga som är kapslad i en annan fråga (eller till och med en annan underfråga).

Här är ett exempel.

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

Resultat:

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

Det här exemplet visar hur många djurtyper som finns på vårt djurhotell.

Med NOT IN

Vi skulle kunna lägga till NOT operatören att vända på detta och se hur många husdjurstyper som inte är i vårt djurhotell.

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

Resultat:

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

I det här fallet innehåller vår databas en husdjurstyp av Rabbit , men vi har för närvarande inga kaniner som husdjur.

Uttryck

De angivna värdena är en lista med uttryck. Därför kan du göra sådant här:

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. Hur man uppdaterar från SELECT i SQL Server

  2. Hur man skapar en schemabunden lagrad procedur i SQL Server

  3. MySQL DROP-KOLUMN

  4. Vilket är det bästa sättet att ta bort gamla rader från MySQL på rullande basis?