Database
 sql >> Baza danych >  >> RDS >> Database

Operator SQL IN dla początkujących

W SQL IN Operator umożliwia filtrowanie wyników zapytania na podstawie listy wartości.

Możesz go również użyć do dopasowania dowolnej wartości zwróconej przez podzapytanie (podzapytanie to zapytanie zagnieżdżone w innym zapytaniu).

Tabele źródłowe

Poniższe tabele są używane jako przykłady na tej stronie.

SELECT * FROM PetTypes;
SELECT * FROM Pets;

Wynik:

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

Przykład

Oto przykład demonstrujący IN operatora.

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

Wynik:

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

Ten sam wynik możemy osiągnąć, używając dwóch OR operatorzy:

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

Jednak IN operator jest bardziej zwięzłym sposobem na zrobienie tego. IN Operator jest szczególnie przydatny, gdy masz długą listę wartości, z którymi można porównywać.

IN operator prawie zawsze wykonuje się szybciej niż wiele OR operatorów, zwłaszcza na większych zbiorach danych.

Wartości liczbowe

Wartości nie ograniczają się tylko do ciągów. Na przykład możesz użyć IN na liście wartości liczbowych.

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

Wynik:

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

Daty

Oto przykład z listą dat.

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

Wynik:

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

Korzystanie z IN z podzapytaniami

Kolejna zaleta IN operator, może zawierać inny SELECT lista. Jest to znane jako podzapytanie . Podzapytanie to zapytanie zagnieżdżone w innym zapytaniu (lub nawet innym podzapytaniu).

Oto przykład.

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

Wynik:

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

Ten przykład pokazuje nam, ile rodzajów zwierząt znajduje się w naszym hotelu dla zwierząt.

Korzystanie z NOT IN

Moglibyśmy dodać NOT operatora, aby odwrócić to i zobaczyć, ile typów zwierząt nie w naszym hotelu dla zwierząt.

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

Wynik:

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

W tym przypadku nasza baza danych zawiera typ zwierzaka Rabbit , ale obecnie nie mamy żadnych królików jako zwierząt domowych.

Wyrażenia

Podane wartości są listą wyrażeń. Dlatego możesz robić takie rzeczy:

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

Wynik:

+---------+-----------+------------+
| 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. SQL Equals (=) Operator dla początkujących

  2. Jak dodać kolumnę w tabeli w SQL?

  3. Podstawy wyrażeń tabelarycznych, Część 8 – CTE, rozważania dotyczące optymalizacji ciąg dalszy

  4. Jak stworzyć klaster Amazon Aurora?

  5. 10 przydatnych zasobów dla tych, którzy chcą dowiedzieć się więcej o SQL