Database
 sql >> база данни >  >> RDS >> Database

SQL IN оператор за начинаещи

В SQL, IN операторът ви позволява да филтрирате резултатите от заявката си въз основа на списък със стойности.

Можете също да го използвате, за да съответства на всяка стойност, върната от подзаявка (подзаявката е заявка, която е вложена в друга заявка).

Изходни таблици

Следните таблици се използват за примерите на тази страница.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Резултат:

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

Пример

Ето пример за демонстриране на IN оператор.

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

Резултат:

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

Можем да постигнем същия резултат, като използваме две OR оператори:

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

Въпреки това, IN operator е по-сбит начин да го направите. IN операторът е особено полезен, когато имате дълъг списък от стойности, с които да сравните.

IN операторът почти винаги се изпълнява по-бързо от множество OR оператори, особено при по-големи набори от данни.

Числови стойности

Стойностите не са ограничени само до низове. Например, можете да използвате IN в списък с числови стойности.

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

Резултат:

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

Дати

Ето пример, който използва списък с дати.

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

Резултат:

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

Използване на IN с подзаявки

Друго предимство на IN оператор, е, че може да съдържа друг SELECT списък. Това е известно като подзаявка . Подзаявката е заявка, която е вложена в друга заявка (или дори друга подзаявка).

Ето един пример.

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

Резултат:

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

Този пример ни показва колко вида домашни любимци има в нашия хотел за домашни любимци.

Използване на NOT IN

Бихме могли да добавим NOT оператор, за да обърне това и да види колко вида домашни любимци не в нашия хотел за домашни любимци.

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

Резултат:

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

В този случай нашата база данни съдържа домашен любимец тип Rabbit , но в момента нямаме зайци като домашни любимци.

Изрази

Предоставените стойности са списък с изрази. Следователно можете да правите неща като това:

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Лесна работа с CRUD с PDO база данни

  2. Топ 10 причини защо трябва да научите SQL

  3. Създайте връзка в SQL

  4. Премахване на следата по подразбиране – част 3

  5. SQL И оператор за начинаещи